Volver al blog
10 min de lectura

GitOps en producción: ArgoCD vs Flux en 2026 — guía de elección

Con el 64% de adopción y el 81% de equipos reportando mayor fiabilidad, GitOps ya no es opcional. El dilema ahora es saber qué herramienta se adapta a tu contexto, escala y cultura de equipo.

GitOps en producción: ArgoCD vs Flux en 2026 — guía de elección

nubyron · DevOps · GitOps

GitOpsKubernetesDevOps

Abril 2026 · 10 min de lectura

GitOps lleva varios años siendo el buzzword favorito de las charlas de KubeCon, pero en 2026 ha pasado de experimento a estándar de facto en organizaciones que despliegan sobre Kubernetes. La promesa es simple: Git como fuente de verdad única, y el clúster reconciliándose continuamente con ese estado declarado.

El problema no es si adoptar GitOps, sino cuál de los dos grandes proyectos elegir: ArgoCD —el favorito de los equipos que priorizan visibilidad y experiencia de usuario— o Flux v2 —la apuesta de quienes valoran la arquitectura composable y el control fino sobre la reconciliación—. Este post te da los elementos técnicos y contextuales para tomar esa decisión con criterio.

64%
Adopción GitOps en 2025
81%
Reportan mayor fiabilidad tras adoptarlo
3.4×
Reducción de tiempo en rollbacks
2
Proyectos CNCF maduros

¿Qué es GitOps de verdad (más allá del hype)?

GitOps no es simplemente "guardar los manifiestos en Git". El término, acuñado por Weaveworks en 2017, implica un modelo operativo con cuatro principios fundamentales definidos por el OpenGitOps Working Group:

  1. Declarativo: todo el sistema se describe como estado deseado, no como procedimientos.
  2. Versionado e inmutable: el estado deseado se almacena en Git con historial completo.
  3. Pulled automáticamente: el agente en el clúster extrae los cambios; nunca se empuja desde fuera.
  4. Reconciliado continuamente: el agente detecta y corrige desviaciones (drift) de forma continua.

Clave práctica: el modelo pull es lo que diferencia GitOps de un pipeline CI/CD clásico. En CI/CD tradicional, el pipeline empuja al clúster (push). En GitOps, el agente dentro del clúster observa el repositorio y se sincroniza. Esto elimina credenciales de Kubernetes en el CI y reduce drásticamente la superficie de ataque.

El flujo básico en producción funciona así:

# El desarrollador solo hace esto:
git commit -m "feat: actualizar imagen a v2.1.0"
git push origin main

# El agente GitOps (ArgoCD o Flux) detecta el cambio
# compara el estado deseado con el estado actual
# y aplica la diferencia al clúster automáticamente

Nada de kubectl apply manuales, nada de secretos de cluster en el CI, y rollback instantáneo con un simple git revert.


ArgoCD: visibilidad y experiencia como arma principal

// Proyecto CNCF Graduated · Lanzado por Intuit en 2018

ArgoCD nació como respuesta a un problema real en Intuit: cómo gestionar cientos de aplicaciones en Kubernetes manteniendo visibilidad. Su apuesta diferencial es su interfaz web, que convierte la reconciliación GitOps en algo que cualquier miembro del equipo puede entender con un vistazo.

Instalación en minutos

# Crear namespace
kubectl create namespace argocd

# Instalar ArgoCD (manifest oficial)
kubectl apply -n argocd -f \
  https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# Esperar que los pods estén listos
kubectl wait --for=condition=Ready pods --all \
  -n argocd --timeout=120s

# Obtener la contraseña inicial del admin
kubectl -n argocd get secret argocd-initial-admin-secret \
  -o jsonpath="{.data.password}" | base64 -d

# Port-forward para acceder a la UI
kubectl port-forward svc/argocd-server -n argocd 8080:443

Definir tu primera Application

# application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: mi-servicio
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/nubyron/infra-gitops
    targetRevision: HEAD
    path: apps/mi-servicio
  destination:
    server: https://kubernetes.default.svc
    namespace: produccion
  syncPolicy:
    automated:
      prune: true       # elimina recursos huérfanos
      selfHeal: true    # corrige cambios manuales (drift)
    syncOptions:
      - CreateNamespace=true
      - PrunePropagationPolicy=foreground
    retry:
      limit: 5
      backoff:
        duration: 5s
        factor: 2
        maxDuration: 3m

El patrón App-of-Apps

Cuando gestionas decenas de aplicaciones, el patrón App-of-Apps es esencial: una Application raíz que apunta a un directorio de otras Applications. El resultado es un árbol de dependencias gestionado completamente desde Git.

# root-app.yaml — la Application que gestiona todas las demás
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: root-app
  namespace: argocd
spec:
  source:
    repoURL: https://github.com/nubyron/infra-gitops
    path: apps   # directorio con múltiples Application manifests
    targetRevision: HEAD
  destination:
    server: https://kubernetes.default.svc
    namespace: argocd
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

ApplicationSets: escalado dinámico

