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.
Los valores predeterminados de Flux difieren de las herramientas que esperan una sincronización manual. Una Kustomization de Flux se aplica según un calendario y corrige las desviaciones cada vez que se ejecuta. Lo que controlas es con qué frecuencia, qué se elimina, cuándo esperar a la salud y cuándo pausar. Esta guía recorre cada interruptor usando la Kustomization webapp de la guía anterior.
Intervalos: con qué frecuencia mira y aplica Flux
Dos intervalos controlan el tiempo, y son independientes:
- El intervalo del
GitRepositorydecide con qué frecuencia se consulta Git en busca de commits nuevos. - El
intervalde la Kustomization decide con qué frecuencia se vuelven a aplicar los manifiestos y se corrigen las desviaciones, aunque Git no haya cambiado.
spec:
interval: 10m
retryInterval: 2m
retryInterval es cuánto esperar antes de reintentar tras una reconciliación fallida. Para reaccionar de inmediato en lugar de esperar, desencadena una reconciliación a mano mientras pruebas:
flux reconcile kustomization webapp --with-source
--with-source actualiza primero el origen de Git y luego aplica. Para producción, configura un webhook para que los push a Git desencadenen una reconciliación sin consultas frecuentes (consulta la guía de notificaciones).
Añade pruning
Por defecto, Flux crea y actualiza recursos pero no elimina nada. Si renombras o eliminas un manifiesto en Git, el objeto antiguo permanece en el clúster. Activa la eliminación:
spec:
prune: true
Para probarlo, renombra el Deployment en apps/webapp/deployment.yaml de webapp a webapp-v2, haz commit y reconcilia. Flux crea el nuevo Deployment y elimina el anterior. Flux rastrea los objetos que aplicó mediante un inventario, así que solo elimina lo que él mismo creó. El pruning elimina objetos reales, así que actívalo de forma deliberada y ten cuidado con los recursos que guardan estado.
Para proteger un objeto del pruning, anótalo en el manifiesto:
metadata:
annotations:
kustomize.toolkit.fluxcd.io/prune: disabled
Corrección de desviaciones
Cada vez que la Kustomization se reconcilia, vuelve a aplicar el estado deseado de Git, así que los cambios manuales se revierten. Pruébalo:
kubectl scale deployment webapp-v2 -n webapp --replicas=5
flux reconcile kustomization webapp
kubectl get pods -n webapp
Flux revierte el Deployment a las dos réplicas declaradas en Git. No hay un interruptor aparte de “self-heal” que activar. Ese comportamiento es el predeterminado, y es lo que mantiene a Git como la única fuente de verdad.
Si necesitas hacer un cambio temporal a mano, por ejemplo mientras depuras, pausa Flux primero (siguiente sección). Si un objeto debe gestionarse fuera de Flux, anótalo en Git:
metadata:
annotations:
kustomize.toolkit.fluxcd.io/reconcile: disabled
Las versiones recientes de Flux (2.9) también añaden reglas de ignorado de campos en server-side apply, que te permiten decirle a Flux que deje en paz campos concretos, como un número de réplicas gestionado por un autoscaler. Consulta la referencia de Kustomization para la sintaxis exacta de tu versión.
Espera a la salud y ordena tus despliegues
Por defecto, Flux informa de éxito una vez que el API server acepta los manifiestos. Definir wait: true hace que espere hasta que los recursos estén listos, y timeout acota la espera:
spec:
wait: true
timeout: 2m
Usa dependsOn para que una Kustomization espere a otra, por ejemplo para instalar un ingress controller antes que las aplicaciones que lo necesitan:
spec:
dependsOn:
- name: infrastructure
La dependencia debe estar Ready antes de que esta Kustomization empiece a reconciliarse.
Suspende y reanuda
Para pausar la reconciliación sin eliminar nada:
flux suspend kustomization webapp
# haz cambios manuales, depura, luego:
flux resume kustomization webapp
Mientras está suspendida, Flux ignora el objeto y los cambios manuales permanecen. Reanudar desencadena una reconciliación que devuelve el clúster a lo que dice Git, así que no olvides reanudar. Suspender es el equivalente en Flux de desactivar la automatización de un entorno.
Revierte de forma segura
Flux no tiene un comando rollback para Kustomizations, porque Git es el historial. Para deshacer un cambio defectuoso:
git revert <bad-commit>
git push
flux reconcile kustomization webapp --with-source
Flux hace converger el clúster al estado revertido, y Git conserva un registro fiel de lo ocurrido. Para emergencias en las que necesitas que el clúster deje de moverse primero, suspende la Kustomization, arregla las cosas, haz push del revert y luego reanuda.
Los Helm releases son distintos: el helm-controller puede revertir automáticamente una actualización fallida, algo que cubre la guía de Helm.
Mantener producción deliberada
Como la automatización está activada por defecto, el control de producción ocurre en Git y no en un botón de “sync manual”. Patrones comunes:
- Protege la rama de producción y exige la aprobación de un pull request.
- Apunta el
GitRepositoryde producción a una etiqueta o a un rango semver (ref.tagoref.semver) para que producción solo cambie cuando publicas una release. - Usa
flux suspenddurante los congelamientos de cambios.
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. -
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. -
Configura multiclúster con Flux Gestiona varios clústeres desde un solo repositorio, con infraestructura compartida y diferencias por clúster. -
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.