Problema
Montar un homelab con varios mini PCs parece sencillo, pero la combinación de virtualización, orquestación de contenedores y segmentación de red genera fricciones inesperadas. Los síntomas típicos son: nodos que no se comunican después de la primera VM, pérdida de rendimiento cuando se habilitan VLAN, y scripts de Terraform que fallan al crear recursos porque la infraestructura subyacente no está alineada con los requisitos de Proxmox o Kubernetes. El reto es diseñar una arquitectura que permita escalar, automatizar y monitorizar sin que la red doméstica se vuelva un cuello de botella.
Causa
-
Configuración de red inconsistente – Los mini PCs suelen arrancar con DHCP y Wi‑Fi, lo que complica la creación de puentes (Linux bridges) estables en Proxmox. Cuando se añaden VLAN, la capa de virtualización necesita interfaces físicas etiquetadas, y cualquier salto entre Wi‑Fi y cableado rompe la topología.
-
Almacenamiento local limitado – Un SSD de 512 GB por nodo es suficiente para VMs ligeras, pero si se habilita Ceph o se guarda la base de datos de Prometheus en cada nodo, el espacio se agota rápidamente y los nodos entran en modo “read‑only”.
-
Desalineación de versiones de componentes – Proxmox 7.x, k3s 1.27 y Terraform 1.6 pueden coexistir, pero si el módulo de provider para Proxmox no está sincronizado con la API, los planes de Terraform fallan silenciosamente.
-
Falta de aislamiento de tráfico de gestión – Ejecutar la UI de Proxmox y los endpoints de Kubernetes en la misma subred que los dispositivos IoT genera interferencias y dificulta la aplicación de políticas de firewall.
Solución
1. Normalizar la capa de red
- Conecta cada mini PC por cable a un switch gestionado (por ejemplo, UniFi Switch). Desactiva el Wi‑Fi en BIOS para evitar rutas dinámicas.
- En Proxmox, crea un Linux Bridge llamado
vmbr0que use la NIC física etiquetada comoeth0. Añade una interfaz VLAN (eth0.10) para la red de VMs y otra (eth0.20) para la gestión de Kubernetes. - Configura el switch para que las VLAN 10 y 20 sean tagged en los puertos de los mini PCs y untagged en los puertos de acceso (PCs de escritorio, servidores NAS).
2. Distribuir el almacenamiento
- Reserva 150 GB del SSD para el sistema operativo y el datastore de Proxmox.
- Usa el resto para un LVM thin pool llamado
data-pool. Cada VM o contenedor se crea como un volumen lógico dentro de este pool, lo que permite snapshots sin consumir espacio adicional. - Si necesitas alta disponibilidad, habilita Proxmox Ceph solo con los discos SSD como OSDs; limita el número de réplicas a 2 para evitar sobrecarga.
3. Automatizar con Terraform y Ansible
- Utiliza el provider
telmate/proxmoxpara describir VMs, bridges y storage en archivos.tf. Mantén los IDs de los recursos en variables para que los cambios sean idempotentes. - Despliega k3s con un playbook de Ansible que configure
kubeletpara usar la interfazeth0.10. El playbook también instala Argo CD y Flux como Helm charts, dejando la gestión de aplicaciones en GitOps. - Guarda el estado de Terraform en un bucket S3 compatible (por ejemplo, MinIO) para que varios administradores puedan colaborar sin conflictos.
4. Segmentar tráfico de gestión
- Define una VLAN exclusiva (por ejemplo, 30) para la UI de Proxmox y los endpoints de la API de Kubernetes. En el switch, aplica reglas de firewall que permitan solo tráfico SSH y HTTPS desde la subred de administración.
- Configura
iptablesen cada nodo para bloquear puertos no esenciales en la interfaz de gestión (eth0.30). Deja los puertos de la red de VMs abiertos eneth0.10.
5. Monitorizar desde el primer día
- Instala Prometheus Node Exporter en cada nodo mediante un DaemonSet de k3s. Configura Grafana en una VM dedicada y conecta los dashboards a los targets
node_exportery a la API de Proxmox (pve_exporter). - Usa alertas basadas en uso de CPU > 80 % o disco < 20 % para anticipar cuellos de botella antes de que afecten a los laboratorios de Kubernetes.
Cuándo aplicar esta solución
- Escenarios válidos: clusters de 2‑5 nodos con mini PCs o NUCs, entornos de pruebas de Kubernetes, laboratorios de IaC (Terraform, Ansible) y despliegues de GitOps. La solución asume que el hardware tiene al menos una NIC de 1 Gbps y SSDs de 256 GB o más.
- Síntomas que indican la necesidad: VMs que pierden conectividad después de reiniciar, errores de “no space left on device” en Proxmox, o fallos de
terraform applyque reportan recursos no encontrados. - Casos donde NO aplica: despliegues que requieren almacenamiento persistente de alta capacidad (TBs) o redes de 10 Gbps, o clusters que usan hardware sin soporte de virtualización (VT‑x desactivado).
Código
# 1. Crear bridge vmbr0 en Proxmox (host1)
cat > /etc/network/interfaces <<EOF
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.10.11/24
gateway 192.168.10.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
auto eth0.10
iface eth0.10 inet manual
vlan-raw-device eth0
auto eth0.20
iface eth0.20 inet manual
vlan-raw-device eth0
EOF
systemctl restart networking
# 2. Terraform: definir un VM en Proxmox
resource "proxmox_vm_qemu" "k3s_master" {
name = "k3s-master"
target_node = "node1"
clone = "template-ubuntu"
cores = 2
memory = 4096
scsihw = "virtio-scsi-pci"
net0 = "virtio,bridge=vmbr0"
ipconfig0 = "ip=192.168.10.101/24,gw=192.168.10.1"
}
# 3. Ansible: instalar k3s (playbook fragment)
- hosts: k3s_nodes
become: true
tasks:
- name: Install k3s binary
shell: |
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--node-ip={{ ansible_host }} --flannel-iface=eth0.10" sh -
args:
creates: /usr/local/bin/k3s
Verificación
- Conectividad de VLAN – Desde cada nodo, ejecuta
ping -I eth0.10 192.168.20.1(IP del switch de gestión). Debería responder sin pérdida. - Estado de Proxmox – Accede a la UI (
https://192.168.10.11:8006) y verifica que los bridgesvmbr0,eth0.10yeth0.20aparecen como “active”. - Cluster k3s – Ejecuta
kubectl get nodes. Todos los nodos deben estar enReady. - Prometheus targets – En Grafana, abre el dashboard “Node Exporter Overview” y confirma que los 3 nodos aparecen con métricas actualizadas.
- Terraform plan – Corre
terraform plany revisa que no haya cambios inesperados en los recursos de Proxmox.
Notas adicionales
- BIOS y firmware – Actualiza el BIOS de los HP ProDesk Mini 400 G6 antes de instalar Proxmox; versiones antiguas pueden desactivar VT‑x o generar errores de arranque con Linux 6.x.
- Respaldo de configuración – Exporta la configuración de red de Proxmox (
pveum backup) y guarda los archivos.tfstateen un repositorio privado; así podrás restaurar rápidamente tras un fallo de hardware. - Ajuste de CPU – Si planeas ejecutar workloads intensivos, habilita la opción “CPU type: host” en la definición de la VM para evitar penalizaciones de virtualización.
- Escalabilidad futura – Cuando añadas un cuarto nodo, replica la configuración de VLAN y actualiza el archivo
inventoryde Ansible; no necesitas cambiar la topología de red si el switch soporta más puertos etiquetados.