🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

GitOps con ArgoCD para Despliegues Continuos

Actualizado el 19 de octubre de 2025

La Revolución Silenciosa: GitOps con ArgoCD para Despliegues Continuos

En el ecosistema actual de infraestructura cloud-native, la velocidad y la estabilidad son dos caras de la misma moneda. Mientras que las metodologías tradicionales de CI/CD han evolucionado para automatizar builds y tests, el paso final —el despliegue en producción— sigue siendo un punto crítico. Aquí es donde entra GitOps, un modelo operativo que toma Git como la única fuente de verdad para los estados declarativos de la infraestructura y las aplicaciones.

ArgoCD se ha consolidado como la navaja suiza de GitOps en Kubernetes. No es solo una herramienta de despliegue; es un motor de reconciliación continua que garantiza que el estado real de tu clúster coincida siempre con el estado deseado definido en tu repositorio Git.

Este artículo es una inmersión técnica, diseñada para SysAdmins y DevOps que quieren entender cómo implementar despliegues continuos con ArgoCD, eliminando el "click miedo" y abrazando la automatización total.

¿Por qué GitOps y no un CI/CD tradicional?

La diferencia fundamental radica en el control. En un pipeline CI/CD clásico (Jenkins, GitLab CI), el pipeline "empuja" los cambios al clúster. Si el pipeline falla a mitad del despliegue, o si alguien modifica un recurso directamente en el clúster (kubectl edit), el estado real diverge del estado deseado. No hay vuelta atrás automática.

GitOps invierte la lógica:

  1. Declarativo: Todo el estado de tu clúster (Deployments, Services, ConfigMaps, CRDs) está definido en archivos YAML dentro de un repositorio Git.
  2. Inmutable: No se hacen cambios manuales en el clúster. Cualquier modificación pasa por un Pull Request (PR) en Git.
  3. Reconciliación Continua: Un operador (ArgoCD) se ejecuta dentro del clúster, monitorea el repositorio Git y se asegura de que el estado actual coincida con el deseado. Si alguien borra un Pod, ArgoCD lo recrea. Si alguien modifica un Deployment a mano, ArgoCD lo revierte.

[INFO] Este modelo elimina el "drift" (desviación) de configuración, el mayor dolor de cabeza en entornos Kubernetes multi-cluster.

ArgoCD: El Corazón del Despliegue Continuo

ArgoCD no es solo un "watchdog". Es un sistema completo de entrega continua que integra:

  • Sincronización automática o manual.
  • Previews de cambios (Diff) antes de aplicar.
  • Rollback instantáneo a cualquier commit.
  • Gestión de múltiples clústers desde una sola UI/CLI.
  • Soporte para Kustomize, Helm, Jsonnet y YAML plano.

Arquitectura de ArgoCD

ArgoCD se despliega como un conjunto de Pods en tu clúster de Kubernetes. Los componentes principales son:

  • API Server: Expone la API REST/gRPC. Interactúa con la UI, la CLI y los Webhooks.
  • Repository Server: Clona, cachea y renderiza los manifiestos de los repositorios Git.
  • Application Controller: El cerebro. Monitorea el estado de las aplicaciones y ejecuta la reconciliación.

Instalación Rápida de ArgoCD

Para empezar, necesitas un clúster Kubernetes. La instalación es trivial:

# Crear el namespace
kubectl create namespace argocd

# Aplicar el manifiesto de instalación
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

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

Para acceder a la UI, puedes exponer el servicio o usar port-forward:

kubectl port-forward svc/argocd-server -n argocd 8080:443

La contraseña inicial del admin se obtiene así:

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

[WARNING] Nunca expongas ArgoCD directamente a Internet sin HTTPS y sin configurar un SSO (OIDC/LDAP). La seguridad del repositorio Git es la base de GitOps.

Definiendo tu Primera Aplicación GitOps

Una vez instalado, el concepto fundamental es la Application. Una Application en ArgoCD define:

  • Source (Origen): La URL del repositorio Git, la rama, la ruta del manifiesto.
  • Destination (Destino): El clúster (API Server URL) y el namespace donde se desplegará.
  • Sync Policy: Cómo y cuándo sincronizar.

Ejemplo: Despliegue de una App con Helm

Imagina que tienes un chart de Helm para una aplicación Node.js en https://github.com/tu-org/mi-app.git.

Puedes definir la aplicación vía YAML (Declarativo, por supuesto):

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: mi-app-produccion
  namespace: argocd
spec:
  project: default
  source:
    repoURL: 'https://github.com/tu-org/mi-app.git'
    path: charts/mi-app
    targetRevision: main
    helm:
      valueFiles:
        - values-prod.yaml
  destination:
    server: 'https://kubernetes.default.svc' # El mismo clúster
    namespace: produccion
  syncPolicy:
    automated:
      prune: true      # Elimina recursos que ya no están en Git
      selfHeal: true   # Revierte cambios manuales en el clúster
    syncOptions:
      - CreateNamespace=true  # Crea el namespace si no existe

Aplica este manifiesto:

kubectl apply -f mi-app-produccion.yaml

