Tareas #6011

Tareas #5929: Nueva plataforma de servidores

Tareas #5965: Instalación de servidores físicos

Tareas #6009: Automatización de la configuración de los servidores con ansible

Playbook de creación de un virtual o de un container

Añadido por Daniel Viñar Ulriksen hace 4 meses. Actualizado hace alrededor de 2 meses.

Estado:En cursoFecha de inicio:2018-08-01
Prioridad:NormalFecha fin:
Asignado a:Daniel Viñar Ulriksen% Realizado:

70%

Categoría:-Tiempo dedicado:31.00 horas
Versión prevista:-

Descripción

Ya hay 3 nombres de dominio definidos en el inventario para contenedores o virtuales en guri.

Con los módulos ansible proxmox y proxmox_kvm conviene armar un playbook de creación de un servidor. Típicamente, es una tarea con una cantidad de variables.

Primero hacer un playbook lineal con los valores de los argumentos escritos a fuego en el playbook. Cuando es anda, estudiar la buena manera de organizar los parámetros, que son a priori por host.

Histórico

#1 Actualizado por Daniel Viñar Ulriksen hace 4 meses

  • Estado cambiado Nueva por En curso
  • % Realizado cambiado 0 por 10

#2 Actualizado por Daniel Viñar Ulriksen hace 4 meses

Un primer playbook funcional de creación de un container con el módulo ansible proxmox:
https://git.interior.edu.uy/adminsys/config/blob/master/instalar_araza.yml

Temas:
  • el parámetro ip_address documentado no parece funionar. A la inversa, en los ejemplos se da la IP mediante sub-parámetros a netif:, con una sintaxis algo rara, que no termina de ser del todo yaml, me parece,
  • por ahora tengo la contraseña a fuego (luego sería mejor borrar ese commit, aunque el proyecto sea de acceso privado). No logro usar la variable PROXMOX_PASSWORD que se menciona en la doc. con un export PROXMOX_PASSWORD=mi_contrtasena antes de correr el playbook no funciona, globalmente la solución en ansible parece ser usar los "vault":

#3 Actualizado por Daniel Viñar Ulriksen hace 4 meses

Dos documentaciones interesantes:

#4 Actualizado por Daniel Viñar Ulriksen hace 3 meses

Acá hay una contribución que se presenta como un PoC (proof of concept) de los módulos proxmox de ansible.

#5 Actualizado por Daniel Viñar Ulriksen hace 3 meses

  • % Realizado cambiado 10 por 20
El playbook más avanzado de creación de contenedor es este de belvil.net
Tardé en comprender el módulo proxmox de ansible:
  • cuando se pone un state=present es para provocar la creación, en cual caso NO hay que poner la VMID.
  • al crear el contenedor, no se puede poner state=started. Aparentemente este parámetro requiere que esté creada la VM, y la arranca. Al contrario requiere la VMID.

Tal cual está el script genera los contenedores con sus parámetros de inventario (aunque falta parametrizar cosas como la IP y MAC addr), los arranca, pero el único acceso que define es como root, y el root está cerrado con password en ssh (default open-ssh-server). Falta por ende generar una forma de acceso a la VM.

Tenemos la posibilidad del comando:

pct <VMID> consola

Pero no estoy logrando en ansible ir a loguearme e ingresar comandos en esa consola, para crear el usuario deploy.

También estaba experimentando usar el comando:

pct push <VMID> <archivo> <destino>

que copia una archivo en la VM, para subir las claves ssh en deploy.

Idea al escribir esto: usar solo pct push para subir las claves del deploy (o del root) del servidor madre al contenedor.

#6 Actualizado por Daniel Viñar Ulriksen hace 3 meses

  • % Realizado cambiado 20 por 30

Listo el playbook de creación de un contenedor, se puede retomar casi tal cual para usarlo en @interior.edu.uy".

#7 Actualizado por Andrés Pías hace 3 meses

Copié el rol y playbooks dentro de mi rama andres-dev y configuré variables:

