Ahora tienes un cluster de Kubernetes desnudo ejecutando Talos. Para que sea útil, necesitas red, almacenamiento y aplicaciones. Administro todo eso con Flux CD — una herramienta GitOps que reconcilia continuamente el estado de tu cluster con Git. Este post cubre por qué GitOps importa y cómo funciona Flux.
¿Qué es GitOps?#
GitOps significa que tu infraestructura está declarada en Git, y un controlador ejecutándose en tu cluster sincroniza la realidad para que coincida con lo que está en el repo. Cuando quieres agregar una aplicación, actualizar una configuración, o cambiar un valor de Helm, editas Git y confirmas. Flux ve la confirmación, aplica los cambios, y tu cluster se actualiza automáticamente.
Beneficios:
- Pista de auditoría: Cada cambio de infraestructura es una confirmación de Git
- Reversión: Revierte cambios revirtiendo commits
- Pruebas: Prueba cambios en una rama antes de fusionar a producción
- Consistencia: El estado del cluster siempre coincide con lo que está en Git
Arquitectura#
Mi configuración de Flux usa dos capas:
Capa de Infraestructura
├── Traefik (controlador de ingress)
├── MetalLB (balanceador de carga)
├── cert-manager (gestión de certificados)
└── Monitoreo (Prometheus, Grafana)
Capa de Aplicaciones
├── Homarr (dashboard)
├── Nextcloud (sincronización de archivos)
└── Cargas de trabajo personalizadasLa capa de infraestructura instala herramientas y servicios de plataforma. La capa de aplicaciones ejecuta lógica de negocios y servicios dirigidos al usuario. Ambos son administrados por Flux reconciliando Git.
Estructura del repositorio#
Mi configuración del cluster vive en un repo de Git con este diseño:
gitops/
└── clusters/
└── totorolab/
├── flux-system/ # Bootstrap de Flux
├── infrastructure/ # Traefik, MetalLB, cert-manager
│ └── base/ # HelmRepositories, Namespaces
├── apps/ # Aplicaciones
│ └── base/ # HelmReleases
│ ├── homarr/
│ ├── nextcloud/
│ └── monitoring/
└── infrastructure.yaml # Flux Kustomization (capa infra)Cada aplicación es una Kustomization que Flux reconcilia. Los valores de Helm, tags de imagen y replicas se definen en Git. Cuando editas una HelmRelease, Flux actualiza la liberación real de Helm.
Inicializar Flux#
Instala Flux en tu cluster:
flux installLuego crea una fuente de Git para tu repo:
flux create source git flux-system \
--url=https://github.com/lolverae/homelab \
--branch=main \
--path=./gitops/clusters/totorolabFlux reconciliará tu cluster cada 10 minutos (configurable). Cuando ve una nueva HelmRelease o Kustomization en Git, la aplica automáticamente.
Verifica el estado:
flux get all
flux get sources
flux get kustomizationsAdministrar aplicaciones#
Para agregar una nueva aplicación, crea una HelmRelease en tu repo:
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: mi-app
namespace: default
spec:
chart:
spec:
chart: mi-chart
sourceRef:
kind: HelmRepository
name: mi-repo
values:
replicas: 2
image:
tag: v1.0.0Confirma y sube. Flux creará la liberación automáticamente. Para actualizar,
edita la sección values en Git y confirma. Flux reconcilia dentro de 10
minutos.
Secretos y configuración#
Para datos sensibles (contraseñas de base de datos, claves de API), usa SOPS o Sealed Secrets para encriptar secretos en Git. Cuando Flux los aplica, los desencripta y crea secretos de Kubernetes. De esta manera, toda tu configuración de cluster está en Git mientras permanece segura.
Por qué esto importa#
GitOps convierte tu cluster en algo versionado y reproducible. La recuperación ante desastres es tan simple como apuntar Flux a tu repo de Git. Probar cambios es tan fácil como una rama. La infraestructura se convierte en código, revisable y auditable como cualquier otro proyecto de software.
Ese es el poder de administrar infraestructura con Git.