ArgoCD

Entrega continua GitOps para Kubernetes - sincronizar apps desde Git, auto-recuperacion, despliegues declarativos

TL;DR

Qué: Herramienta de entrega continua GitOps declarativa para Kubernetes.

Por qué: Git como única fuente de verdad, sincronización automática, panel visual, soporte multi-cluster.

Quick Start

Instalar en Kubernetes:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# Esperar pods
kubectl wait --for=condition=Ready pods --all -n argocd --timeout=300s

Instalar CLI:

# macOS
brew install argocd

# Linux
curl -sSL -o argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x argocd && sudo mv argocd /usr/local/bin/

Acceder a la UI:

# Reenvío de puerto
kubectl port-forward svc/argocd-server -n argocd 8080:443

# Obtener contraseña inicial
argocd admin initial-password -n argocd

# Iniciar sesión (usuario: admin)
argocd login localhost:8080

Cheatsheet

ComandoDescripción
argocd app listListar aplicaciones
argocd app createCrear aplicación
argocd app sync nameSincronizar aplicación
argocd app get nameObtener detalles de la app
argocd app delete nameEliminar aplicación
argocd cluster add ctxAñadir cluster
argocd repo add urlAñadir repo Git

Gotchas

Application manifest

# application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/user/repo.git
    targetRevision: HEAD
    path: k8s
  destination:
    server: https://kubernetes.default.svc
    namespace: my-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

Create app via CLI

argocd app create my-app \
  --repo https://github.com/user/repo.git \
  --path k8s \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace my-app \
  --sync-policy automated

Helm application

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: nginx
  namespace: argocd
spec:
  source:
    repoURL: https://charts.bitnami.com/bitnami
    chart: nginx
    targetRevision: 15.0.0
    helm:
      values: |
        replicaCount: 2
        service:
          type: LoadBalancer
  destination:
    server: https://kubernetes.default.svc
    namespace: nginx

Kustomize application

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://github.com/user/repo.git
    path: overlays/production
    targetRevision: main
    kustomize:
      images:
        - myapp=myrepo/myapp:v2
  destination:
    server: https://kubernetes.default.svc
    namespace: production

Sync operations

# Sincronización manual
argocd app sync my-app

# Sync con prune
argocd app sync my-app --prune

# Force sync (reemplazar)
argocd app sync my-app --force

# Rollback
argocd app rollback my-app

Next Steps