Configura multiclúster con Flux
Gestiona varios clústeres desde un solo repositorio, con infraestructura compartida y diferencias por clúster.
Flux escala a muchos clústeres ejecutando un conjunto de controladores en cada clúster, todos siguiendo el mismo repositorio de Git en rutas distintas. No hay un hub central en el que registrar clústeres. Esta guía muestra cómo estructurar un único repositorio para staging y producción, hacer bootstrap de cada clúster, ordenar la infraestructura antes que las aplicaciones y cuándo usar en su lugar una configuración de clúster remoto.
Un repositorio, una ruta por clúster
Flux sigue una regla simple: cada clúster se somete a bootstrap contra su propia carpeta bajo clusters/. Un repositorio que sirve a dos clústeres se ve así:
fleet-infra/
├── clusters/
│ ├── staging/
│ │ ├── flux-system/ # creado por bootstrap
│ │ ├── infrastructure.yaml
│ │ └── apps.yaml
│ └── production/
│ ├── flux-system/
│ ├── infrastructure.yaml
│ └── apps.yaml
├── infrastructure/
│ ├── base/ # compartido: ingress, cert-manager, monitorización
│ ├── staging/
│ └── production/
└── apps/
├── base/
├── staging/
└── production/
Las definiciones compartidas viven en carpetas base/, y cada carpeta de entorno contiene el overlay de Kustomize con lo que difiere (consulta la guía de overlays).
Haz bootstrap de cada clúster
Cambia el contexto de kubectl a cada clúster por turnos y haz bootstrap contra el mismo repositorio con una ruta distinta:
kubectl config use-context staging
flux bootstrap github --owner=<user> --repository=fleet-infra \
--branch=main --path=clusters/staging --personal
kubectl config use-context production
flux bootstrap github --owner=<user> --repository=fleet-infra \
--branch=main --path=clusters/production --personal
Cada clúster ahora tiene su propia instalación de Flux y su propia carpeta flux-system en Git. Añadir un tercer clúster más adelante es un comando de bootstrap más con una ruta nueva.
Apunta cada clúster a sus propios overlays
clusters/production/apps.yaml aplica el overlay de producción:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: apps
namespace: flux-system
spec:
interval: 10m
dependsOn:
- name: infrastructure
sourceRef:
kind: GitRepository
name: flux-system
path: ./apps/production
prune: true
wait: true
clusters/staging/apps.yaml es idéntico salvo por path: ./apps/staging. La Kustomization infrastructure apunta a ./infrastructure/<env> del mismo modo, y tiene wait: true para que las aplicaciones solo arranquen cuando el ingress controller, el gestor de certificados y componentes similares estén listos. El campo dependsOn es lo que impone ese orden.
Verifica entre clústeres
Flux no tiene un dashboard central, así que comprueba cada clúster desde su propio contexto:
flux get kustomizations --context staging
flux get kustomizations --context production
Ambos deberían mostrar Ready. Compara lo que Git dice que está desplegado con lo que informa cada clúster usando flux tree y flux get all -A. Para visibilidad de toda la flota, los equipos suelen recopilar las métricas de Prometheus de Flux en Grafana.
Promueve de staging a producción
Como ambos clústeres leen el mismo repositorio, promover es un commit. Un flujo común es:
- Cambia
apps/stagingy deja que Flux lo aplique al clúster de staging. - Prueba y verifica.
- Haz el mismo cambio en
apps/productionen un pull request revisado, o etiqueta una release que siga elGitRepositoryde producción (consulta la guía de overlays).
Alternativa: un clúster de control, muchos clústeres remotos
En lugar de ejecutar Flux en cada clúster, puedes ejecutarlo en un solo lugar y hacer que sus Kustomizations y HelmReleases se apliquen a otros clústeres. Define spec.kubeConfig en el recurso con un Secret que contenga el kubeconfig del clúster remoto:
spec:
kubeConfig:
secretRef:
name: production-kubeconfig
Esto centraliza el control, pero también pone las credenciales de cada clúster en el clúster de control. Eso difiere del modelo habitual de Flux, donde las credenciales nunca salen de cada clúster y un clúster comprometido no puede alcanzar a los demás. Prefiere una instalación de Flux por clúster a menos que tengas una razón clara para centralizar, como clústeres edge ligeros. Si optas por esto, usa workload identity de la nube en lugar de kubeconfigs de larga duración donde tu plataforma lo soporte, y mira el Flux Operator para gestionar flotas a escala.
Buenos hábitos
- Mantén la carpeta
flux-systemde cada clúster fuera de los overlays compartidos. Bootstrap es su dueño. - Usa
dependsOnpara que la infraestructura, los CRD y los controladores se instalen antes que las aplicaciones que los necesitan. - Da a cada clúster su propia clave SOPS (consulta la guía de secretos) para que staging no pueda descifrar los secretos de producción.
- Actualiza Flux un clúster a la vez, empezando por uno que no sea de producción, volviendo a ejecutar
flux bootstrapcon una CLI más nueva.
Guías populares
-
Push vs Pull: cómo entrega Flux en Kubernetes Por qué la entrega basada en pull y dirigida por Git cambia cómo despliegas, proteges y recuperas clústeres. -
Despliega tu primera aplicación con un GitRepository y una Kustomization Apunta Flux a manifiestos en Git usando un recurso Kustomization y observa cómo se sincroniza. -
Controla el comportamiento de sincronización: intervalos, prune, corrección de desviaciones y rollback Decide cuándo Flux aplica los cambios, qué elimina, cómo pausarlo y cómo deshacer un mal despliegue. -
Automatiza las actualizaciones de imágenes con Flux Image Automation Deja que Flux detecte nuevas etiquetas de imágenes de contenedor y las confirme en Git. -
Flux CD vs Argo CD: cómo elegir una herramienta GitOps Compara arquitectura, interfaz, Helm, secretos, multi-tenancy y automatización de imágenes para elegir la herramienta adecuada.