Daniel Viñar Ulriksen escribió:

Listo el playbook de creación de un contenedor, se puede retomar casi tal cual para usarlo en @interior.edu.uy".

Quedaron algunas cosas por resolver:
  • Al correr el playbook se observan errores:
    fatal: [pitanga.interior.edu.uy -> guri.interior.edu.uy]: FAILED! => {"changed": false, "msg": "uploading of template debian-9.0-standard_9.5-1_amd64.tar.gz failed with exception: 403 Forbidden: {\"data\":null}"}
    
  • Me sigue sin convencer poner una Mac y una IP por defecto para cualquier contenedor LXC. No entiendo o no recuerdo como se sobrescriben estos valores para cada contenedor en particular.
  • No nos tenemos que olvidar de hacer un merge de la rama andres-dev a la master.

#8 Actualizado por Daniel Viñar Ulriksen hace 2 meses

  • % Realizado cambiado 30 por 70

Ya está, tenemos el playbook crear_lxc.yml más o menos operacional, nos sirvió para araza y mburucuya.

#9 Actualizado por Daniel Viñar Ulriksen hace alrededor de 2 meses

Caímos sobre un error de acceso a un contenedor recién creado:

TASK [crear_lxc : instalar contenedores proxmox en guri] **************************************************************************************************************
changed: [mburucuya.interior.edu.uy -> botija.interior.edu.uy]

TASK [crear_lxc : Mirá el número de la VM] ****************************************************************************************************************************
ok: [mburucuya.interior.edu.uy] => {
    "contenedor": {
        "changed": true, 
        "failed": false, 
        "msg": "deployed VM 101 from template local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz" 
    }
}

(...)

TASK [crear_lxc : arrancar el contenedor] *****************************************************************************************************************************
changed: [mburucuya.interior.edu.uy -> botija.interior.edu.uy]

PLAY [configuración del acceso del usuario deploy] ********************************************************************************************************************

TASK [acceso_deploy : instalar paquetes para seguridad y admin] *******************************************************************************************************
fatal: [mburucuya.interior.edu.uy]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host mburucuya.interior.edu.uy port 22: Network is unreachable\r\n", "unreachable": true}
    to retry, use: --limit @/home/ulvida/Documentos/tech/interior/config/site.retry

PLAY RECAP ************************************************************************************************************************************************************
mburucuya.interior.edu.uy  : ok=8    changed=3    unreachable=1    failed=0  

En realidad, aparentemente el problema sucede sólo cuando borramos un contenedor y que volvemos a crear uno con la misma IP. Y el problema es simplemente que, en las tablas del bridge en el servidor madre, la IP aún está asociada a otra MAC address, como documentado acá para proxmox, y en la contribuciń siguiente un enlace al problema más general.

¿hacemos un clean de las tablas arp? Ok, pero no es urgente.

#10 Actualizado por Daniel Viñar Ulriksen hace alrededor de 2 meses

Probé bastante soluciones (más bien workaround) para el problema anterior. Raro.

  • El síntoma: si existe un contenedor (o cualquier servidor en la vuelta, sin duda) con una IP, que se lo suprime, al crear un nuevo contenedor con la misma IP (pero con una dirección MAC diferente), no se llega ni en ping (menos en ssh) al mismo.
  • La solución (a mano): Se resuelve cuando uno entra a la consola del contenedor (a través de la consola proxmox) y simplemente tirar cualquier comando de red.

#11 Actualizado por Daniel Viñar Ulriksen hace alrededor de 2 meses

  • Asignado a cambiado Cielito - adminsys por Daniel Viñar Ulriksen

Los parámetros del módulo proxmox de ansible no están muy bien documentados, pero en realidad, sólo retoma la APIv2 de proxmox, a través del wapper python proxmoxer.

Por ejemplo, en /nodes/{node}/lxc, pestaña POST, tenemos las especificaciones que tanto buscamos para definir los parámetros de red netif.

Exportar a: Atom PDF