Ir al contenido
  1. Posts/

Homelab: VMs en Proxmox con Terraform

Homelab: Proxmox, Talos, y Flux - Este artículo es parte de una serie.
Parte 1: Este artículo

Ejecuto un cluster de homelab en Proxmox — varios nodos de cómputo con una mezcla de VMs AlmaLinux y nodos Kubernetes Talos. Todo se gestiona a través de Terraform usando el proveedor de Proxmox. Este post cubre por qué elegí ese enfoque y lo básico de cómo funciona.

¿Por qué Infrastructure as Code?
#

La creación manual de VMs a través de la interfaz web de Proxmox está bien al principio, pero una vez que tienes más de unos pocos nodos, se vuelve tedioso y propenso a errores. Terraform te permite:

  • Definir tu infraestructura en código, rastreado en Git
  • Recrear o destruir tu laboratorio completo desde un solo terraform apply
  • Hacer cambios de manera consistente (mismo tamaño de disco, número de CPUs, etc. en todos los nodos)
  • Ejecutar todo desde un script — sin hacer clic alrededor de la interfaz web

La configuración del homelab
#

Mi cluster ejecuta:

  • Nodos de plano de control (3x): Ejecutando Talos Linux, formando un cluster Kubernetes
  • Nodos de trabajo (2x): Más nodos Talos Linux para programación de cargas de trabajo
  • VMs de utilidad (1-2x): AlmaLinux ejecutando monitoreo, reconciliación de GitOps, etc.

Todo esto se gestiona a través de dos módulos de Terraform: talos_vm (para nodos de Kubernetes) y alma_lxc (para máquinas de utilidad). Los módulos manejan el tamaño de las VMs, la red y la plantilla cloud-init, así que no tengo que repetirme para cada nodo.

Primeros pasos
#

Prerequisitos
#

Configurar el acceso a la API de Proxmox
#

Primero, crea un usuario de Proxmox con los permisos que Terraform necesita. Ejecuta estos comandos en un nodo de Proxmox (o a través de pveum si tienes acceso a shell):

# Crear un rol con permisos de gestión de VMs
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 SDN.Use"

# Crear el usuario
pveum user add terraform-prov@pve --password <password>

# Asignar el rol
pveum aclmod / -user terraform-prov@pve -role TerraformProv

# Generar un token de API
pveum user token add terraform-prov@pve tftoken

Guarda el ID del token y el secreto — los necesitarás en tu terraform.tfvars.

Estructura
#

Mi configuración de Terraform usa dos módulos: uno para VMs de Talos, otro para LXCs de AlmaLinux. Cada módulo tiene su propia configuración de CPU, memoria, disco y red. El main.tf principal llama a estos módulos para cada nodo que quiero crear.

Configuración de variables de ejemplo (en terraform.tfvars):

proxmox_node           = "pve01"
proxmox_api_url        = "https://tu-servidor-proxmox:8006/api2/json"
proxmox_api_token_id   = "terraform-prov@pve!tftoken"
proxmox_api_token_secret = "xxxxxxxxxxxx"

Luego ejecuta:

terraform init
terraform plan
terraform apply

Terraform creará tus VMs y LXCs, configurará cloud-init y establecerá la red todo en una sola operación.

Próximos pasos
#

Una vez que tus VMs estén activas, el siguiente paso es inicializar un cluster de Kubernetes. Eso es lo que cubre la Parte 2: usar Talos Linux para inicializar y establecer el plano de control.

Homelab: Proxmox, Talos, y Flux - Este artículo es parte de una serie.
Parte 1: Este artículo