Argo CD Argo CD

Controla el comportamiento de sincronización: auto-sync, prune, self-heal y rollback

Decide cuándo Argo CD aplica los cambios, qué elimina y cómo deshacer un mal despliegue.

12 min Intermedio

Los valores predeterminados de Argo CD son conservadores: detecta diferencias pero no cambia tu clúster por sí solo. Cada comportamiento que lo vuelve totalmente automático es una activación explícita, lo que te permite elegir distintos niveles de automatización por entorno. Esta guía recorre cada interruptor usando la aplicación webapp-dev de la guía anterior.

Sincronización manual vs automatizada

Una Application sin un bloque syncPolicy.automated es manual. Argo CD compara Git con el clúster y marca la aplicación como OutOfSync cuando difieren, pero no se aplica nada hasta que alguien hace clic en Sync en la interfaz o ejecuta argocd app sync.

Muchos equipos usan la sincronización automatizada para los entornos de desarrollo y pruebas, y mantienen producción en manual, de modo que una persona apruebe cada despliegue en producción hasta que el equipo confíe en el pipeline.

Activa la sincronización automatizada

Agrega un bloque automated al syncPolicy de la aplicación:

spec:
  syncPolicy:
    automated: {}

Con esto, cualquier commit nuevo que cambie el estado deseado se aplica sin hacer clic. Dos detalles sobre los tiempos:

  • Argo CD detecta los commits nuevos consultando el repositorio, cada tres minutos por defecto. Esto es independiente de la política de sincronización. La política solo decide si una diferencia detectada se aplica o no.
  • Para reaccionar de inmediato, configura un webhook desde tu host de Git hacia el endpoint /api/webhook de Argo CD, o pulsa Refresh en la interfaz mientras pruebas.

Agrega pruning

De forma predeterminada, la sincronización automatizada crea y actualiza recursos pero no elimina nada. Si renombras o eliminas un manifiesto en Git, el objeto antiguo permanece en el clúster y la aplicación aparece como OutOfSync por el sobrante. Activa la eliminación:

spec:
  syncPolicy:
    automated:
      prune: true

Para probarlo, renombra el Deployment en dev/deployment.yaml de webapp a webapp-v2 y haz commit. Argo CD crea el nuevo Deployment y elimina el anterior. En una sincronización manual, puedes hacer prune una vez con argocd app sync webapp-dev --prune, o marcar Prune en el diálogo de sincronización. El pruning elimina objetos reales, así que actívalo de forma deliberada y ten cuidado con los recursos que guardan estado.

Agrega self-heal

La sincronización automatizada reacciona a los cambios en Git. Self-heal también reacciona a los cambios en el clúster:

spec:
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Pruébalo haciendo un cambio manual que Git no conoce:

kubectl scale deployment webapp-v2 -n webapp --replicas=5
kubectl get pods -n webapp -w

Arrancan Pods adicionales y luego Argo CD revierte el Deployment a las dos réplicas declaradas en Git. Ese es el objetivo: que Git siga siendo la única fuente de verdad. Si tu equipo no está listo para que los cambios manuales se reviertan automáticamente, deja selfHeal desactivado. Argo CD seguirá mostrando la aplicación como OutOfSync, así que la desviación sigue siendo visible. Agrega notificaciones si quieres que te avisen.

Revierte de forma segura

Para volver a un estado desplegado anterior, abre la vista History and Rollback de la aplicación, elige una revisión previa y haz rollback. Los equivalentes en la CLI son:

argocd app history webapp-dev
argocd app rollback webapp-dev <ID>

El rollback requiere que la sincronización automatizada esté desactivada. De lo contrario, Argo CD volvería a sincronizar de inmediato la aplicación con el commit más reciente y deshacería el rollback. Desactívala primero con argocd app set webapp-dev --sync-policy none. Después de un rollback, la aplicación queda OutOfSync, porque Git va por delante de lo que se está ejecutando. Trata el rollback como una palanca de emergencia, no como la solución. La solución duradera es hacer git revert del commit defectuoso, hacer push y luego reactivar la sincronización automatizada para que Git y el clúster vuelvan a coincidir.

Guías populares