Nesse post, vamos ver como criar VM (máquina virtual) no Proxmox com o Terraform. Esse projeto provisiona com o Terraform um servidor Debian 12 (Bookworm) nocloud com configurações do cloud-init para ser instalado o Prometheus.
O provisionamento irá baixar a última imagem do Debian nocloud, criar uma VM (template) via script no servidor Proxmox com o Qemu, copiar arquivos de configurações do cloud-init para o servidor Proxmox, configurar a VM a ser criada com o cloud-init, instalar pacotes, configurar o sistema, habilitar e iniciar o Prometheus.
Debian
O Debian é um sistema operacional livre, desenvolvido e mantido pelo projeto Debian. Uma distribuição Linux livre com milhares de aplicativos para atender às necessidades dos(as) usuários(as). Para saber mais sobre o Debian, visite a página do projeto.
Debian Cloud
O Debian que vamos usar no projeto é baseado no provedor Qemu, usando como VM simples amd64 a imagem do Debian noCloud.
Há imagens para diferentes provedores:
- Azure: Otimizado para o ambiente Microsoft Azure;
- EC2: Otimizado para o Amazon EC2;
- Generic: deve ser executado em qualquer ambiente que use cloud-init, por exemplo, OpenStack, DigitalOcean e também em bare metal;
- Genericcloud: Semelhante a generic. Deve rodar em qualquer ambiente virtualizado. É menor que generic ao excluir drivers para hardware físico;
- nocloud: Mais útil para testar o processo de build em si. Não tem cloud-init instalado, mas permite login root sem senha.
A escolha da imagem nocloud foi por ter encontrado problemas com a imagem generic e genericcloud que já vem com o cloud-init instalado, enfrentando problema de kernel panic no provisionamento da VM com o Terraform.
Cloud-Init
Gerenciar e configurar instâncias e servidores de nuvem pode ser uma tarefa complexa e demorada. O Cloud-Init é uma ferramenta de inicialização de código aberto que foi projetada para facilitar a instalação e execução de seus sistemas com o mínimo de esforço, já configurados de acordo com suas necessidades.
O cloud-init é o método de multidistribuição padrão da indústria para inicialização de instância de nuvem multiplataforma. Ele é suportado por todos os principais provedores de nuvem pública, sistemas de provisionamento para infraestrutura de nuvem privada e instalações bare-metal.
Durante a inicialização, o cloud-init identifica a nuvem em que está sendo executado e inicializa o sistema de acordo. As instâncias da nuvem serão automaticamente provisionadas durante a primeira inicialização com rede, armazenamento, chaves SSH, pacotes e vários outros aspectos do sistema já configurados.
Para saber mais sobre o cloud-init, visite a página do projeto.
Prometheus
O Prometheus é um kit de ferramentas de monitoramento e alerta de sistemas de código aberto originalmente criado no SoundCloud. Desde seu início em 2012, muitas empresas e organizações adotaram o Prometheus, e o projeto tem uma comunidade de desenvolvedores e usuários muito ativa. Agora é um projeto de código aberto independente e mantido independentemente de qualquer empresa. Para enfatizar isso e esclarecer a estrutura de governança do projeto, o Prometheus se juntou à Cloud Native Computing Foundation em 2016 como o segundo projeto hospedado, depois do Kubernetes.
Características
As principais características do Prometheus são:
- um modelo de dados multidimensional com dados de séries temporais identificados pelo nome da métrica e pares chave/valor;
- PromQL, uma linguagem de consulta flexível para alavancar essa dimensionalidade;
- sem dependência de armazenamento distribuído; os nós de servidor único são autônomos;
- a coleta de séries temporais ocorre por meio de um modelo pull sobre HTTP;
- o envio de séries temporais é suportado por meio de um gateway intermediário;
- os alvos são descobertos por meio da descoberta de serviço ou configuração estática;
- vários modos de suporte de gráficos e painéis.
Para saber mais sobre o Prometheus, visite a página do projeto.
Terraform
O Terraform é uma ferramenta de código aberto de “infraestrutura como código” criada pela HashiCorp, permite que os programadores criem, alterem e versionem a infraestrutura com segurança e eficiência.
Para saber mais sobre o Terraform, visite a página do projeto.
O Projeto
O projeto provisona com o Terraform uma máquina virtual (VM) Debian no Proxmox, utilizando o Cloud Init e scripts personalizados, configurando e inicializando o Prometheus.
O Fluxo do processo
- Templates: O Terraform gera arquivos de configuração (Cloud Init e rede) usando templates.
- Arquivos Locais: Esses arquivos são salvos localmente.
- Transferência para o Proxmox: Os arquivos são enviados para o Proxmox, onde são usados durante a criação da VM.
- Criação da VM: A VM é criada a partir de um template no Proxmox, utilizando os arquivos de configuração do Cloud Init para inicialização automática.
- Execução de Scripts: Após a criação, a VM recebe e executa scripts para configurações adicionais, como ajustar o MOTD.
Principais arquivos
- provider.tf – Esse arquivo do Terraform configura o provedor Proxmox, especificando a versão e as credenciais de acesso à API do Proxmox.
- vm_proxmox.tf – Esse arquivo Terraform automatiza a criação da VM no Proxmox.
- variables.tf – Esse arquivo define várias variáveis usadas no Terraform para configurar a máquina virtual (VM) no Proxmox.
- terraform.tfvars – Esse arquivo fornece os valores específicos que o Terraform utilizará para criar e configurar a VM no Proxmox, usando as variáveis definidas anteriormente.
- cloud_config.yml – Esse arquivo fornece a configuração de provisionamento da imagem baseado no cloud-init.
- network_config.yml – Este arquivo define as configurações de rede para a interface Ethernet.
Executar o projeto
Faça o clone do projeto do GitHub, altere as variáveis nos arquivos de configurações de acordo com seu ambiente e no diretório raiz do projeto, execute os comandos terraform a seguir.
- init: Preparar o diretório de trabalho para outros comandos.
terraform init
- plan: Mostrar as alterações exigidas pela configuração atual.
terraform plan
- apply: Criar ou atualizar a infraestrutura.
terraform apply
- destroy: Destruir a infraestrutura criada anteriormente.
terraform destroy
- –help: Para mais informações de comando do terraform, use o ‘–help‘.
terraform --help
No final da execução do projeto, sem erro, você terá uma VM no Proxmox pronto para o uso com o Prometheus ou outro servidor que esteja configurando.
Até a próxima!