ArgoCD detectará el nuevo recurso Application y empezará a sincronizar. Verás en la UI el estado "OutOfSync" que pasará a "Synced".

El Flujo de Despliegue Continuo

Aquí está la magia. El desarrollador sigue un flujo clásico:

  1. Modifica el código.
  2. Crea un Pull Request.
  3. El pipeline de CI (GitHub Actions, GitLab CI) ejecuta tests, construye la imagen Docker y la sube a un registro.
  4. El pipeline actualiza el archivo values-prod.yaml en el repositorio Git con la nueva tag de la imagen (image: tu-app:v1.2.3).
  5. El PR se mergea a main.
  6. ArgoCD detecta el cambio en Git (vía webhook o polling cada 3 minutos por defecto).
  7. ArgoCD compara el estado deseado (la nueva tag) con el estado real (la vieja tag).
  8. ArgoCD ejecuta helm upgrade automáticamente, desplegando la nueva versión.

[TIP] Para acelerar el paso 6, configura un Webhook desde GitHub/GitLab a ArgoCD. Así el despliegue es casi instantáneo tras el merge.

Estrategias Avanzadas de Despliegue con ArgoCD

ArgoCD no solo hace "apply". Puedes implementar estrategias de despliegue avanzadas como Blue/Green o Canary utilizando herramientas como Argo Rollouts.

Blue/Green con Argo Rollouts

Argo Rollouts es un controlador que se integra con ArgoCD para proporcionar estrategias de despliegue progresivo.

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: mi-app-rollout
spec:
  replicas: 5
  strategy:
    canary:
      steps:
        - setWeight: 20
        - pause: {duration: 60}
        - setWeight: 40
        - pause: {duration: 60}
        - setWeight: 60
        - pause: {duration: 60}
        - setWeight: 80
        - pause: {duration: 60}
  template:
    metadata:
      labels:
        app: mi-app
    spec:
      containers:
        - name: mi-app
          image: tu-app:latest

Este Rollout se define como un recurso más en tu repositorio Git. ArgoCD lo gestiona igual que un Deployment. Durante un despliegue, Argo Rollouts inyecta un Service adicional (canary) y va moviendo el peso del tráfico según los pasos definidos.

[INFO] Argo Rollouts reemplaza el recurso Deployment nativo de Kubernetes. Si no necesitas canary o blue/green, el Deployment estándar es suficiente y más simple.

Gestión de Múltiples Clústers y Entornos

Una de las mayores ventajas de ArgoCD es la gestión de múltiples clústers. Puedes tener un clúster de staging y otro de producción, y desde una sola UI de ArgoCD gestionar ambos.

Registro de Clústers

Para agregar un clúster externo, necesitas la credencial (kubeconfig):

argocd cluster add contexto-del-cluster --name produccion-aws

Luego, en la definición de la Application, cambias el destination.server por la URL del clúster registrado.

Patrón de Repositorios

Para manejar múltiples entornos, se suele usar una estructura de repositorio como esta:

mi-app/
├── base/                    # Manifiestos base (Deployment, Service)
│   ├── kustomization.yaml
│   └── deployment.yaml
├── overlays/
│   ├── staging/
│   │   ├── kustomization.yaml
│   │   └── values.yaml
│   └── produccion/
│       ├── kustomization.yaml
│       └── values.yaml

Cada entorno tiene su propia Application de ArgoCD apuntando a la misma raíz pero con un path diferente (overlays/staging, overlays/produccion).

Seguridad y Buenas Prácticas

GitOps no es solo tecnología; es una disciplina. Aquí hay reglas de oro:

  1. Principio de Mínimo Privilegio: El Service Account de ArgoCD debe tener permisos solo para los namespaces que gestiona. Usa RBAC de Kubernetes.
  2. Firma de Commits: Todos los cambios en el repositorio Git deben estar firmados (GPG). Así sabes que el cambio viene de una fuente autorizada.
  3. Protección de Ramas: La rama main o produccion debe estar protegida. Solo se mergea tras revisión.
  4. Secretos: Nunca pongas secretos en Git plano. Usa Sealed Secrets (Bitnami) o External Secrets Operator para sincronizar secretos desde Vault/AWS Secrets Manager.
  5. Monitoreo: ArgoCD expone métricas de Prometheus. Monitorea el estado de sincronización y los errores de reconciliación.

Conclusión: GitOps como Estándar de Industria

GitOps con ArgoCD no es una moda pasajera. Resuelve problemas reales de consistencia, auditabilidad y velocidad en entornos Kubernetes. Al centralizar toda la configuración en Git, conviertes tu infraestructura en un activo versionado, repetible y revisable.

Para un SysAdmin, adoptar GitOps significa pasar de "apagar incendios" a "definir políticas". El clúster se vuelve autogestionado en gran medida, y los despliegues continuos dejan de ser eventos estresantes para convertirse en procesos predecibles.

[TIP FINAL] Empieza con una aplicación no crítica. Migra su Deployment a un repositorio Git, configura ArgoCD y observa cómo se sincroniza. Una vez que veas la magia de la reconciliación automática, querrás migrar todo tu ecosistema.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel