~sergio

ARTIGOS

Terraform Alpine VMs en Proxmox

07-09-2023

Preámbulo

O seguinte artigo explica como usar Terraform para desplegar VMs Alpine Linux basadas no template creado no Proxmox que se explicou en este artigo.

Configuración no Proxmox

Para que Terraform poida usar a API do Proxmox é necesario que dispoña de un usuario e unha contrasinal ou un «API Token», no meu caso vou usar o token. Terraform ten centos de proveedores para conectar con todo tipo de plataformas; como no noso caso usaremos Proxmox, o proveedor adecuado é telmate/proxmox e según a súa documentación farase o seguinte:

Entrando por SSH á shell do propio Proxmox (ou ben executando as mesmas acciós no GUI):

pveum role add TerraformProv -privs "Datastore.AllocateSpace Datastore.Audit Pool.Allocate Sys.Audit Sys.Console Sys.Modify VM.Allocate VM.Audit VM.Clone VM.Config.CDROM VM.Config.Cloudinit VM.Config.CPU VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Migrate VM.Monitor VM.PowerMgmt"
pveum user add tf@pve --password 
pveum aclmod / -user tf@pve -role TerraformProv

Logo si se necesita cambiar algún permiso (creo que fora necesario agregarar «SDN.Use» para un tema de rede) pódese facer así:

pveum role modify TerraformProv -privs "Datastore.AllocateSpace Datastore.Audit Pool.Allocate Sys.Audit Sys.Console Sys.Modify VM.Allocate VM.Audit VM.Clone VM.Config.CDROM VM.Config.Cloudinit VM.Config.CPU VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Migrate VM.Monitor VM.PowerMgmt SDN.Use"
            

Ahora xa se pode crear o «API Token» pero esta vez no GUI do Proxmox -> Datacenter -> Permissions -> API Tokens. Ahí facer click no botón «Add» e no diálogo seleccionar o usuario anterior «tf», poñerlle un Token ID (por diferencialo) e, importante, desmarcar o check «Privilege Separation». Apunta o «Token ID» e o «Secret» xa que solo se mostrarán ahora e farán falta para logo.

Con esto xa temos todo o necesario no Proxmox, ahora xa nos podemos poñer cos arquivos de configuración do Terraform.

Configuración do Terraform

Téñoa recopilada en este repositorio e penso que se entende bastante ben cos comentarios en liña. Os arquivos interesantes son:

Tendo en conta esto, o primeiro é crear o arquivo «env.sh» e configuralo co «Token ID» e o «Secret» obtido do Proxmox. Logo revisar o arquivo «vars.tf» comprobando que «proxmox_host» sexa o nome do host do Proxmox, que «template_name» conteña o nome do template creado previamente e por último agregando a clave pública SSH que nos interese en «ssh_key».

Execución!

Coas configuraciós xa feitas, e no directorio do repositorio que contén as configuraciós, executa o seguinte para inicializalo:

terraform init -upgrade

O comando anterior incializará o proxecto e instalará as dependencias, de ser necesario.

Executando o seguinte comando, podese probar a configuración e mostrará as accios que fará terraform:

terraform plan

Si se está de acordo con elas, aplica as acciós co comando:

terraform apply

E verás cómo se van creando as máquinas no GUI do Proxmox. Unha vez creadas xa poderás acceder a elas por SSH coas chaves configuradas.

Para destruir o creado anteriormente, podes executar o comando:

terraform destroy

O cal limpará todo o feito por esta configuración to Terraform.

Conclusión

Esto é todo, así xa poido levantar VMs automáticamente, quedando a configuración gardada e versionada en un repositorio git.

Ahora a idea é utilizar esta configuración para levantar as máquinas necesarias para un cluster Nomad + Consul; o cal, con sorte, documentaréi en sucesivos artigos.