preloader
  • Cloud-init no Proxmox Virtual Environment 6
blog-thumb

Cloud init es un paquete que se utiliza para inicializar una instancia en la nube. Ampliamente utilizado para personalizar máquinas virtuales Linux, donde ejecuta configuraciones personalizadas que desea para una VM en su primer inicio. Se puede utilizar para configurar usuarios, instalar paquetes, generar y configurar claves SSH.

¿Quieres crear máquinas virtuales, configurando el nombre del servidor, IP, vlan, usuario, etc… sin siquiera tener que encenderlas? ¡cloud-init es para ti!

Cloud-init es un recurso muy utilizado cuando hablamos de servidores virtuales proporcionados por los grandes “players” de clouds.

Es interesante para clouds y VMs porque su kernel personalizado no admite nada que una máquina virtual no necesite para funcionar. Es decir, no soportará tarjeta de sonido soundblaster =).

Fue creado por Canonical, que es la misma empresa que creó Ubuntu y que tiene una participación abrumadora de sistemas operativos en el mercado de la nube.

Google y AWS (entre otros) son ejemplos de empresas que utilizan cloud-init para que las máquinas virtuales estén disponibles para sus clientes.

Cuando usamos kubernetes o máquinas virtuales en Google, por ejemplo, es posible visualizar el cloud-init config utilizado por ellos, que entre nosotros, ¡es una tremenda de cloud-init config!

cloud-init-google

¿Algunos ejemplos de por qué usar cloud-init en Proxmox?

  • VRapidez en la creación de nuevas VM
  • Control de IPs de VM como si fueran un contenedor LXC
  • Posibilidades de automatización
  • Compatibilidad con Ansible y otras herramientas de automatización

Como este artículo se está creando como una documentación simple del proceso, vayamos directamente al grano para que podamos validar mejor lo que hace este cloud-init.

¡Desplegando cloud-init en proxmox! ¡Manos a la obra!

Lo primero, lee la documentación oficial de Proxmox + cloud-init:

https://pve.proxmox.com/wiki/Cloud-Init_Support

En segundo lugar, lea al menos la introducción a la https://cloudinit.readthedocs.io/en/latest/

¡¡Atención!! ¡¡Atención!!

La documentación oficial de proxmox comienza con un tema: Preparación de plantillas Cloud-Init y esto confunde a la multitud.

Las imágenes de cloud-init están listas y podemos usarlas sin tener que preparar nada. Esto es solo para personas que necesitan crear sus cloud-init templates from scratch.

Download de imagen

Elegí la imagen de ubuntu en honor a Canonical, que puso a disposición el proyecto, por lo que el crédito es para ellos: https://cloud-images.ubuntu.com/groovy/current/

proxmox-cloud-init2

Tenga en cuenta que tanto el formato “img” como la arquitectura “amd64” son compatibles con Proxmox. Ahora elija cualquier node de su clúster proxmox para hospedar el template y acceda a el a través de ssh:

# wget https://cloud-images.ubuntu.com/groovy/current/groovy-server-cloudimg-amd64.img
# qm create 9002 --memory 2048 --net0 virtio,bridge=vmbr1

Ahora vea en /etc/pve/storage.cfg en qué storage desea almacenar esta imagen. En este caso usaré el storage local:

# qm importdisk 9002 groovy-server-cloudimg-amd64.img local
Successfully imported disk as ‘unused0:local:9002/vm-9002-disk-0.raw’

# qm set 9002 --scsihw virtio-scsi-pci --scsi0 local:9002/vm-9002-disk-0.raw
update VM 9002: -scsi0 local:9002/vm-9002-disk-0.raw -scsihw virtio-scsi-pci

Ya casi hemos terminado. Ahora tenemos que agregar e discos que es donde almacenaremos las configs personalizadas (en términos generales).

