lae.proxmox

Galaxy Role

lae.proxmox

Instala y configura Proxmox Virtual Environment 6.x/7.x/8.x en servidores Debian.

Este rol te permite desplegar y gestionar instalaciones PVE de nodo único y clústeres PVE (3 o más nodos) en Debian Buster (10) y Bullseye (11). Con este rol puedes configurar lo siguiente:

  • Definiciones de PVE RBAC (roles, grupos, usuarios y listas de control de acceso)
  • Definiciones de Almacenamiento PVE
  • datacenter.cfg
  • Certificados HTTPS para la interfaz web de Proxmox (puedes traer los tuyos)
  • Selección de repositorio PVE (por ejemplo, pve-no-subscription o pve-enterprise)
  • Módulos de watchdog (IPMI y NMI) con configuración aplicable de pve-ha-manager
  • Configuración del módulo ZFS y correos electrónicos de notificación ZED

Con el clustering habilitado, este rol hace (o te permite hacer) lo siguiente:

  • Asegurar que todos los hosts puedan conectarse entre sí como root a través de SSH
  • Inicializar un nuevo clúster PVE (o posiblemente adoptar uno existente)
  • Crear o agregar nuevos nodos a un clúster PVE
  • Configurar Ceph en un clúster PVE
  • Crear y gestionar grupos de alta disponibilidad

Soporte/Contribuciones

Para soporte o si deseas contribuir a este rol y necesitas orientación, siéntete libre de unirte a este servidor de Discord: https://discord.gg/cjqr6Fg. Ten en cuenta que esta es una invitación temporal, así que tendrás que esperar a que @lae te asigne un rol, de lo contrario, Discord te eliminará del servidor cuando cierres sesión.

Inicio Rápido

El objetivo principal de este rol es configurar y gestionar un clúster Proxmox VE (ver ejemplo de playbook), sin embargo, este rol también puede usarse para instalar rápidamente servidores Proxmox de nodo único.

Asumo que ya tienes Ansible instalado. Necesitarás usar una máquina externa a la que estés instalando Proxmox (principalmente debido al reinicio en medio de la instalación, aunque más adelante podría manejar esto de manera diferente para este caso de uso).

Copia el siguiente playbook a un archivo llamado install_proxmox.yml:

- hosts: all
  become: True
  roles:
    - role: geerlingguy.ntp
      vars:
        ntp_manage_config: true
        ntp_servers:
          - clock.sjc.he.net
          - clock.fmt.he.net
          - clock.nyc.he.net
    - role: lae.proxmox
      vars:
        - pve_group: all
        - pve_reboot_on_kernel_update: true

Instala este rol y un rol para configurar NTP:

ansible-galaxy install lae.proxmox geerlingguy.ntp

Ahora puedes realizar la instalación:

ansible-playbook install_proxmox.yml -i $SSH_HOST_FQDN, -u $SSH_USER

Si tu SSH_USER tiene una contraseña sudo, pasa la opción -K al comando anterior. Si también te autenticas en el host con contraseña en lugar de con autenticación de clave pública, pasa la opción -k (asegúrate de tener sshpass instalado también). Puedes establecer esas variables antes de ejecutar el comando o simplemente reemplazarlas. Toma en cuenta que la coma es importante, ya que se espera una lista (de lo contrario, intentará buscar un archivo que contenga una lista de hosts).

Una vez completado, deberías poder acceder a tu instancia de Proxmox VE en https://$SSH_HOST_FQDN:8006.

Desplegando un clúster PVE 8.x completo

Crea un nuevo directorio de playbook. Llamamos al nuestro lab-cluster. Nuestro playbook eventualmente se verá así, pero el tuyo no tiene que seguir todos los pasos:

lab-cluster/
├── files
│   └── pve01
│       ├── lab-node01.local.key
│       ├── lab-node01.local.pem
│       ├── lab-node02.local.key
│       ├── lab-node02.local.pem
│       ├── lab-node03.local.key
│       └── lab-node03.local.pem
├── group_vars
│   ├── all
│   └── pve01
├── inventory
├── roles
│   └── requirements.yml
├── site.yml
└── templates
    └── interfaces-pve01.j2

Lo primero que notarás es que tenemos un montón de archivos .key y .pem. Estos son claves privadas y certificados SSL que este rol usará para configurar la interfaz web de Proxmox en todos los nodos. Sin embargo, no son necesarios si deseas seguir usando los certificados firmados por la CA que Proxmox configura internamente. A menudo, puedes usar Ansible Vault para cifrar las claves privadas, por ejemplo:

