Template de Máquina Virtual no Proxmox com Cloud-init
O Proxmox VE, desde a versão 5.2, suporta o Cloud-Init, desenvolvido pela Canonical, é uma ferramenta amplamente utilizada para personalizar uma máquina virtual Linux quando ela é inicializada pela primeira vez. Você pode utilizar a inicialização para instalar pacotes e gravar arquivos, ou para configurar usuários e segurança, além disso, permite o provisionamento de máquinas que foram implantadas com base em um modelo (template).
Com o pacote Cloud-Init, pode-se criar templates em que se pode configurar facilmente nomes de host, adicionar chaves SSH, configurar pontos de montagem ou executar scripts pós-instalação por meio da interface gráfica do usuário.
Cloud-Init é um recurso altamente utilizado quando falamos de servidores virtuais fornecido pelo grandes “players” de nuvem pública (AWS, Azure, GCP, etc.).
Neste artigo veremos como criar um template de VM Ubuntu 22.04, ao qual poderá ser criado utilizando uma ferramenta de Infraestrutura como Código (IaC), como o Terraform, por exemplo.
1. download da imagem do Ubuntu 22.04
O Ubuntu, assim como outras distros, fornecem imagens cloud-init base que são atualizadas regularmente. Acesse o site https://cloud-images.ubuntu.com e localize o Ubuntu 22.04 Jammy e copie o link da versão corrente (current) para a sua arquitetura usada, no caso amd64.
Acesse o terminal de seu nó Proxmox como root, e faça o download dessa imagem para a pasta temporária:
cd /tmp
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
1. INstalação dos pacotes necessários
O qemu-guest-agent, que permite desligar e reiniciar uma máquina virtual (VM), a partir da interface gráfica do Proxmox, além de permitir comunicação com o Terraform, não está incluído na imagem cloud-init. Por isso, vamos precisar de uma ferramenta que permita a instalação de pacotes diretamente em uma imagem.
A ferramenta é chamada virt-customize e vem no pacote libguestfs-tools (“libguestfs é um conjunto de ferramentas para acessar e modificar imagens de disco de máquina virtual” – https://www.libguestfs.org).
Acesse o terminal de seu nó proxmox e digite o seguinte comando:
apt install libguestfs-tools
Em seguida, instale o qemu-guest-agent na imagem recém-baixada:
virt-customize -a jammy-server-cloudimg-amd64.img --install qemu-guest-agent
A saída deve ser semelhante a essa:
[ 0.0] Examining the guest …
[ 22.1] Setting a random seed
[ 22.3] Setting the machine ID in /etc/machine-id
[ 22.3] Installing packages: qemu-guest-agent
[ 91.7] Finishing off
Nota: Da mesma forma, poderíamos instalar outros pacotes na imagem.
3. Criar Uma Máquina Virtual Proxmox a partir da imagem Recém modificada
Em nosso caso, vamos criar uma máquina virtual (VM) com os seguintes recursos:
ID=9001, 2 Cores em 1 socket, 2048MB de RAM, disco do sistema operacional, localizado no storage local-lvm (previamente criado) e rede virtio ligada em vmbr1 (nossa rede local).
Crie a VM com o seguinte comando no terminal de seu hypervisor Proxmox:
qm create 9001 --name Template-Ubuntu22.04-CloudInit --ostype l26 --cpu cputype=host --cores 2 --sockets 1 --memory 2048 --net0 virtio,bridge=vmbr1
Nota: Como é possível verificar no comando executado, não definimos o tamanho do disco do sistema operacional, pois ele cria, neste caso, um disco com um tamanho de 2.2 GiB. Mais adiante, antes de transformar a VM em template, vamos aumentar o tamanho desse disco.
Após, importe a imagem de disco recém modificada para o armazenamento (storage) desta VM:
qm importdisk 9001 /tmp/jammy-server-cloudimg-amd64.img local-lvm
A mensagem de saída deve ser semelhante a:
transferred 2.2 GiB of 2.2 GiB (100.00%)
Successfully imported disk as ‘unused0:local-lvm:vm-9001-disk-0’
Como é possível conferir na mensagem de saída, o disco ainda não está em uso (unused). Para habilitar o uso, deve-se definir qual será o o tipo de dispositivo (VirtIO, iSCSI, SATA ou IDE). Em nosso caso, usaremos VirtIO. Ainda no terminal de seu Proxmox, execute o seguinte comando:
qm set 9001 --scsihw virtio-scsi-pci --virtio0 local-lvm:vm-9001-disk-0
A mensagem de retorno deve ser:
update VM 9001: -scsihw virtio-scsi-pci -virtio0 local-lvm:vm-9001-disk-0
É possível também verificar na interface gráfica do Proxmox, o disco devidamente em uso.
Vamos agora habilitar o Cloud-Init nesta VM, como um disco, também localizado em “local-lvm” e seu tipo de dispositivo como IDE. Volte no terminal de seu nó Proxmox e execute o seguinte comando:
qm set 9001 --ide2 local-lvm:cloudinit
Com essa operação, a função Cloud-Init é habilitada e é possível fazer algumas definições diretamente pelo Proxmox, como usuário e senha, endereço IP, etc.
Definir o disco “virtio0”, que contém o sistema operacional, como disco de boot:
qm set 9001 --boot c --bootdisk virtio0
Fazer a conexão com o monitor, para assim poder visualizar a VM a partir do respectivo console.
qm set 9001 --serial0 socket --vga serial0
Habilitar o Qemu-guest-agent, necessário para comunicação com Terraform e que por padrão, vem desabilitado nas opções da VM.
qm set 9001 --agent enabled=1
Confira nas opções da VM, que o disco de inicialização está correto e que o qemu-guest-agent está ativo.
Como nosso disco tem somente 2.2 GiB, vamos aumentar para o tamanho que desejamos, que no caso é 20.2 GiB, ou seja, mais 18 GiB. No terminal de seu nó Proxmox, execute o seguinte comando:
qm disk resize 9001 virtio0 +18G
Agora devemos converter a máquina virtual em template com o seguinte comando:
qm template 9001
Com esse procedimento, o template está criado. Confira que o respectivo ícone muda na interface gráfica do Proxmox.
A partir deste modelo, pode-se criar clones via Proxmox (Full ou Linked Full) e fazer os devidos ajustes de usuário, senha, chaves SSH no respectivo menu Cloud-Init.
Volte ao terminal do nó Proxmox e remova o arquivo da imagem que baixamos para a pasta temporária:
rm /tmp/jammy-server-cloudimg-amd64.img local-lvm
Temos também a possibilidade de criar uma máquina virtual via código Terraform, ao qual veremos em um próximo artigo.