Para escenarios multi-cluster o multi-entorno, ApplicationSets es el recurso que permite generar Applications dinámicamente a partir de generadores (lista, Git, cluster, matrix):

# applicationset-multienv.yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: mi-servicio-multienv
spec:
  generators:
    - matrix:
        generators:
          - clusters: {}              # itera sobre todos los clusters registrados
          - list:
              elements:
                - env: staging
                - env: production
  template:
    metadata:
      name: 'mi-servicio-{{name}}-{{env}}'
    spec:
      source:
        repoURL: https://github.com/nubyron/infra-gitops
        targetRevision: HEAD
        path: 'envs/{{env}}/mi-servicio'
      destination:
        server: '{{server}}'
        namespace: mi-servicio

ArgoCD · Fortalezas

  • UI web excepcional para visualizar el estado
  • ApplicationSets para multi-cluster dinámico
  • SSO/RBAC integrado listo para producción
  • Health checks personalizados por recurso
  • Soporte nativo Helm, Kustomize, Jsonnet
  • Gran ecosistema de plugins (argocd-image-updater)

ArgoCD · Debilidades

  • Componentes monolíticos (mayor footprint)
  • Todo gestionado via CRDs de ArgoCD (acoplamiento)
  • El servidor de API es un SPOF potencial
  • Curva de aprendizaje de Rego en políticas
  • Actualizaciones de imágenes menos elegantes

Flux v2: composabilidad y control fino sobre la reconciliación

// Proyecto CNCF Graduated · Arquitectura basada en controladores

Flux v2 rompió completamente con su versión anterior y adoptó una arquitectura basada en controladores especializados siguiendo el patrón operator de Kubernetes. No hay un servidor central: cada componente de Flux es un controlador independiente que puede instalarse o no según tus necesidades.

Instalación con flux CLI

# Instalar el CLI de Flux
curl -s https://fluxcd.io/install.sh | sudo bash

# Verificar prerequisitos del clúster
flux check --pre

# Bootstrap con GitHub (crea el repo si no existe)
flux bootstrap github \
  --owner=nubyron \
  --repository=infra-gitops \
  --branch=main \
  --path=./clusters/produccion \
  --personal

# Resultado: Flux instala sus componentes en el clúster
# y comite los manifests de instalación en el repo de Git
# El clúster ahora se gestiona a sí mismo desde Git

Anatomía de Flux v2: los controladores clave

# GitRepository — define la fuente Git a monitorizar
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: infra-gitops
  namespace: flux-system
spec:
  interval: 1m
  url: https://github.com/nubyron/infra-gitops
  ref:
    branch: main
  secretRef:
    name: github-credentials
---
# Kustomization — reconcilia un directorio del repo
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: mi-servicio
  namespace: flux-system
spec:
  interval: 5m
  sourceRef:
    kind: GitRepository
    name: infra-gitops
  path: ./apps/mi-servicio
  prune: true
  wait: true              # espera a que los recursos estén Ready
  timeout: 5m
  healthChecks:
    - apiVersion: apps/v1
      kind: Deployment
      name: mi-servicio
      namespace: produccion

Ventaja clave: dependencias entre Kustomizations

Una de las funcionalidades más potentes de Flux que no tiene equivalente directo en ArgoCD: definir dependencias explícitas entre Kustomizations para garantizar el orden de despliegue:

# La infraestructura debe estar lista antes de desplegar las apps
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: apps
spec:
  dependsOn:
    - name: infrastructure    # espera a que esta Kustomization esté Ready
    - name: cert-manager
  interval: 10m
  path: ./apps
  sourceRef:
    kind: GitRepository
    name: infra-gitops
  prune: true

Actualización automática de imágenes con Image Automation

# Monitorizar nuevas imágenes en el registry
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
  name: mi-servicio
spec:
  image: ghcr.io/nubyron/mi-servicio
  interval: 5m
---
# Política de selección: solo versiones semver estables
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
  name: mi-servicio
spec:
  imageRepositoryRef:
    name: mi-servicio
  policy:
    semver:
      range: '>=1.0.0'
---
# Automation: comitea el cambio de imagen en Git automáticamente
apiVersion: image.toolkit.fluxcd.io/v1beta1
kind: ImageUpdateAutomation
metadata:
  name: flux-system
spec:
  interval: 30m
  sourceRef:
    kind: GitRepository
    name: infra-gitops
  git:
    checkout:
      ref:
        branch: main
    commit:
      author:
        email: fluxbot@nubyron.com
        name: FluxBot
      messageTemplate: 'chore: actualizar {{range .Updated.Images}}{{.}}{{end}}'
    push:
      branch: main
  update:
    strategy: Setters

Flux v2 · Fortalezas

  • Arquitectura modular (solo instalas lo que usas)
  • Dependencias entre Kustomizations nativas
  • Sin servidor central: menor SPOF
  • Image automation elegante y nativa
  • Multi-tenancy con namespace isolation real
  • Bootstrap GitOps del propio Flux desde Git

