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

Diagrama de la cadena de entrega: push al repositorio, Jenkins, imagen por digest, repositorio GitOps, Argo CD y respuesta HTTPS.

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.

  1. 01

    Aprovisionamiento

    Cinco stacks de Terraform con el estado fuera del servidor.

    Ver módulo
  2. 02

    Configuración

    Ansible se ocupa de todo lo que ocurre dentro de un invitado.

    Ver módulo
  3. 03

    Clúster Kubernetes

    Plano de control de tres miembros y un Gateway que termina TLS.

    Ver módulo
  4. 04

    Cadena de entrega

    De un push a una respuesta HTTPS sin paso manual.

    Ver módulo
  5. 05

    Secretos y acceso

    Un almacén de secretos y una sola puerta de entrada.

    Ver módulo
  6. 06

    Datos y recuperación

    Un primario, una réplica en streaming y runbooks que registran qué se ejecutó.

    Ver módulo
  7. 07

    Observabilidad

    Prometheus, Loki y Grafana fuera del clúster que observan.

    Ver módulo