# qm set 9002 --ide2 local:cloudinit
update VM 9002: -ide2 local:cloudinit
Formatting ‘/var/lib/vz/images/9002/vm-9002-cloudinit.qcow2’, fmt=qcow2 cluster_size=65536 preallocation=metadata compression_type=zlib size=4194304 lazy_refcounts=off refcount_bits=16

Arreglando el orden de boot:

# qm set 9002 --boot c --bootdisk scsi0

Algunas imágenes amd64 cloud-init se crean teniendo en cuenta la compatibilidad con openstack. Entonces tenemos que agregar serial0 para que comience. En caso de que tenga curiosidad, elimine serial0 e intente reiniciar, si no arranca, agréguelo nuevamente y todo funcionará:

# qm set 9002 --serial0 socket --vga serial0 update VM 9002: -serial0 socket -vga serial0

Copie su clave ssh pública en el servidor proxmox, para que podamos agregar esta clave al template del cloud-init:

[user_machine ~$] scp ~/.ssh/id_rsa.pub root@PROXMOX_NODE:/tmp

Volviendo al servidor proxmox:

# qm set 9002 --sshkey /tmp/id_rsa.pub
update VM 9002: -sshkeys ssh-rsa%20AAAAB3NzaC1yc2EAAAADAQABAAABgQC4LX1HAmPWW4qzmqUBsIvgbdlfDS5MKEVK5cpXRxmUErezgVfvodbGlqqnO0T61Dry3KRg1owq62wpH1z8d%2Bh6vZCsJKoyoklC55xlbJgGDSxEB0%2FbUMiwqWkFdjRwQ1V2HOYNJKttoBUFIQvG8V3XSDtw%2Fw3W0aNOAfnheZX10zMJ%2BCuisMkvGGCBRDwnxxi%2BJoeTGrx85yLYfdD6Ca6yba6KeTMcu5PoI1BH5%2Bvt2Ta90BGjyHpLUOZpoqV0AurTEJIO3n5J0z2OH9WhC77Kwz6mG3MSNueA1BcgRUVvaXvJB65ce2azSVcKbXNkTbeBFlc7FhocEAhXrycRR0L6xgo3acvoCBOx4EijtF0itjzqfvNhH9tN9oLj8Qxiz6ttGivzucfWBsc30pUDopWGaJ0syNFE0Wyvs03cDMHb%2F5Vmb8ixE%2BK2nDJe3OXyn%2Bp4GzkWNyVZjYxutg%2FLAFP6bwe6Oe1jSob4I0bA4xT7guHLp93zEqWHRjDFGhXewhk%3D%20USER%40MACHINE%0

Establezca el usuario que tendrá permiso sudo:

# qm set 9002 --ciuser gole
update VM 9002: -ciuser gole

Configure el tipo de máquina. Valioso consejo de Tomas 2w-consultoria.

# qm set 9002 --machine q35
update VM 9002: -machine q35

Finalmente, conviértelo en un template:

# qm template 9002

Haciendo un clon y usando la nueva VM

Finalmente, clone el template en una nueva máquina:

# qm clone 9002 139 --name VMNAME --full

Configure la ip que usará:

# qm set 139 --ipconfig0 ip=172..xxx.xxx.5/24,gw=172.xxx.xxx.1

Cambie el tamaño del disco a un tamaño que ocupará en esta máquina virtual:

# qm resize 139 scsi0 +45G
Image resized.

Encienda la VM:

# qm start 139

Espere a que se inicie y ejecute ssh desde la máquina que tenía la clave pública:

$ ssh -l gole 172.xxx.xxx.5

proxmox-cloud-init3

¡Bingo! ¡Dentro del servidor sin hacer ninguna instalación!

Puede configurar vlans, DNS y todo lo que su nueva VM necesita para funcionar. También puede personalizar cloud-init con cicustom. Echa un vistazo a la documentación oficial.

Cuando cloud-init sube por primera vez, instalará algunos paquetes, por lo que el primer arranque tarda un poco más en liberar apt.

¡Éxito!