Flux CD Flux CD

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.

12 min Intermedio

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 GitRepository decide con qué frecuencia se consulta Git en busca de commits nuevos.
  • El interval de 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 GitRepository de producción a una etiqueta o a un rango semver (ref.tag o ref.semver) para que producción solo cambie cuando publicas una release.
  • Usa flux suspend durante los congelamientos de cambios.

Guías populares