Flux v2 · Debilidades

  • Sin UI web oficial (depende de Weave GitOps)
  • Curva de aprendizaje más alta
  • Debugging más complejo sin UI
  • Menos plugins de terceros disponibles
  • Documentación más dispersa

Comparativa detallada: criterios que importan en producción

CriterioArgoCDFlux v2
Interfaz webExcelente nativaWeave GitOps (externa)
ArquitecturaServidor centralizado + controladoresSolo controladores (sin servidor)
Multi-tenancyProjects + RBAC AppProjectNamespace isolation nativa con ServiceAccounts
Multi-clusterApplicationSets muy potenteCluster API integration
Soporte HelmIntegración Helm nativaHelmRelease con control fino de versiones
Soporte KustomizeNativoPrimera clase
Image automationPlugin argocd-image-updaterNativa con ImagePolicy
Dependencias entre appsSync waves (limitado)dependsOn explícito
Drift detectionExcelente + visualBueno (reconciliación continua)
Footprint de recursos~150–300 MB RAM total~60–120 MB RAM total
RBAC/SSOIntegrado (OIDC, LDAP, GitHub)Delega a Kubernetes RBAC
NotificacionesPlugin notificationsnotification-controller nativo
Madurez CNCFGraduatedGraduated
Velocidad de bootstrapManual inicial + GitOps tras setup100% GitOps desde el día 0

¿Cuál elegir? La guía de decisión

No hay una respuesta universal. El criterio de elección depende de tres factores: el perfil de tu equipo, la complejidad de tu entorno, y la importancia que le das a la experiencia operativa del día a día.

Elige ArgoCD si…
  • Tu equipo necesita visibilidad visual del estado
  • Tienes perfiles menos técnicos que deben operar el clúster
  • Gestionas muchas apps en múltiples clusters (ApplicationSets)
  • Necesitas SSO/RBAC sin configuración extra
  • Tu organización valora la adopción rápida
  • Usas herramientas heterogéneas (Helm + Kustomize + Jsonnet)
Elige Flux v2 si…
  • Tu equipo es sólido técnicamente y prefiere CLI
  • Necesitas multi-tenancy con aislamiento fuerte
  • Quieres el menor footprint posible
  • Las dependencias entre componentes son complejas
  • Quieres que el propio Flux se gestione desde Git desde el día 0
  • La image automation es un requisito core

El patrón híbrido existe: algunas organizaciones usan Flux para gestionar la infraestructura (cert-manager, ingress, monitoring) y ArgoCD para las aplicaciones de negocio, aprovechando la UI de ArgoCD donde más valor aporta. No es lo más común, pero funciona.

Rollback: la operación que más importa en producción

Con ArgoCD:

# Ver el historial de sync
argocd app history mi-servicio

# Rollback a un revision anterior (desde UI o CLI)
argocd app rollback mi-servicio 3

# O el rollback gitops puro: revert en Git
git revert HEAD --no-edit
git push origin main
# ArgoCD detecta el cambio y reconcilia automáticamente

Con Flux:

# Ver el estado de reconciliación
flux get kustomizations --watch

# Suspender la reconciliación momentáneamente
flux suspend kustomization mi-servicio

# El rollback GitOps: revert en Git
git revert HEAD --no-edit
git push origin main

# Reanudar la reconciliación
flux resume kustomization mi-servicio

# Forzar reconciliación inmediata
flux reconcile kustomization mi-servicio --with-source

Trampa común: en ambas herramientas, activar prune: true sin entenderlo bien puede eliminar recursos que no deberían eliminarse. Actívalo con cuidado en producción y testéalo exhaustivamente en staging primero.


Conclusión accionable

ArgoCD y Flux son ambos excelentes. La diferencia real no está en las capacidades técnicas —están a la par en lo esencial— sino en el modelo mental que adopta tu equipo y en la experiencia que quieres ofrecer a quien opera la plataforma.

Si tuviéramos que resumirlo: ArgoCD para equipos que operan, Flux para equipos que construyen plataformas. Y en cualquier caso, ambos son infinitamente mejores que seguir haciendo kubectl apply a mano.

  1. 01Evalúa el perfil de tu equipo: ¿necesitan UI o están cómodos con CLI y CRDs? Esa respuesta decide el 70% de la elección.
  2. 02Instala ambos en un clúster de prueba con kind y despliega la misma aplicación con cada uno. El feeling operativo es insustituible.
  3. 03Define tu estructura de repositorios antes de instalar nada. Mono-repo vs multi-repo es una decisión de arquitectura, no de herramienta.
  4. 04Activa selfHeal/prune (ArgoCD) o prune (Flux) solo cuando entiendas completamente qué recursos gestiona cada Application/Kustomization.
  5. 05Empieza con un entorno no crítico, mide los tiempos de reconciliación y define tus SLOs de sincronización antes de ir a producción.

N

nubyron

DevOps · Cloud · DevSecOps · FinOps

#GitOps#Kubernetes#DevOps