Proxmox: Gestión de plantillas
Hoy vamos a hablar de Proxmox y plantillas, y como podemos automatizarlas…también os explico los comandos que nos entregan las configuraciones de las máquinas virtuales y los contenedores LXC, para poder entender mejor Proxmox.
Para poder extraer la configuración de una máquina virtual (VM) o un contenedor en Proxmox y convertirla en una plantilla que luego puedas automatizar con Ansible, es fundamental entender dónde Proxmox almacena dicha información y cómo acceder a ella. Además, necesitas exportar los datos de configuración necesarios, que incluyen detalles del hardware, la configuración de red y los discos, así como cualquier software preinstalado, y transformarlos en un formato reutilizable.
Aquí os explico el proceso en detalle, qué directorios y comandos utilizar para extraer la configuración, y cómo transformarla en un playbook de Ansible.
Comandos y archivos de configuración de Proxmox
Proxmox almacena la configuración de cada máquina virtual y contenedor en un archivo específico que puedes utilizar para replicar o crear plantillas.
- Máquinas Virtuales (VMs)
Ruta de configuración de las VMs: /etc/pve/qemu-server/
Los archivos de configuración de las VMs se almacenan en la ruta /etc/pve/qemu-server/VMID.conf, donde VMID es el ID de la máquina virtual. Cada archivo VMID.conf contiene los detalles de la VM, como CPU, memoria, discos, redes, etc.
Comando para extraer la configuración de una VM: Puedes utilizar el comando qm para gestionar y extraer información de las VMs.
1 |
qm config <VMID> # Extrae la configuración de una VM específica |
Ejemplo:
1 |
qm config 104 |
Este comando te devolverá una salida con todos los parámetros configurados para la VM con ID 104, como CPU, memoria, discos, etc.
- Contenedores LXC:
Ruta de configuración de los contenedores LXC: /etc/pve/lxc/
Los archivos de configuración de los contenedores LXC se almacenan en la ruta /etc/pve/lxc/CTID.conf, donde CTID es el ID del contenedor.
Comando para extraer la configuración de un contenedor: Para contenedores, puedes usar el comando pct:
1 |
pct config <CTID> # Extrae la configuración de un contenedor LXC específico |
Ejemplo:
1 |
pct config 103 |
Esto te dará detalles del contenedor LXC, incluyendo recursos como CPU, memoria, interfaces de red, discos montados, etc.
- Opciones Clave a Extraer:
CPU y Memoria:
1 2 |
cores: 2 memory: 2048 |
Discos:
1 |
rootfs: NVME512GB:subvol-103-disk-0,size=16G |
Redes:
1 |
net0: name=eth0,bridge=vmbr0,hwaddr=BC:24:11:3F:44:55,ip=dhcp,ip6=dhcp,type=veth |
Crear una plantilla en Proxmox a partir de la configuración previa
Paso 1: Convertir la VM o Contenedor en una Plantilla (opcional)
En Proxmox, puedes convertir una VM o contenedor en una plantilla directamente para que sea reutilizable. Esto no es obligatorio, pero puede ser útil.
- Para convertir una VM en plantilla:
1 |
qm template <VMID> |
- Para convertir un contenedor LXC en plantilla:
1 |
pct template <CTID> |
También podéis hacerlo vía gráfica:
Convertir plantilla Proxmox en máquina virtual o contenedor LXC
Si por ejemplo, te has equivocado de contenedor o máquina virtual. Puedes usar “pct list” para ver los contenedores o busca el fichero (qm para máquinas virtuales):
1 |
nano /etc/pve/lxc/CTID.conf |
Y cambia valor:
1 2 3 4 5 |
template: 1 ó template: 0 |
Paso 2: Exportar Configuración a un Playbook de Ansible
Una vez que tienes la configuración de la VM o del contenedor, puedes crear un Playbook de Ansible que lance la automatización basada en esos parámetros. Aquí te muestro cómo hacerlo con ejemplos:
Ejemplo básico de Playbook de Ansible para crear una VM con la configuración extraída:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
--- - name: Create a Proxmox VM from template hosts: localhost connection: local tasks: - name: Create VM from template proxmox_kvm: api_user: root@pam api_password: "{{ vault_proxmox_password }}" api_host: proxmox.example.com node: pve vmid: 101 clone: true template: 100 name: new_vm_from_template cores: 2 memory: 4096 disk_size: 32G net0: virtio,bridge=vmbr0 ipconfig0: ip=192.168.1.50/24,gw=192.168.1.1 autostart: true delegate_to: localhost |
Cómo usar el Software preinstalado
Si tus máquinas virtuales o contenedores tienen software preinstalado, puedes capturar esta información de dos maneras:
Opción 1: Crear una Imagen Base (Snapshot o Plantilla)
Si el software ya está instalado, puedes:
- Convertir la VM o el contenedor en una plantilla (usando qm template o pct template).
- O bien, crear una imagen de disco de la VM y usarla como base.
Opción 2: Instalar el software con Ansible
Otra opción más flexible es instalar el software automáticamente con Ansible después de desplegar la VM o el contenedor. Aquí un ejemplo para instalar software en la VM creada:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
--- - name: Install software on the new VM hosts: new_vm_from_template tasks: - name: Install Apache apt: name: apache2 state: present - name: Start and enable Apache systemd: name: apache2 state: started enabled: true |
Este ejemplo muestra cómo instalar Apache automáticamente en una VM creada con Ansible.
Automatización completa de creación máquinas con plantilla Proxmox
Una vez que tengas la configuración en tu playbook, puedes añadir más pasos para configurar cada máquina virtual según el hardware o el software necesario. Aquí un ejemplo completo de un proceso automatizado:
- Extraes la configuración usando qm config o pct config.
- Generas un playbook de Ansible con los parámetros extraídos.
- Automatizas la instalación del software adicional utilizando roles de Ansible para instalar y configurar lo que necesitas (bases de datos, servidores web, etc.).
- Automatizas el despliegue de nuevas VMs a partir de la configuración original con ajustes en hardware y recursos según sea necesario.
Tabla con comandos resumidos
¿Dónde Colocar la Configuración y Software?
- Configuración de Proxmox (VMs y LXC): /etc/pve/qemu-server/ para VMs y /etc/pve/lxc/ para contenedores.
- Playbooks de Ansible: Coloca el playbook generado en un directorio específico para tus despliegues, generalmente /etc/ansible/playbooks/ o cualquier carpeta de tu elección.
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?