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#
- Terraform instalado localmente
- Cluster Proxmox con acceso a API habilitado
- Proveedor de Terraform para Proxmox
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 tftokenGuarda 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 applyTerraform 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.