ansible-vault encrypt files/pve01/*.key

Esto requeriría que pases la contraseña de Vault al ejecutar el playbook.

Primero, especifiquemos nuestros hosts del clúster. Nuestro archivo inventory podría verse así:

[pve01]
lab-node01.local
lab-node02.local
lab-node03.local

Podrías tener múltiples clústeres, así que es buena idea tener un grupo para cada clúster. Ahora, especifiquemos nuestras dependencias de roles en roles/requirements.yml:

---
- src: geerlingguy.ntp
- src: lae.proxmox

Necesitamos un rol NTP para configurarlo, así que utilizamos el rol de Jeff Geerling para ello. No lo necesitarías si ya tienes configurado NTP o tienes un método diferente para configurarlo.

Ahora, establezcamos algunas variables de grupo. Primero, creemos group_vars/all para establecer las variables relacionadas con NTP:

---
ntp_manage_config: true
ntp_servers:
  - lab-ntp01.local iburst
  - lab-ntp02.local iburst

Por supuesto, reemplaza esos servidores NTP con los que prefieras.

Ahora para el cuerpo de tu playbook, las variables de grupo de pve01. Crea un archivo group_vars/pve01, agrega lo siguiente y modifícalo según tu entorno.

---
pve_group: pve01
pve_watchdog: ipmi
pve_ssl_private_key: "{{ lookup('file', pve_group + '/' + inventory_hostname + '.key') }}"
pve_ssl_certificate: "{{ lookup('file', pve_group + '/' + inventory_hostname + '.pem') }}"
pve_cluster_enabled: yes
pve_groups:
  - name: ops
    comment: Equipo de Operaciones
pve_users:
  - name: admin1@pam
    email: [email protected]
    firstname: Admin
    lastname: Usuario 1
    groups: [ "ops" ]
  - name: admin2@pam
    email: [email protected]
    firstname: Admin
    lastname: Usuario 2
    groups: [ "ops" ]
pve_acls:
  - path: /
    roles: [ "Administrator" ]
    groups: [ "ops" ]
pve_storages:
  - name: localdir
    type: dir
    content: [ "images", "iso", "backup" ]
    path: /plop
    maxfiles: 4
pve_ssh_port: 22

interfaces_template: "interfaces-{{ pve_group }}.j2"

pve_group se establece en el nombre del grupo de nuestro clúster, pve01 - se utilizará para asegurar que todos los hosts de ese grupo puedan conectarse entre sí y estén agrupados. Ten en cuenta que el nombre del clúster PVE se establecerá en este nombre de grupo, a menos que se especifique otra cosa mediante pve_cluster_clustername. Si dejas esto sin definir, se predeterminará a proxmox.

Aquí, pve_watchdog habilita el soporte para el watchdog IPMI y configura el administrador de HA de PVE para usarlo. Déjalo indefinido si no deseas configurarlo.

pve_ssl_private_key y pve_ssl_certificate apuntan a los certificados SSL para el clúster PVE. Aquí se utiliza una búsqueda de archivo para leer el contenido de un archivo en el playbook, por ejemplo, files/pve01/lab-node01.key. También puedes utilizar variables de host en lugar de archivos, si lo prefieres.

pve_cluster_enabled habilita al rol para realizar todas las tareas de gestión de clúster. Esto incluye crear un clúster si no existe o agregar nodos al clúster existente. Hay verificaciones para asegurarse de no mezclar nodos que ya están en clústeres existentes con diferentes nombres.

pve_groups, pve_users y pve_acls autorizan a algunos usuarios de UNIX locales (deben existir previamente) para acceder a PVE y les otorgan el rol de Administrador como parte del grupo ops. Consulta la sección Gestión de Usuarios y ACL para más información.

pve_storages permite crear diferentes tipos de almacenamiento y configurarlos. El backend debe ser compatible con Proxmox. Consulta la sección Gestión de Almacenamiento para más detalles.

pve_ssh_port te permite cambiar el puerto SSH. Si tu SSH escucha en un puerto diferente al 22, por favor establece esta variable. Si un nuevo nodo se une al clúster, el clúster PVE necesita comunicarse una vez a través de SSH.

pve_manage_ssh (true por defecto) te permite deshabilitar cualquier cambio que este módulo realice en la configuración de tu servidor SSH. Esto es útil si usas otro rol para gestionar tu servidor SSH. Ten en cuenta que establecer esto en false no está oficialmente soportado, tendrás que replicar los cambios que normalmente se hacen en ssh_cluster_config.yml y pve_add_node.yml.

interfaces_template se establece en la ruta de una plantilla que utilizaremos para configurar la red en estas máquinas Debian. Esto es solo necesario si deseas gestionar la red desde Ansible en lugar de manualmente o a través de cada host en PVE. Probablemente deberías estar familiarizado con Ansible antes de hacer esto, ya que tu método puede involucrar establecer variables de host para las direcciones IP de cada host, etc.

Vamos a sacar esa plantilla de interfaz del camino. Siéntete libre de omitir este archivo (y dejarlo indefinido en group_vars/pve01) de lo contrario. Aquí hay una que utilizo:

# {{ ansible_managed }}
auto lo
iface lo inet loopback

allow-hotplug enp2s0f0
iface enp2s0f0 inet manual

auto vmbr0
iface vmbr0 inet static
    address {{ lookup('dig', ansible_fqdn) }}
    gateway 10.4.0.1
    netmask 255.255.255.0
    bridge_ports enp2s0f0
    bridge_stp off
    bridge_fd 0

allow-hotplug enp2s0f1
auto enp2s0f1
iface enp2s0f1 inet static
    address {{ lookup('dig', ansible_hostname + "-clusternet.local") }}
    netmask 255.255.255.0

Es posible que no estés familiarizado con la búsqueda dig, pero básicamente estamos haciendo una búsqueda de registro A para cada máquina (por ejemplo, lab-node01.local) para la primera interfaz (y configurándola como un puente que utilizaremos para interfaces de VM), y luego otra búsqueda ligeramente modificada para la red de "clustering" que podríamos usar para Ceph ("lab-node01-clusternet.local"). Por supuesto, la tuya podría verse completamente diferente, especialmente si utilizas bonding, tres redes diferentes para gestión/corosync, almacenamiento y tráfico de VM, etc.

Finalmente, escribamos nuestro playbook. site.yml se verá algo así:

---
- hosts: all
  become: True
  roles:
    - geerlingguy.ntp

# Deja esto fuera si no vas a modificar la red a través de Ansible
- hosts: pve01
  become: True
  serial: 1
  tasks:
    - name: Instalar bridge-utils
      apt:
        name: bridge-utils

    - name: Configurar /etc/network/interfaces
      template:
        src: "{{ interfaces_template }}"
        dest: /etc/network/interfaces
      register: _configure_interfaces

    - block:
      - name: Reiniciar por cambios en la red
        shell: "sleep 5 && shutdown -r now 'Se encontraron cambios en la red, reiniciando'"
        async: 1
        poll: 0

      - name: Esperar a que el servidor vuelva a estar en línea
        wait_for_connection:
          delay: 15
      when: _configure_interfaces is changed

- hosts: pve01
  become: True
  roles:
    - lae.proxmox

Básicamente, ejecutamos el rol de NTP en todos los hosts (es posible que desees agregar algunas máquinas que no sean Proxmox), configuramos la red en pve01 con nuestra red de clúster separada y diseño de puente, reiniciamos para hacer que esos cambios entren en vigor, y luego ejecutamos este rol Proxmox contra los hosts para configurar un clúster.

En este punto, nuestro playbook está listo y podemos ejecutarlo.

Asegúrate de que los roles y dependencias estén instalados:

ansible-galaxy install -r roles/requirements.yml --force
pip install jmespath dnspython

jmespath es requerido para algunas de las tareas relacionadas con el clustering. dnspython solo es necesario si estás usando una búsqueda dig, que probablemente no estarás si omitiste la configuración de red. Pasamos --force a ansible-galaxy aquí para que los roles se actualicen a sus versiones más recientes si ya están instalados.

Ahora ejecuta el playbook:

ansible-playbook -i inventory site.yml -e '{"pve_reboot_on_kernel_update": true}'

El -e '{"pve_reboot_on_kernel_update": true}' debería ejecutarse principalmente la primera vez que haces la configuración del clúster Proxmox, ya que reiniciará el servidor para arrancar con un kernel PVE. Las ejecuciones posteriores deberían omitir esto, ya que deseas reiniciar secuencialmente los servidores después de que el clúster esté en funcionamiento.

Para especificar un usuario particular, usa -u root (reemplazando root), y si necesitas proporcionar contraseñas, usa -k para la contraseña SSH y/o -K para la contraseña sudo. Por ejemplo:

ansible-playbook -i inventory site.yml -K -u admin1

Esto pedirá una contraseña sudo, luego iniciará sesión en el usuario admin1 (usando autenticación de clave pública - añade -k para contraseña) y ejecutará el playbook.

¡Eso es todo! Ahora deberías tener un clúster Proxmox completamente desplegado. Puede que desees crear almacenamiento Ceph en él después (consulta Ceph para más info) y posiblemente otras tareas, pero la parte difícil está mayormente completa.

Ejemplo de Playbook

Esto configurará los hosts en el grupo pve01 como un solo clúster, así como reiniciará las máquinas si el kernel ha sido actualizado. (Solo se recomienda establecer esta bandera durante la instalación; los reinicios durante la operación deben ocurrir de forma secuencial durante un período de mantenimiento). También habilitará el watchdog IPMI.

- hosts: pve01
  become: True
  roles:
    - role: geerlingguy.ntp
        ntp_manage_config: true
        ntp_servers:
          - clock.sjc.he.net
          - clock.fmt.he.net
          - clock.nyc.he.net
    - role: lae.proxmox
        pve_group: pve01
        pve_cluster_enabled: yes
        pve_reboot_on_kernel_update: true
        pve_watchdog: ipmi

Variables del Rol

[variable]: [default] #[descripcion/purpose]
pve_group: proxmox # grupo de hosts que contiene los hosts Proxmox que se agruparán
pve_repository_line: "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" # configuración del repositorio apt - cambia a enterprise si es necesario (aunque TODO se puede requerir una configuración adicional)
pve_remove_subscription_warning: true # parchea los mensajes de advertencia de suscripción en proxmox si estás usando la edición comunitaria
pve_extra_packages: [] # Cualquier paquete adicional que desees instalar, por ejemplo, ngrep
pve_run_system_upgrades: false # Permitir que el rol realice actualizaciones del sistema
pve_run_proxmox_upgrades: true # Permitir que el rol realice actualizaciones de Proxmox VE
pve_check_for_kernel_update: true # Ejecuta un script en el host para comprobar las versiones del kernel
pve_reboot_on_kernel_update: false # Si se establece en true, reiniciará automáticamente la máquina en las actualizaciones del kernel
pve_reboot_on_kernel_update_delay: 60 # Número de segundos para esperar antes y después de un proceso de reinicio para proceder con la siguiente tarea en modo de clúster
pve_remove_old_kernels: true # Actualmente elimina el kernel del repositorio principal de Debian
pve_pcie_passthrough_enabled: false # Establece esto en true para habilitar el paso de PCIe.
pve_iommu_passthrough_mode: false # Establece esto en true para permitir que las VMs omitan la traducción DMA. Esto podría aumentar el rendimiento para el paso de IOMMU.
pve_iommu_unsafe_interrupts: false # Establece esto en true si tu sistema no soporta reenvío de interrupciones.
pve_mediated_devices_enabled: false # Establece esto en true si tu dispositivo soporta gtv-g y deseas habilitar la funcionalidad dividida.
pve_pcie_ovmf_enabled: false # Establece esto en true para habilitar el paso de PCI para GPU OVMF.
pve_pci_device_ids: [] # Lista de IDs de dispositivo pci (ver https://pve.proxmox.com/wiki/Pci_passthrough#GPU_Passthrough).
pve_vfio_blacklist_drivers: [] # Lista de controladores de dispositivos a excluir del host Proxmox (ver https://pve.proxmox.com/wiki/PCI(e)_Passthrough).
pve_pcie_ignore_msrs: false # Establece esto en true si se pasa a la máquina Windows para evitar que la VM se bloquee.
pve_pcie_report_msrs: true # Establece esto en false para evitar que el sistema dmesg registre informes de fallas msrs.
pve_watchdog: none # Establece esto en "ipmi" si deseas configurar un watchdog de hardware. Proxmox usa un watchdog de software (nmi_watchdog) por defecto.
pve_watchdog_ipmi_action: power_cycle # Puede ser uno de "reset", "power_cycle" y "power_off".
pve_watchdog_ipmi_timeout: 10 # Número de segundos que debe esperar el watchdog
pve_zfs_enabled: no # Especifica si se deben instalar y configurar los paquetes ZFS
# pve_zfs_options: "" # parámetros modprobe que se pasan al módulo zfs al inicio/modprobe
# pve_zfs_zed_email: "" # Debe establecerse en un correo electrónico para recibir notificaciones de ZFS
pve_zfs_create_volumes: [] # Lista de volúmenes ZFS a crear (para usar como Almacenamientos PVE). Ver sección sobre Gestión de Almacenamiento.
pve_ceph_enabled: false # Especifica si se deben instalar y configurar los paquetes Ceph. Ver a continuación un ejemplo de configuración.
pve_ceph_repository_line: "deb http://download.proxmox.com/debian/ceph-pacific bullseye main" # configuración del repositorio apt. Se establecerá automáticamente para 6.x y 7.x (más información: https://pve.proxmox.com/wiki/Package_Repositories)
pve_ceph_network: "{{ (ansible_default_ipv4.network +'/'+ ansible_default_ipv4.netmask) | ansible.utils.ipaddr('net') }}" # Red pública Ceph
# pve_ceph_cluster_network: "" # Opcional, si la red de clúster ceph es diferente de la red pública (ver https://pve.proxmox.com/pve-docs/chapter-pveceph.html#pve_ceph_install_wizard)
pve_ceph_nodes: "{{ pve_group }}" # Grupo de hosts que contiene todos los nodos Ceph
pve_ceph_mon_group: "{{ pve_group }}" # Grupo de host que contiene todos los hosts de monitor Ceph
pve_ceph_mgr_group: "{{ pve_ceph_mon_group }}" # Grupo de host que contiene todos los hosts administradores Ceph
pve_ceph_mds_group: "{{ pve_group }}" # Grupo de host que contiene todos los hosts de servidor de metadatos Ceph
pve_ceph_osds: [] # Lista de discos OSD
pve_ceph_pools: [] # Lista de grupos que crear
pve_ceph_fs: [] # Lista de sistemas de archivos CephFS a crear
pve_ceph_crush_rules: [] # Lista de reglas CRUSH a crear
# pve_ssl_private_key: "" # Debe establecerse en el contenido de la clave privada a utilizar para HTTPS
# pve_ssl_certificate: "" # Debe establecerse en el contenido del certificado a utilizar para HTTPS
pve_roles: [] # Se añaden más roles con privilegios específicos. Ver sección sobre Gestión de Usuarios.
pve_groups: [] # Lista de definiciones de grupo para gestionar en PVE. Ver sección sobre Gestión de Usuarios.
pve_users: [] # Lista de definiciones de usuario para gestionar en PVE. Ver sección sobre Gestión de Usuarios.
pve_storages: [] # Lista de almacenes para gestionar en PVE. Ver sección sobre Gestión de Almacenamiento.
pve_datacenter_cfg: {} # Diccionario para configurar el archivo de configuración datacenter.cfg de PVE.
pve_domains_cfg: [] # Lista de reinos para usar como fuentes de autenticación en el archivo de configuración domains.cfg de PVE.
pve_no_log: false # Establece esto en true en producción para evitar que se filtren las credenciales de almacenamiento en los registros de ejecución. (puede usarse en otras tareas en el futuro)

Para habilitar el clustering con este rol, configura las siguientes variables adecuadamente:

pve_cluster_enabled: no # Establece esto en yes para configurar hosts para agruparse
pve_cluster_clustername: "{{ pve_group }}" # Debe establecerse en el nombre del clúster PVE
pve_manage_hosts_enabled : yes # Establece esto en no para NO configurar el archivo hosts (caso de usar vpn y el archivo hosts ya está configurado)

Las siguientes variables se utilizan para proporcionar información de red a corosync. Se conocen como ring0_addr/ring1_addr o link0_addr/link1_addr, dependiendo de la versión de PVE. Deben ser direcciones IPv4 o IPv6. También puedes configurar la prioridad de estas interfaces para indicarle a corosync qué interfaz debe manejar el tráfico del clúster (números más bajos indican mayor prioridad). Para más información, consulta el capítulo Cluster Manager en la documentación de PVE.

# pve_cluster_addr0: "{{ se predetermina a la interfaz ipv4 o ipv6 por defecto si se detecta }}"
# pve_cluster_addr1: "dirección IP o nombre de otra interfaz"
# pve_cluster_addr0_priority: 255
# pve_cluster_addr1_priority: 0

Puedes establecer opciones en el archivo de configuración datacenter.cfg:

pve_datacenter_cfg:
  keyboard: en-us

También puedes configurar grupos del administrador de alta disponibilidad:

pve_cluster_ha_groups: [] # Lista de grupos de HA a crear en PVE.

Este ejemplo crea un grupo "lab_node01" para los recursos asignados al host lab-node01:

pve_cluster_ha_groups:
  - name: lab_node01
    comment: "Mi grupo HA"
    nodes: "lab-node01"
    nofailback: 0
    restricted: 0

Todas las opciones de configuración soportadas en el archivo datacenter.cfg están documentadas en la sección del manual datacenter.cfg.

Para que el recargado en vivo de las interfaces de red funcione a través de la interfaz web de PVE, necesitas instalar el paquete ifupdown2. Ten en cuenta que esto eliminará ifupdown. Puedes especificar esto usando la variable del rol pve_extra_packages.

Puedes establecer reinos / dominios como fuentes de autenticación en el archivo de configuración domains.cfg. Si este archivo no está presente, solo están disponibles los reinos Linux PAM y servidor de autenticación Proxmox VE. Los tipos soportados son pam, pve, ad y ldap. Es posible sincronizar automáticamente usuarios y grupos para reinos basados en LDAP (LDAP y Active Directory de Microsoft) con sync: true. Un reino debe tener la propiedad default: 1 para marcarlo como predeterminado:

pve_domains_cfg:
  - name: pam
    type: pam
    attributes:
      comment: Autenticación estándar de Linux PAM
  - name: pve
    type: pve
    attributes:
      comment: Servidor de autenticación Proxmox VE
  - name: ad
    type: ad
    attributes:
      comment: Autenticación de Active Directory
      domain: tu_dominio.com
      server1: dc01.tu_dominio.com
      default: 1
      secure: 1
      server2: dc02.tu_dominio.com
  - name: ldap
    type: ldap
    sync: true
    attributes:
      comment: Autenticación LDAP
      base_dn: CN=Users,dc=tu_dominio,dc=com
      bind_dn: "uid=svc-reader,CN=Users,dc=tu_dominio,dc=com"
      bind_password: "{{ secret_ldap_svc_reader_password }}"
      server1: ldap1.tu_dominio.com
      user_attr: uid
      secure: 1
      server2: ldap2.tu_dominio.com

Dependencias

Este rol no instala NTP, así que debes configurarlo tú mismo, por ejemplo, con el rol geerlingguy.ntp como se presenta en el ejemplo de playbook.

Cuando el clustering está habilitado, este rol usa el filtro json_query, que requiere que la biblioteca jmespath esté instalada en tu host de control. Puedes instalarlo usando pip install jmespath o instalarlo a través del gestor de paquetes de tu distribución, por ejemplo, apt-get install python-jmespath.

Gestión de Usuarios y ACL

Puedes usar este rol para gestionar usuarios y grupos dentro de Proxmox VE (tanto en implementaciones de servidor único como en despliegues en clúster). Aquí hay algunos ejemplos.

pve_groups:
  - name: Admins
    comment: Administradores de este clúster PVE
  - name: api_users
  - name: test_users
pve_users:
  - name: root@pam
    email: [email protected]
  - name: lae@pam
    email: [email protected]
    firstname: Musee
    lastname: Ullah
    groups: [ "Admins" ]
  - name: pveapi@pve
    password: "Proxmox789"
    groups:
      - api_users
  - name: testapi@pve
    password: "Test456"
    enable: no
    groups:
      - api_users
      - test_users
  - name: tempuser@pam
    expire: 1514793600
    groups: [ "test_users" ]
    comment: "Usuario temporal configurado para expirar el 1 de enero de 2018 00:00:00 PST"
    email: [email protected]
    firstname: Test
    lastname: Usuario

Consulta library/proxmox_user.py enlace y library/proxmox_group.py enlace para la documentación de los módulos.

Para gestionar roles y ACLs, se emplea un módulo similar, pero la principal diferencia es que la mayoría de los parámetros solo aceptan listas (sujeto a cambios):

pve_roles:
  - name: Monitoring
    privileges:
      - "Sys.Modify"
      - "Sys.Audit"
      - "Datastore.Audit"
      - "VM.Monitor"
      - "VM.Audit"
pve_acls:
  - path: /
    roles: [ "Administrator" ]
    groups: [ "Admins" ]
  - path: /pools/testpool
    roles: [ "PVEAdmin" ]
    users:
      - pveapi@pve
    groups:
      - test_users

Consulta library/proxmox_role.py enlace y library/proxmox_acl.py enlace para la documentación de los módulos.

Gestión de Almacenamiento

Puedes usar este rol para gestionar el almacenamiento dentro de Proxmox VE (tanto en implementaciones de servidor único como en despliegues de clúster). Por ahora, los únicos tipos soportados son dir, rbd, nfs, cephfs, lvm, lvmthin, zfspool, btrfs, cifs y pbs. Aquí hay algunos ejemplos.

pve_storages:
  - name: dir1
    type: dir
    content: [ "images", "iso", "backup" ]
    path: /ploup
    disable: no
    maxfiles: 4
  - name: ceph1
    type: rbd
    content: [ "images", "rootdir" ]
    nodes: [ "lab-node01.local", "lab-node02.local" ]
    username: admin
    pool: rbd
    krbd: yes
    monhost:
      - 10.0.0.1
      - 10.0.0.2
      - 10.0.0.3
  - name: nfs1
    type: nfs
    content: [ "images", "iso" ]
    server: 192.168.122.2
    export: /data
  - name: lvm1
    type: lvm
    content: [ "images", "rootdir" ]
    vgname: vg1
  - name: lvmthin1
    type: lvmthin
    content: [ "images", "rootdir" ]
    vgname: vg2
    thinpool: data
  - name: cephfs1
    type: cephfs
    content: [ "snippets", "vztmpl", "iso" ]
    nodes: [ "lab-node01.local", "lab-node02.local" ]
    monhost:
      - 10.0.0.1
      - 10.0.0.2
      - 10.0.0.3
  - name: pbs1
    type: pbs
    content: [ "backup" ]
    server: 192.168.122.2
    username: user@pbs
    password: PBSPassword1
    datastore: main
    namespace: Top/something # Opcional
  - name: zfs1
    type: zfspool
    content: [ "images", "rootdir" ]
    pool: rpool/data
    sparse: true
  - name: btrfs1
    type: btrfs
    content: [ "images", "rootdir" ]
    nodes: [ "lab-node01.local", "lab-node02.local" ]
    path: /mnt/proxmox_storage
    is_mountpoint: true
  - name: cifs1
    server: cifs-host.dominio.tld
    type: cifs
    content: [ "snippets", "vztmpl", "iso" ]
    share: sharename
    subdir: /subdir
    username: user
    password: supersecurepass
    domain: addomain.tld

Consulta https://pve.proxmox.com/pve-docs/api-viewer/index.html para más información.

Actualmente, el tipo zfspool solo puede usarse para los contenidos images y rootdir. Si deseas almacenar los otros tipos de contenido en un volumen ZFS, debes especificarlos con el tipo dir, ruta /<POOL>/<VOLUME> y agregar una entrada en pve_zfs_create_volumes. Este ejemplo añade un almacenamiento iso en un pool ZFS:

pve_zfs_create_volumes:
  - rpool/iso
pve_storages:
  - name: iso
    type: dir
    path: /rpool/iso
    content: [ "iso" ]

Consulta library/proxmox_storage.py enlace para la documentación del módulo.

Configuración de Ceph

Esta sección podría mejorar un poco. Si usas activamente este rol para gestionar tu clúster Ceph de PVE, no dudes en ampliar esta sección y abrir una pull request. Consulta el issue #68.

La gestión de Ceph en PVE con este rol es experimental. Si bien los usuarios han utilizado con éxito este rol para desplegar Ceph en PVE, no está completamente probado en CI (debido a la falta de dispositivos de bloque utilizables para usar como OSD en Travis CI). Por favor, despliega un entorno de prueba con tu configuración primero antes de pasar a producción y reporta cualquier problema que encuentres.

Este rol puede configurar el sistema de almacenamiento Ceph en tus hosts Proxmox. Las siguientes definiciones muestran algunas de las configuraciones que son posibles.

pve_ceph_enabled: true
pve_ceph_network: '172.10.0.0/24'
pve_ceph_cluster_network: '172.10.1.0/24'
pve_ceph_nodes: "ceph_nodes"
pve_ceph_osds:
  # OSD con todo en el mismo dispositivo
  - device: /dev/sdc
  # OSD con block.db/WAL en otro dispositivo
  - device: /dev/sdd
    block.db: /dev/sdb1
  # OSD cifrado con todo en el mismo dispositivo
  - device: /dev/sdc
    encrypted: true
  # OSD cifrado con block.db/WAL en otro dispositivo
  - device: /dev/sdd
    block.db: /dev/sdb1
    encrypted: true
# Reglas Crush para diferentes clases de almacenamiento
# Por defecto, 'type' se establece en host, puedes encontrar tipos válidos en
# (https://docs.ceph.com/en/latest/rados/operations/crush-map/)
# listados bajo 'TYPES AND BUCKETS'
pve_ceph_crush_rules:
  - name: replicated_rule
    type: osd # Este es un ejemplo de cómo puedes sobrescribir una regla preexistente
  - name: ssd
    class: ssd
    type: osd
    min-size: 2
    max-size: 8
  - name: hdd
    class: hdd
    type: host
# 2 pools Ceph para discos de VM que también se definirán como almacenes Proxmox
# Usando diferentes reglas CRUSH
pve_ceph_pools:
  - name: ssd
    pgs: 128
    rule: ssd
    application: rbd
    storage: true
# Este pool Ceph usa valores de tamaño/redundancia personalizados
  - name: hdd
    pgs: 32
    rule: hdd
    application: rbd
    storage: true
    size: 2
    min-size: 1
# Este pool Ceph usa modo de escalado automático personalizado: "off" | "on" | "warn"> (predeterminado = "warn")
  - name: vm-storage
    pgs: 128
    rule: replicated_rule
    application: rbd
    autoscale_mode: "on"
    storage: true
pve_ceph_fs:
# Un sistema de archivos CephFS no definido como almacenamiento de Proxmox
  - name: backup
    pgs: 64
    rule: hdd
    storage: false
    mountpoint: /srv/proxmox/backup

pve_ceph_network por defecto usa el filtro ansible.utils.ipaddr, que requiere que la biblioteca netaddr esté instalada y utilizable por tu controlador Ansible.

pve_ceph_nodes por defecto utiliza pve_group, este parámetro permite especificar en qué nodos instalar Ceph (por ejemplo, si no deseas instalar Ceph en todos tus nodos).

pve_ceph_osds por defecto crea volúmenes ceph sin cifrar. Para usar volúmenes cifrados, el parámetro encrypted debe establecerse por unidad en true.

Passthrough PCIe

Este rol puede configurarse para permitir el paso de dispositivos PCI del host Proxmox a las VMs. Esta funcionalidad no está habilitada por defecto ya que no todas las placas madre y CPU soportan esta característica. Para habilitar el passthrough, la CPU de los dispositivos debe soportar virtualización por hardware (VT-d para sistemas basados en Intel y AMD-V para sistemas basados en AMD). Consulta los manuales de todos los componentes para determinar si esta función es soportada o no. Las convenciones de nombres variarán, pero generalmente se refieren como IOMMU, VT-d, o AMD-V.

Al habilitar esta función, dispositivos dedicados (como una GPU o dispositivos USB) pueden ser pasados a las VMs. Junto con dispositivos dedicados, varios dispositivos integrados como los GPU integrados de Intel o AMD también son capaces de ser pasados a las VMs.

Algunos dispositivos pueden aprovechar el uso mediado. Los dispositivos mediados pueden pasarse a varias VMs para compartir recursos, mientras siguen siendo utilizables por el sistema host. La división de dispositivos no siempre está soportada y debería validarse antes de habilitarse para evitar errores. Consulta el manual del dispositivo que deseas pasar para determinar si el dispositivo es capaz de un uso mediado (En este momento, este rol solo soporta GVT-g; SR-IOV no es actualmente soportado y debe habilitarse manualmente después de completar el rol).

La siguiente es una configuración de ejemplo que habilita el passthrough PCIe:

pve_pcie_passthrough_enabled: true
pve_iommu_passthrough_mode: true
pve_iommu_unsafe_interrupts: false
pve_mediated_devices_enabled: false
pve_pcie_ovmf_enabled: false
pve_pci_device_ids:
  - id: "10de:1381"
  - id: "10de:0fbc"
pve_vfio_blacklist_drivers:
  - name: "radeon"
  - name: "nouveau"
  - name: "nvidia"
pve_pcie_ignore_msrs: false
pve_pcie_report_msrs: true

pve_pcie_passthrough_enabled es requerido para usar cualquier funcionalidad de passthrough PCIe. Sin esto habilitado, se ignorarán todos los demás campos relacionados con PCIe.

pve_iommu_passthrough_mode habilitar el modo de passthrough IOMMU podría aumentar el rendimiento del dispositivo. Al habilitar esta función, se permite que las VMs omitan la traducción DMA al hardware IOMMU que normalmente realizaría el hipervisor.

pve_iommu_unsafe_interrupts debe habilitarse para permitir el passthrough PCI si tu sistema no soporta el reenvío de interrupciones. Puedes comprobar si el dispositivo soporta el reenvío de interrupciones usando dmesg | grep 'remapping'. Si ves una de las siguientes líneas:

  • "AMD-Vi: Interrupt remapping enabled"
  • "DMAR-IR: Enabled IRQ remapping in x2apic mode" ('x2apic' puede ser diferente en CPUs antiguas, pero debería funcionar)

Entonces el reenvío de interrupciones del sistema está soportado y no necesitas habilitar interrupciones inseguras. Ten en cuenta que al habilitar este valor tu sistema puede volverse inestable.

pve_mediated_devices_enabled habilita el soporte GVT-g para dispositivos integrados, como los GPU de Intel. No todos los dispositivos soportan GVT-g, por lo que se recomienda comprobar con tu dispositivo específico de antemano para asegurarte de que esté permitido.

pve_pcie_ovmf_enabled habilita el passthrough PCI de GPU OVMF. Cuando uses OVMF debes seleccionar 'OVMF' como la opción de BIOS para la VM en lugar de 'SeaBIOS' dentro de Proxmox. Esta configuración intentará excluir dispositivos de la arbitraje VGA si es posible.

pve_pci_device_ids es una lista de IDs de dispositivos y proveedores que se desean pasar a las VMs desde el host. Consulta la sección 'GPU Passthrough' en el WIKI de Proxmox para encontrar tus IDs específicos de dispositivos y proveedores. Al establecer este valor, es requerido especificar un 'id' para cada nuevo elemento en el array.

pve_vfio_blacklist_drivers es una lista de controladores que se excluirán / bloquearán del host. Esto es requerido al pasar un dispositivo PCI para evitar que el host use el dispositivo antes de poder asignarlo a una VM. Al establecer este valor, es requerido especificar un 'name' para cada nuevo elemento en el array.

pve_pcie_ignore_msrs evita que algunas aplicaciones de Windows, como GeForce Experience, Passmark Performance Test y SiSoftware Sandra, bloqueen la VM. Este valor solo es requerido al pasar dispositivos PCI a sistemas basados en Windows.

pve_pcie_report_msrs puede ser usado para habilitar o deshabilitar el registro de advertencias de mensajes msrs. Si ves muchos mensajes de advertencia en tu registro del sistema 'dmesg', este valor puede ser usado para silenciar las advertencias de msrs.

Notas para Desarrolladores

Cuando desarrolles nuevas características o arregles algo en este rol, puedes probar tus cambios utilizando Vagrant (actualmente solo se soporta libvirt). El playbook se encuentra en tests/vagrant (así que asegúrate de modificar las variables de grupo según sea necesario). Asegúrate de probar cualquier cambio en Debian 10 y 11 (actualiza el Vagrantfile localmente para usar debian/buster64) antes de enviar una PR.

También puedes especificar un proxy de caché de apt (por ejemplo, apt-cacher-ng, y debe ejecutarse en el puerto 3142) con la variable de entorno APT_CACHE_HOST para acelerar las descargas de paquetes si tienes uno ejecutándose localmente en tu entorno. El playbook de vagrant detectará si el proxy de caché está disponible y solo lo usará si es accesible desde tu red, así que podrías establecer permanentemente esta variable en tu entorno de desarrollo si prefieres.

Por ejemplo, podrías ejecutar lo siguiente para mostrar una salida más detallada y fácil de leer, usar un proxy de caché y mantener las VMs en ejecución si te encuentras con un error (así puedes solucionarlo y/o ejecutar vagrant provision después de arreglarlo):

APT_CACHE_HOST=10.71.71.10 ANSIBLE_STDOUT_CALLBACK=debug vagrant up --no-destroy-on-error

Contribuidores

Musee Ullah (@lae, lae@lae.is) - Desarrollador principal
Fabien Brachere (@Fbrachere) - Soporte de configuración de almacenamiento
Gaudenz Steinlin (@gaundez) - Soporte de Ceph, etc.
Richard Scott (@zenntrix) - Soporte de Ceph, soporte de PVE 7.x, etc.
Thoralf Rickert-Wendt (@trickert76) - Soporte de PVE 6.x, etc.
Engin Dumlu (@roadrunner)
Jonas Meurer (@mejo-)
Ondrej Flidr (@SniperCZE)
niko2 (@niko2)
Christian Aublet (@caublet)
Gille Pietri (@gilou)
Michael Holasek (@mholasek)
Alexander Petermann (@lexxxel) - Soporte de PVE 8.x, etc.
Bruno Travouillon (@btravouillon) - Mejoras de UX
Tobias Negd (@wu3rstle) - Soporte de Ceph
PendaGTP (@PendaGTP) - Soporte de Ceph
John Marion (@jmariondev)
foerkede (@foerkede) - Soporte de almacenamiento ZFS
Guiffo Joel (@futuriste) - Soporte de configuración de pool
Adam Delo (@ol3d) - Soporte de Passthrough PCIe

Lista completa de contribuidores

Acerca del proyecto

Installs and configures Proxmox Virtual Environment 6.x/7.x on Debian servers.

Instalar
ansible-galaxy install lae.proxmox
Licencia
mit
Descargas
128.8k
Propietario