![Linux: implantar o monitor de desempenho do servidor Netdata](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714247043_Linux-implantar-o-monitor-de-desempenho-do-servidor-Netdata-150x150.jpg)
Linux: implantar o monitor de desempenho do servidor Netdata
27 de abril de 2024![Sucesso DevEx: Como a Pfizer cresceu para 1.000 engenheiros](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714411325_Sucesso-DevEx-Como-a-Pfizer-cresceu-para-1000-engenheiros-150x150.png)
Sucesso DevEx: Como a Pfizer cresceu para 1.000 engenheiros
29 de abril de 2024- Você pode usar o Packer em um script ou outra automação, como um pipeline de CI/CD para manter seus modelos atualizados regularmente, em vez de tornar isso um processo manual.
- Ao migrar mais para o Proxmox no ambiente de laboratório, eu queria implementar modelos semelhantes aos do VMware vSphere.
- Em seu ambiente Proxmox, você precisa gerar um token de API para o Packer usar para acessar o ambiente.
Tenho brincado com o Packer e atualizado os modelos no laboratório doméstico. Ao migrar mais para o Proxmox no ambiente de laboratório, eu queria implementar modelos semelhantes aos do VMware vSphere. Vejamos como construir um modelo Proxmox Packer para Ubuntu 24.04 e como você pode automatizar instalações do Ubuntu no Proxmox.
Por que o Packer é útil?
O Packer é extremamente útil, pois permite instalações automatizadas de sistemas operacionais em seu ambiente virtualizado. Você pode usar o Packer em um script ou outra automação, como um pipeline de CI/CD para manter seus modelos atualizados regularmente, em vez de tornar isso um processo manual.
O que você precisa para começar?
Você precisa:
- Servidor Proxmox VE instalado em um host
- Token de API Proxmox gerado
- Packer baixado e funcionando
- O plugin Proxmox para Packer
- Arquivos necessários para a compilação do Packer
Vejamos estes um por um.
1. Servidor Proxmox VE instalado em um host
Instalar o Proxmox é super fácil. Envolve baixar o ISO, usar algo como Ventoy ou Rufus para “gravar” o ISO em um dispositivo de inicialização USB e, em seguida, inicializar seu servidor. Você também pode usar a virtualização aninhada se quiser experimentar o Proxmox.
Confira alguns recursos aqui:
2. Token de API Proxmox gerado
Em seu ambiente Proxmox, você precisa gerar um token de API para o Packer usar para acessar o ambiente. Para fazer isso, você precisa executar as seguintes etapas:
![Adicionando um token de API no proxmox](https://optimuscloud.com.br/wp-content/uploads/2024/04/Modelo-Proxmox-Packer-para-Ubuntu-2404.png)
No Adicionar: Token caixa de diálogo, escolha o usuário que deseja usar, insira um ID de token e desmarque Separação de privilégios. Clique Adicionar.
![Configurando um novo token de API](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714404126_368_Modelo-Proxmox-Packer-para-Ubuntu-2404.png)
![Configurando um novo token de API](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714404126_368_Modelo-Proxmox-Packer-para-Ubuntu-2404.png)
No Segredo do token caixa de diálogo, você verá o ID do token e o segredo exibidos. Você desejará copiar esses valores, pois os usaremos em nossos arquivos de construção do Packer.
![ID do token e segredo exibido](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714404126_237_Modelo-Proxmox-Packer-para-Ubuntu-2404.png)
![ID do token e segredo exibido](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714404126_237_Modelo-Proxmox-Packer-para-Ubuntu-2404.png)
3. Packer baixado e funcionando
Você pode baixar o Packer para a plataforma que está usando como estação de trabalho administrativa para trabalhar com seu ambiente Promxox aqui: Instalar | Empacotador | Desenvolvedor HashiCorp.
4. O plugin Proxmox para Packer
Assim como o Terraform, o Packer funciona de forma semelhante com plug-ins que permitem “conversar” com vários ambientes de infraestrutura, incluindo o Proxmox.
Você pode baixar o plugin Proxmox para Packer usando o seguinte comando:
packer plugins install github.com/hashicorp/proxmox
Além disso, o Packer baixará e instalará automaticamente os plug-ins necessários se eles forem referenciados no código de construção do Packer. Veremos isso nos arquivos de exemplo, mas o código a seguir informa ao Packer qual plugin ele precisa para construir a infraestrutura no Proxmox.
packer {
required_plugins {
name = {
version = "~> 1"
source = "github.com/hashicorp/proxmox"
}
}
}
Em seguida, você pode executar o comando init do Packer para inicializar seu ambiente do Packer, que extrairá automaticamente os arquivos de plug-in necessários:
packer init .
![Instalando o plugin packer proxmox com o comando packer init](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714404126_642_Modelo-Proxmox-Packer-para-Ubuntu-2404.png)
![Instalando o plugin packer proxmox com o comando packer init](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714404126_642_Modelo-Proxmox-Packer-para-Ubuntu-2404.png)
5. Arquivos necessários para o modelo Proxmox Packer para Ubuntu 24.04
Como observação, peguei muito do que Christian “My Digital Life” postou para o modelo Ubuntu 22.04 Packer e os modifiquei para meus propósitos e para o Ubuntu 24.04. Você pode encontrar seus recursos aqui. Existem alguns arquivos necessários para construir um modelo Proxmox Packer para Ubuntu 24.04:
- ubuntu-24.04.pkr.hcl – conteúdo abaixo
- variáveis.pkr.hcl – conteúdo abaixo
- dados do usuário – conteúdo abaixo
- metadados – este arquivo está em branco
- 99-pve.cfg – conteúdo abaixo
Você pode ver a estrutura de diretórios onde os arquivos precisam ser colocados abaixo:
![Estrutura de diretório para o modelo do empacotador proxmox para Ubuntu 24.04](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714404126_207_Modelo-Proxmox-Packer-para-Ubuntu-2404.png)
![Estrutura de diretório para o modelo do empacotador proxmox para Ubuntu 24.04](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714404126_207_Modelo-Proxmox-Packer-para-Ubuntu-2404.png)
ubuntu-24.04.pkr.hcl
Abaixo você verá o arquivo de definição de recursos para sua compilação Ubuntu 24.04 com Packer no Proxmox. Note o http_bind_address você pode usar se precisar especificar qual endereço IP deseja usar.
# Ubuntu Server Noble Numbat
# ---
# Packer Template to create an Ubuntu Server 24.04 LTS (Noble Numbat) on Proxmox
# Resource Definition for the VM Template
packer {
required_plugins {
name = {
version = "~> 1"
source = "github.com/hashicorp/proxmox"
}
}
}
source "proxmox-iso" "ubuntu-server-noble-numbat" {
# Proxmox Connection Settings
proxmox_url = "${var.proxmox_api_url}"
username = "${var.proxmox_api_token_id}"
token = "${var.proxmox_api_token_secret}"
# (Optional) Skip TLS Verification
insecure_skip_tls_verify = true
# VM General Settings
node = "pvetest82"
vm_id = "199"
vm_name = "ubuntu-server-noble-numbat"
template_description = "Noble Numbat"
# VM OS Settings
iso_file = "local:iso/ubuntu-24.04-live-server-amd64.iso"
iso_storage_pool = "local"
unmount_iso = true
template_name = "packer-ubuntu2404"
# VM System Settings
qemu_agent = true
# VM Hard Disk Settings
scsi_controller = "virtio-scsi-pci"
disks {
disk_size = "20G"
format = "raw"
storage_pool = "local-lvm"
type = "virtio"
}
# VM CPU Settings
cores = "1"
# VM Memory Settings
memory = "2048"
# VM Network Settings
network_adapters {
model = "virtio"
bridge = "vmbr0"
firewall = "false"
}
# VM Cloud-Init Settings
cloud_init = true
cloud_init_storage_pool = "local-lvm"
# PACKER Boot Commands
boot_command = (
"<esc><wait>",
"e<wait>",
"<down><down><down><end>",
"<bs><bs><bs><bs><wait>",
"autoinstall ds=nocloud-net\;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ ---<wait>",
"<f10><wait>"
)
boot = "c"
boot_wait = "5s"
# PACKER Autoinstall Settings
http_directory = "./http"
#http_bind_address = "10.1.149.166"
# (Optional) Bind IP Address and Port
# http_port_min = 8802
# http_port_max = 8802
ssh_username = "ubuntu"
# (Option 1) Add your Password here
ssh_password = "ubuntu"
# - or -
# (Option 2) Add your Private SSH KEY file here
# ssh_private_key_file = "~/.ssh/id_rsa"
# Raise the timeout, when installation takes longer
ssh_timeout = "20m"
}
# Build Definition to create the VM Template
build {
name = "ubuntu-server-noble-numbat"
sources = ("proxmox-iso.ubuntu-server-noble-numbat")
# Provisioning the VM Template for Cloud-Init Integration in Proxmox #1
provisioner "shell" {
inline = (
"while ( ! -f /var/lib/cloud/instance/boot-finished ); do echo 'Waiting for cloud-init...'; sleep 1; done",
"sudo rm /etc/ssh/ssh_host_*",
"sudo truncate -s 0 /etc/machine-id",
"sudo apt -y autoremove --purge",
"sudo apt -y clean",
"sudo apt -y autoclean",
"sudo cloud-init clean",
"sudo rm -f /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg",
"sudo rm -f /etc/netplan/00-installer-config.yaml",
"sudo sync"
)
}
# Provisioning the VM Template for Cloud-Init Integration in Proxmox #2
provisioner "file" {
source = "files/99-pve.cfg"
destination = "/tmp/99-pve.cfg"
}
# Provisioning the VM Template for Cloud-Init Integration in Proxmox #3
provisioner "shell" {
inline = ( "sudo cp /tmp/99-pve.cfg /etc/cloud/cloud.cfg.d/99-pve.cfg" )
}
}
variáveis.pkr.hcl
O arquivo de variáveis abriga as variáveis para nossa construção do Packer. Abaixo estão os valores reais que usei em meu ambiente de teste. Quero que você possa ver como eles parecem preenchidos.
variable "proxmox_api_url" {
type = string
default = "https://10.1.149.199:8006/api2/json"
}
variable "proxmox_api_token_id" {
type = string
default = "root@pam!testtoken"
}
variable "proxmox_api_token_secret" {
type = string
default = "de7cd80c-cf3c-43fc-bd26-df6cf3b9c98c"
sensitive = true
}
dados do usuário
O arquivo de dados do usuário controla a parte de configuração da nuvem do build. Abaixo da senha com hash para o Ubuntu o usuário é Ubuntu. Você pode criar uma senha com hash para seu usuário usando os comandos do Linux:
sudo apt-get install whois
mkpasswd --method=SHA-512 --rounds=4096
Depois de gerar a senha que deseja usar, você pode substituir o valor do hash abaixo.
#cloud-config
autoinstall:
version: 1
locale: en_US
keyboard:
layout: us
ssh:
install-server: true
allow-pw: true
disable_root: true
ssh_quiet_keygen: true
allow_public_ssh_keys: true
packages:
- qemu-guest-agent
- sudo
storage:
layout:
name: direct
swap:
size: 0
user-data:
package_upgrade: false
timezone: America/Chicago
users:
- name: ubuntu
passwd: "$6$rounds=4096$4SY5kMDOITTy3R6s$vgp01IwfMWJRYxY1pa.D6xS.TEzGkMpVqxZtxPQrYuHzvywq2sSw/Z.yEmG3hsWnERCorBbN7tdMttVTcj4u61"
groups: (adm, sudo)
lock-passwd: false
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
99-pve.cfg
datasource_list: (ConfigDrive, NoCloud)
O que fazer a seguir: Baixe os arquivos do Github
Para facilitar a introdução de todos os arquivos necessários, você pode clonar o repositório que tenho para compilações do Packer que inclui o modelo Proxmox Packer para Ubuntu 24.04:
git clone https://github.com/brandonleegit/PackerBuilds.git
Você está procurando um modelo Packer para Ubuntu 24.04 e VMware? Confira minha postagem recente aqui com um passo a passo:
Solução de problemas
Ao trabalhar com o Packer, não é incomum encontrar problemas durante o processo de construção. Quer se trate de configurações incorretas, problemas ambientais ou erros de sintaxe, a solução de problemas é uma habilidade essencial. Abaixo estão algumas etapas gerais de solução de problemas para ajudar a diagnosticar e resolver problemas com o Packer:
- Valide sua configuração:
- Use o
packer validate
comando para verificar erros de sintaxe e configurações incorretas em seus modelos do Packer. Este deve ser sempre o primeiro passo, pois pode destacar rapidamente problemas que, de outra forma, seriam difíceis de diagnosticar.
- Use o
- Execute o Packer no modo de depuração:
- Use o
--debug
sinalizador ao executar sua compilação do Packer. Este modo pausa a compilação em várias etapas e permite inspecionar o estado da compilação de forma interativa, facilitando a identificação de onde as coisas estão erradas.
- Use o
- Revise registros e resultados:
- Examine cuidadosamente as saídas do console e os logs gerados pelo Packer. Erros e avisos podem fornecer pistas cruciais sobre o que está falhando.
- Verifique os logs na própria VM, como
/var/log/syslog
,/var/log/cloud-init.log
ou logs de aplicativos específicos para obter informações mais detalhadas sobre erros.
- Verifique as configurações do ambiente:
- Certifique-se de que todas as variáveis de ambiente e caminhos estejam configurados corretamente, especialmente aqueles dos quais seus scripts de construção dependem.
- Verifique as configurações de rede, especialmente se sua compilação envolver o download de arquivos de fontes externas ou exigir conectividade de rede com provisionadores.
- Examinar Provisionadores:
- Revise os scripts ou comandos que estão sendo executados se ocorrerem erros durante a fase de provisionamento. Tente executá-los manualmente em uma VM de teste para garantir que funcionem conforme o esperado.
- Isole o problema:
- Simplifique seu modelo do Packer para a configuração mínima que reproduz o problema. Isso pode ajudar a isolar a área problemática, facilitando o diagnóstico.
- Atualizar Packer e Plugins:
- Certifique-se de estar usando a versão mais recente do Packer e todos os plug-ins dos quais seus modelos dependem. Bugs e problemas em versões mais antigas às vezes podem causar comportamentos inesperados.