Argo CD ist ein Werkzeug für kontinuierliche Auslieferung nach dem GitOps-Prinzip auf Kubernetes. Es läuft als Controller im Cluster, beobachtet ein oder mehrere Git-Repositories und sorgt dafür, dass der tatsächliche Zustand des Clusters dem dort beschriebenen entspricht. Das Projekt gehört zur Cloud Native Computing Foundation und hat den Status Graduated.

Aufbau

  • Application: eine eigene Kubernetes-Ressource, die beschreibt, welches Repository, welcher Pfad und welches Zielcluster plus Namespace zusammengehören.
  • Repo Server: rendert die Manifeste. Dafür nutzt er Helm, Kustomize, Jsonnet oder reines YAML.
  • Application Controller: vergleicht Soll und Ist und korrigiert Abweichungen.
  • API-Server und Oberfläche: Web-UI, CLI (argocd) und REST-API für Bedienung und Automatisierung.

Sync-Status und automatische Korrektur

Argo CD zeigt pro Anwendung zwei Bewertungen: Sync Status (entspricht das Cluster dem Repository?) und Health Status (laufen die Ressourcen?). Ist eine Abweichung erkannt, kann man sie in der Oberfläche sehen und manuell synchronisieren – oder den Auto-Sync aktivieren, der selbstständig korrigiert. Wichtige Begleitoptionen:

  • Prune: Ressourcen, die im Repository entfernt wurden, werden auch im Cluster gelöscht.
  • Self-Heal: manuelle Änderungen im Cluster werden zurückgesetzt.
  • Sync Windows: Zeitfenster, in denen synchronisiert werden darf – sehr nützlich, um Produktionsänderungen außerhalb der Bereitschaft zu verhindern.

Sync Waves und Hooks

Reihenfolge lässt sich steuern: Die Annotation argocd.argoproj.io/sync-wave ordnet Ressourcen in Wellen ein – kleinere Zahlen zuerst. Typische Nutzung: Namespaces und CustomResourceDefinitions in Welle -1, Datenbankmigrationen in Welle 0, Anwendungen danach. Zusätzlich gibt es Hooks für Zeitpunkte im Ablauf:

apiVersion: batch/v1
kind: Job
metadata:
  name: db-migrate
  annotations:
    argocd.argoproj.io/hook: PreSync      # PreSync, Sync, PostSync, SyncFail
    argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: migrate
          image: registry.example.org/team/app:1.4.0
          command: ["./migrate", "up"]

Ein PreSync-Hook führt die Migration aus, bevor die neuen Pods ausgerollt werden; schlägt er fehl, bricht die Synchronisation ab – die alte Version läuft weiter. Das ist ein sehr wirksames Muster für risikoarme Datenbankänderungen.

App-of-Apps statt Einzelpflege

Bei vielen Anwendungen legt man eine übergeordnete Application an, die auf ein Verzeichnis mit weiteren Application-Manifesten zeigt. Damit verwaltet eine einzige Ressource den gesamten Bestand – ein neues Verzeichnis im Repository genügt, um eine neue Anwendung zu registrieren. Ebenso üblich ist ein Satz von ApplicationSets, die Anwendungen aus einer Vorlage für mehrere Cluster oder Umgebungen erzeugen.

Verwandte Grundlagen: GitOps, Flux, Helm, Kustomize.