Este repositório contém arquivos e instruções para provisionar máquinas virtuais
no virtualizador Proxmox
utilizando a ferramenta de IaC
Terraform
.
Trata-se de um projeto de homelab que desenvolvi para praticar o uso de ferramentas DevOps como o Terraform
, Proxmox
e Ansible
.
Primeiramente, será necessário instalar o Proxmox
no seu hardware. Eu utilizei um laptop com 8 GB de RAM, processador CORE I7 (5ª geração) e disco SSD Sata com 500GB de espaço. O Proxmox
não é muito exigente em termos de hardware, mas tenha em mente que a capacidade do hardware utilizado vai influenciar no desempenho do próprio virtualizador e na quantidade de máquinas virtuais que ele poderá executar.
Em razão de haver muito material disponível na Web sobre a instalação do Proxmox
e isso ser um processo relativamente simples, não abordarei sua instalação.
Será necessário criar um template de máquina virtual nos moldes do cloud-init
. Para a criação do template que utilizaremos, pode-se visitar a página Cloud-init no Proxmox Virtual Environment 6. Embora no site tenha-se criado o template utilizando a versão 6 do Proxmox
, eu utilizei na versão 7 sem problemas. Eu utilizei as configurações do site acima e algumas customizações colhidas na web após sofrer com vários problemas! 🤯
Eu utilizei a imagem do Ubuntu 22.04.
Acredito que deve funcionar para imagens mais atuais sem problemas!
Acesse seu servidor Proxmox
- via SSH
- faça o login como root e execute os seguintes comandos:
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
A partir do seu Desktop, copie os arquivos necessários da sua máquina para o servidor Proxmox:
No primeiro comando, temos o arquivo de configuração do editor
VIM
e no primeiro comando temos o arquivo de configurações do Shellbash
.
scp ~/.vimrc [email protected]:/tmp
scp ~/.bashrc [email protected]:/tmp
Agora, copie a sua chave SSH
pública para o servidor Proxmox, para que possamos adicionar esta chave no template do cloud-init:
scp ~/.ssh/id_rsa.pub [email protected]:/tmp
Volte ao console do servidor Proxmox
e, após baixar a imagem, atualize a lista de pacotes do sistema, instale as ferramentas libguestfs-tools
e, após instale o qemu-guest-agent
e os demais pacotes na imagem baixada conforme a seguir:
apt update -y && apt install libguestfs-tools -y
virt-customize -a jammy-server-cloudimg-amd64.img --install qemu-guest-agent --truncate /etc/machine-id
virt-customize -a jammy-server-cloudimg-amd64.img --install vim
virt-customize -a jammy-server-cloudimg-amd64.img --install bash-completion
virt-customize -a jammy-server-cloudimg-amd64.img --install wget
virt-customize -a jammy-server-cloudimg-amd64.img --install curl
virt-customize -a jammy-server-cloudimg-amd64.img --install unzip
virt-customize -a jammy-server-cloudimg-amd64.img --install git
Nos comandos acima, o parâmetro "--truncate /etc/machine-id" foi contribuição do Mateus Muller.
Agora crie uma máquina virtual com base na imagem baixada:
qm create <new_vm_id> <memory> --name <vm_name> --net <networ_config>
qm create 9000 --memory 1024 --name tmp-ubuntu-jammy-9000 --net0 virtio,bridge=vmbr0
Agora veja em /etc/pve/storage.cfg
qual é a storage que você deseja guardar essa imagem. Neste caso, vamos utilizar a storage local:
qm importdisk 9000 jammy-server-cloudimg-amd64.img local
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local:9000/vm-9000-disk-0.raw
Estamos quase prontos. Temos que adicionar um disco que é onde vamos armazenar as configurações personalizadas:
qm set 9000 --ide2 local:cloudinit
Configurando a ordem de boot:
qm set 9000 --boot c --bootdisk scsi0
Algumas imagens de amd64
cloud-init
são feitas pensando em compatibilidade com o Openstack
. Por isso, temos que adicionar a serial0
para que ela inicie. Caso tenha curiosidade, remova a serial0
. Se não inicializar, adicione novamente e tudo vai funcionar:
qm set 9000 --serial0 socket --vga serial0
Habilite o qemu agent
na imagem:
qm set 9000 --agent enabled=1
Configure a chave SSH
que será utilizada para a conexão entre seu Desktop e as máquinas virtuais que serão provisionadas no Proxmox
:
qm set 9000 --sshkey /tmp/id_rsa.pub
Defina o usuário que vai ter permissão de sudo
:
qm set 9000 --ciuser sysadmin
Faça o upload dos arquivos para a imagem que está sendo configurada:
virt-customize -a jammy-server-cloudimg-amd64.img --upload \ /tmp/sshd_config:/etc/ssh/sshd_config
virt-customize -a jammy-server-cloudimg-amd64.img --upload \
/tmp/.vimrc:/home/sysadmin/.vimrc
virt-customize -a jammy-server-cloudimg-amd64.img --upload \
/tmp/.vimrc:/home/sysadmin/.bashrc
Defina o tipo de máquina. Dica valiosa do Tomas da 2w-consultoria:
qm set 9000 --machine q35
Por fim, transforme esta máquina em um template:
qm template 9000
Este é o último passo para utilizar o template no
Terraform
para provisionar máquinas virtuais noProxmox
.
Para a instalação e configuração do Terraform
podemos acessar a página de documentação.
Para a instalação do git
podemos acesar a página de instalação. Para a configuração, podemos seguir os seguintes passos:
1 - Configurar o nome que será vinculado aos commits:
git config --global user.name William
NOTA: "--global" define esta configuração no contexto de todos os repositórios e sua omissão define esta configuração somente para o repositório atual. 2 - Configurar o e-mail que estará vinculado aos commits:
git config --global user.email [email protected]
3 - Configurar o editor de texto padrão para as mensagens de commit:
NOTA: Utilize vim para o VIM, 'code --wait' para o VSCode e 'codium --wait' para o VSCodium.
git config --global core.editor 'codium --wait'