VM no Proxmox

Criar VM no Proxmox com o Terraform

Tela de terminal após conexão SSH bem-sucedida com o servidor Prometheus, exibindo detalhes do sistema operacional Debian GNU/Linux 12 (Bookworm), uptime do servidor e links para a documentação do Prometheus.

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.

Terminal exibindo o progresso da configuração e provisionamento de uma máquina virtual no Proxmox, incluindo logs de execução de scripts remotos e conexões SSH realizadas com sucesso para o host Prometheus.
  • 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.

Interface do Proxmox Virtual Environment 8.2.8 mostrando a tela de console de uma máquina virtual chamada 'prometheus', rodando Debian GNU/Linux 12, com uma visão detalhada do menu de navegação à esquerda.

Até a próxima!