Infraestructura declarativa sobre bare metal · 2026
Homelab
Un push a un repositorio de aplicación termina como respuesta HTTPS pública sin ningún paso manual entre medio: Jenkins prueba y construye, la imagen queda fijada por digest sha256 en GitHub Container Registry, un commit al repositorio gitops describe el estado deseado y Argo CD lo sincroniza contra el clúster. Terraform aprovisiona, Ansible configura y WireGuard es la única entrada a la red interna.
RolDiseño, aprovisionamiento y operación
Contexto y evolución
El sistema detrás de las pantallas.
Un solo servidor de OVHcloud sostiene trece invitados, un clúster de Kubernetes y la entrega de todo lo que publico. Proxmox divide el hardware, Kubernetes ejecuta las cargas y un repositorio Git describe qué debe estar corriendo; entre un push y una respuesta HTTPS pública no queda ningún paso manual.
El reparto de responsabilidades es explícito. Terraform crea recursos y guarda su estado en un bucket remoto que otro stack creó primero; Ansible se ocupa de todo lo que ocurre dentro de un invitado, con el inventario regenerado desde la salida de Terraform. Los scripts largos de remote-exec quedaron fuera: terminan con código 0, el recurso reporta éxito y el estado deja de describir la realidad.
Lo que más cambió el diseño fue reiniciar el servidor. El primer reinicio devolvió todo menos el túnel, y la causa eran unidades systemd hechas a mano que cargaban sus propias tablas de nftables en cada arranque; ninguna prueba las había visto porque cada ejecución de Ansible las borraba antes de medir. Desde entonces cada procedimiento de recuperación anota si llegó a ejecutarse contra este clúster, y el segundo reinicio devolvió los trece invitados sin tocar nada.
Decisiones y resultados
- Terraform aprovisiona y Ansible configura, sin scripts remote-exec que reporten éxito por haber terminado con código 0.
- Plano de control de tres miembros con etcd, primario de PostgreSQL con réplica en streaming y snapshots fuera del servidor.
- Los secretos viven en Bitwarden Secrets Manager y nunca pasan por la línea de comandos.
Mapa del sistema
Abre cada aplicación.
No son etiquetas: cada módulo conserva su propia ruta y contexto técnico.
- 01Ver módulo
Aprovisionamiento
Cinco stacks de Terraform con el estado fuera del servidor.
- 02Ver módulo
Configuración
Ansible se ocupa de todo lo que ocurre dentro de un invitado.
- 03Ver módulo
Clúster Kubernetes
Plano de control de tres miembros y un Gateway que termina TLS.
- 04Ver módulo
Cadena de entrega
De un push a una respuesta HTTPS sin paso manual.
- 05Ver módulo
Secretos y acceso
Un almacén de secretos y una sola puerta de entrada.
- 06Ver módulo
Datos y recuperación
Un primario, una réplica en streaming y runbooks que registran qué se ejecutó.
- 07Ver módulo
Observabilidad
Prometheus, Loki y Grafana fuera del clúster que observan.