GitOps

KAPITEL 10 · ENTERPRISE IT

GitOps

Die Evolution von DevOps: Nutzen Sie Git als Single Source of Truth für Ihre gesamte Infrastruktur und Anwendungsbereitstellung. Automatisieren Sie Deployments, erhöhen Sie die Sicherheit und verbessern Sie die Zusammenarbeit im Team.

Git as Truth Automated Sync Audit Trail Fast Recovery

Inhaltsverzeichnis

Schnellübersicht

Auf dieser Seite lernen Sie alles über GitOps im Enterprise-Umfeld:

  • Definition: Was ist GitOps und wie unterscheidet es sich von DevOps?
  • Die 4 Prinzipien: Declaration, Versioning, Approval, Software Agents
  • Workflow: Vom Code-Commit zur automatischen Deployment
  • Tools: ArgoCD vs. Flux – Der große Vergleich
  • Vorteile: Warum Unternehmen auf GitOps umsteigen
  • Best Practices: Struktur, Security, Monitoring und Kultur
  • FAQ: Häufige Fragen und Antworten

1. Was ist GitOps?

Definition

GitOps ist ein Betriebsmodell, das DevOps-Best-Practices (wie Continuous Integration, Continuous Delivery und Infrastructure as Code) mit Git als zentrale Quelle der Wahrheit kombiniert.

Im Kern bedeutet GitOps: "If it's not in Git, it doesn't exist." Jede Änderung an der Infrastruktur oder den Anwendungen wird als Pull Request in ein Git-Repository eingebracht. Ein automatisierter Agent (z.B. ArgoCD oder Flux) überwacht dieses Repository und synchronisiert den Ist-Zustand der Cluster mit dem Soll-Zustand im Git.

Der fundamentale Unterschied zu traditionellem DevOps: Bei DevOps "pushen" CI/CD-Pipelines Änderungen in die Produktion. Bei GitOps "pullt" ein Operator im Cluster die Änderungen aus Git. Dies erhöht die Sicherheit, da keine externen Tools Schreibzugriff auf die Produktionscluster benötigen.

GitOps vs. DevOps

GitOps ist kein Ersatz für DevOps, sondern eine konkrete Implementierung von DevOps-Prinzipien für Kubernetes und Cloud-native Umgebungen.

  • DevOps: Eine Kultur und Philosophie der Zusammenarbeit.
  • GitOps: Ein technischer Framework, der Git als zentrales Element nutzt, um diese Philosophie umzusetzen.

2. Die 4 Prinzipien von GitOps

GitOps basiert auf vier fundamentalen Prinzipien, die von Weaveworks definiert wurden:

Declarative

Das gewünschte System (Infrastruktur, Apps, Config) wird deklarativ in Git beschrieben (z.B. via YAML/Kubernetes Manifests). Das System sorgt automatisch dafür, dass der Ist-Zustand diesem Soll-Zustand entspricht.

Versioned & Immutable

Der gewünschte Zustand wird in Git versioniert. Jeder Commit ist ein unveränderlicher Snapshot. Dies ermöglicht einfaches Rollback, Audit-Trails und Reproduzierbarkeit jeder Umgebung.

Automated Approved

Änderungen werden über standardisierte Prozesse (Pull Requests, Code Reviews) genehmigt. Sobald ein Merge erfolgt, wird die Änderung automatisch angewendet. Keine manuellen Eingriffe in die Produktion.

Software Agents

Automatisierte Software-Agenten (wie ArgoCD oder Flux) überwachen kontinuierlich das Git-Repository und die Cluster. Bei Drift (Abweichung) synchronisieren sie den Zustand automatisch zurück zum Git-Standard.

3. Der GitOps Workflow

So funktioniert der typische Bereitstellungsprozess in einer GitOps-Umgebung:

Vom Code zur Produktion

1. Developer Commit

Entwickler ändert Code oder Config (YAML) und pusht zu Git.

2. Pull Request

Code Review und Approval durch Team-Mitglieder im Git-System.

3. Merge to Main

Änderung wird in den Haupt-Branch gemergt. Git ist nun die neue Wahrheit.

4. Auto-Sync

GitOps-Agent erkennt Änderung und deployt automatisch ins Cluster.

Key Benefit: Self-Healing

Wenn jemand manuell etwas im Cluster ändert (was er nicht sollte), erkennt der GitOps-Agent den "Drift" (die Abweichung vom Git-Zustand) und setzt die Änderung automatisch zurück. Das System heilt sich selbst.

4. Die führenden GitOps Tools

Zwei Open-Source-Projekte dominieren den GitOps-Markt: ArgoCD und Flux.

ArgoCD

Ein graduierter CNCF-Projekt, das speziell für Kubernetes entwickelt wurde. Bietet eine mächtige Web-UI und unterstützt komplexe Deployment-Strategien.

  • Native Kubernetes CRDs
  • Exzellente Web-UI zur Visualisierung
  • Unterstützt Blue/Green & Canary
  • Multi-Cluster Management
  • SSO Integration (OIDC, SAML)
Best für: Teams, die eine visuelle Oberfläche und komplexe Deployment-Strategien benötigen.

Flux (v2)

Ebenfalls ein CNCF-Projekt, bekannt für seine Modularität und "GitOps Toolkit". Flux ist sehr leichtgewichtig und stark CLI-getrieben.

  • Highly modular (GitOps Toolkit)
  • Sehr leichtgewichtig & ressourcenschonend
  • Starke CLI-Unterstützung
  • Image Update Automation built-in
  • Agnostisch (nicht nur K8s)
Best für: Puristen, die "Everything as Code" leben und wenig UI-Overhead wollen.

5. Vor- und Nachteile

Kriterium GitOps Traditionelles CI/CD (Push)
Sicherheit Hoch (Kein Cluster-Zugriff für CI) Mittel (CI hat Admin-Rechte)
Audit Trail Perfekt (Git History) Oft lückenhaft
Rollback Sekunden (Git Revert) Minuten/Stunden (Neuer Build)
Lernkurve Steil (Git + K8s tiefes Wissen) Flacher (Bekannte Tools)
Self-Healing Ja (Automatischer Sync) Nein (Manuell)
Tooling Spezialisiert (Argo/Flux) Vielfältig (Jenkins, GitLab, etc.)

6. Enterprise Best Practices

Repo-Struktur

  • Trennen Sie App-Code von Infra-Code
  • Nutzen Sie Monorepos oder Polyrepos konsistent
  • Verwenden Sie Kustomize oder Helm für Templates
  • Halten Sie Secrets aus dem Repo raus (Sealed Secrets, Vault)

Security & Access

  • Branch Protection Rules aktivieren
  • Mandatory Code Reviews für Prod-Branches
  • Signierte Commits verwenden
  • Least Privilege für Service Accounts im Cluster

Monitoring & Alerts

  • Überwachen Sie "Sync Status" und "Drift"
  • Alerting bei fehlgeschlagenen Syncs
  • Integrieren Sie GitOps-Metriken in Prometheus/Grafana
  • Tracken Sie Lead Time for Changes

Kultur & Training

  • Schulen Sie Teams in Git-Workflows
  • Fördern Sie "You build it, you run it"
  • Starten Sie klein (Non-Prod) vor Prod-Einsatz
  • Dokumentieren Sie Disaster Recovery Pläne

7. FAQ – Häufige Fragen

Häufige Fragen zu GitOps

Ist GitOps nur für Kubernetes geeignet?

Nein, aber es ist dort am stärksten verbreitet. GitOps kann theoretisch für jede Infrastruktur angewendet werden, die sich deklarativ beschreiben lässt (z.B. Terraform für Cloud-Ressourcen, Ansible für Server-Konfiguration). Die meisten Tools (ArgoCD, Flux) sind jedoch primär auf Kubernetes optimiert.

Wie werden Secrets (Passwörter, Keys) in Git gehandhabt?

Secrets sollten niemals im Klartext in Git liegen. Übliche Lösungen sind:

  • Sealed Secrets (Kubernetes): Verschlüsselt Secrets, die nur vom Cluster entschlüsselt werden können.
  • External Secrets Operator: Holt Secrets aus externen Vaults (HashiCorp Vault, AWS Secrets Manager).
  • SOPS (Mozilla): Verschlüsselt Dateien direkt im Repo mit GPG/AGE Keys.
Was passiert, wenn Git ausfällt?

Da der GitOps-Agent den letzten bekannten Zustand im Cluster cached, läuft die Anwendung weiter. Allerdings können keine neuen Deployments durchgeführt werden, bis Git wieder verfügbar ist. Es ist daher ratsam, ein hochverfügbares Git-System (z.B. GitHub Enterprise mit HA oder selbst gehostetes GitLab mit Redundanz) zu nutzen.

Kann ich GitOps mit meiner bestehenden CI-Pipeline (Jenkins/GitLab CI) kombinieren?

Ja, absolut. Das ist sogar der Standardweg. Ihre CI-Pipeline baut die Container-Images, pusht sie in die Registry und aktualisiert dann die Versionsnummer in den YAML-Manifesten im Git-Repo. Der GitOps-Agent (Argo/Flux) sieht die Änderung im YAML und deployed das neue Image. CI bleibt für Build/Test zuständig, GitOps für das Deployment.

Welches Tool soll ich wählen: ArgoCD oder Flux?

Die Entscheidung hängt von Ihren Präferenzen ab:

  • Wählen Sie ArgoCD, wenn Sie eine grafische Oberfläche mögen, komplexe App-Strukturen haben und Multi-Cluster-Management benötigen.
  • Wählen Sie Flux, wenn Sie "Everything as Code" bevorzugen, eine leichte Lösung suchen und stark auf CLI setzen möchten.

Beide sind exzellente, sichere CNCF-Projekte.

Was ist der Unterschied zwischen "Push" und "Pull" bei GitOps?

Dies ist einer der zentralen Unterschiede zwischen traditionellem CI/CD (Push) und GitOps (Pull):

  • Push-Modell (traditionell): Ein CI-Server (z.B. Jenkins, GitLab CI) hat direkten Zugriff auf den Cluster und push die Änderungen (kubectl apply) per SSH oder API. Nachteil: Der CI-Server benötigt Admin-Rechte im Cluster – ein großes Sicherheitsrisiko.
  • Pull-Modell (GitOps): Ein Agent (Argo/Flux) läuft im Cluster und überwacht das Git-Repo. Er pull die Änderungen selbständig. Der CI-Server braucht nur Schreibrechte auf das Git-Repo, nicht auf den Cluster – sicherer und auditierbar.

Fazit: Pull ist sicherer, einfacher zu rolen und erlaubt Self-Healing.

Wie handhabt GitOps Multi-Environment (Dev, Staging, Prod) mit unterschiedlichen Konfigurationen?

Es gibt mehrere etablierte Strategien für Multi-Environment Management:

  • Branching-Modell: Jedes Environment hat einen eigenen Branch (z.B. dev, staging, prod). Der GitOps-Agent deployed entsprechend dem Branch. Nachteil: Merge-Konflikte und Heavy Merge-Management.
  • Directory-Modell (Empfohlen): Ein einziger Main-Branch, aber separate Unterverzeichnisse pro Environment (z.B. /overlays/dev, /overlays/staging, /overlays/prod) mit Kustomize oder Helm-Values. Der Agent deployt die Overlays je nach Cluster.
  • App-of-Apps Pattern: Ein übergeordnetes Manifest, das alle Sub-Anwendungen für jedes Environment definiert – sehr mächtig für große Systeme.

Best Practice: Nutzen Sie Kustomize oder Helm mit values.yaml pro Environment. So haben Sie maximale Flexibilität bei minimalem Code-Duplikat.

Wie testet man Änderungen, bevor sie in den Main-Branch gemergt werden?

GitOps fördert "Shift-Left-Testing" – Änderungen werden schon vor dem Merge getestet. Gängige Ansätze sind:

  • Pull Request Environments (Preview Environments): Per Pipeline wird bei jedem PR automatisch ein temporärer Namespace/Cluster mit der Änderung erstellt. Tools wie ArgoCD Rollouts oder Kubernetes Namespaces als Sandbox ermöglichen das.
  • CI-Phase vor dem Merge: Die CI-Pipeline (z.B. GitLab CI, GitHub Actions) führt kubectl diff, kubeval oder conftest (OPA) aus, um YAML-Syntax und Policy-Verstöße zu prüfen.
  • GitOps-Overlays für Test: Ein separates Overlay für "PR-Tests" deploys die Änderung auf einen dedizierten Test-Cluster, bevor der PR gemergt wird.

Empfehlung: Kombinieren Sie automatisierte Linting/Policy-Tests mit dynamischen Preview-Umgebungen für kritische Änderungen.

Was ist "Drift" und wie geht GitOps damit um?

Drift bezeichnet die Abweichung zwischen dem deklarierten Zustand in Git (Soll-Zustand) und dem tatsächlichen Zustand im Cluster (Ist-Zustand).

Ursachen können sein:

  • Manuelle kubectl edit oder kubectl apply durch einen Admin
  • HPA (Horizontal Pod Autoscaler) oder andere Controller ändern Ressourcen
  • Zugriffsfehler, die zu unvollständigen Deployments führen

GitOps-Lösung: Der Agent (Argo/Flux) führt regelmäßig Vergleiche durch (Sync-Interval, oft 3-5 Minuten). Bei Drift gibt es zwei Verhaltensweisen:

  • Auto-Sync: Der Agent überschreibt automatisch den Ist-Zustand, um ihn wieder mit Git abzugleichen (Self-Healing).
  • Manual-Sync: Der Agent alarmiert nur (z.B. als "OutOfSync" in der UI) und erwartet manuelles Eingreifen – empfehlenswert für Produktionsumgebungen.

Best Practice: In Prod lieber auf Manual-Sync mit starken Alerts setzen, um unbeabsichtigte Deployments zu vermeiden.

Was ist der Unterschied zwischen GitOps und Infrastructure as Code (IaC)?

Infrastructure as Code (IaC) ist der Oberbegriff für das Verwalten von Infrastruktur über maschinenlesbare Definitionsdateien (z.B. Terraform, CloudFormation, Ansible).

GitOps ist eine spezifische Implementierung von IaC, die drei zusätzliche Elemente hinzufügt:

  • Git als Single Source of Truth: Nicht nur die Definitionen, sondern auch der gesamte Zustand aller Umgebungen wird in Git abgebildet.
  • Pull-basierte Agenten: Automatisierte Software (Argo/Flux) stellt sicher, dass der Cluster immer dem Git-Zustand entspricht – ohne manuelles Ausführen von IaC-Tools.
  • Continuous Reconciliation: Der Agent überwacht kontinuierlich und korrigiert automatisch Drift – IaC-Tools laufen meist nur einmal bei Provisionierung oder Update.

Meta: GitOps baut auf IaC auf und erweitert es um automatisierte, pull-basierte Continuous Delivery und Self-Healing. Beide sind komplementär – viele Teams nutzen Terraform für Cloud-Ressourcen (Accounts, VPCs) und GitOps (Argo/Flux) für Kubernetes-Workloads.

Zusammenfassung

Die wichtigsten Punkte

  • Definition: GitOps nutzt Git als Single Source of Truth für Infra und Apps.
  • 4 Prinzipien: Declarative, Versioned, Automated Approved, Software Agents.
  • Workflow: Developer -> Git PR -> Merge -> Auto-Sync by Agent.
  • Tools: ArgoCD (UI-fokussiert) und Flux (CLI/Modular) sind die Marktführer.
  • Vorteile: Höhere Sicherheit, schnelleres Rollback, Auditability, Self-Healing.
  • Secrets: Nie im Klartext! Nutzen Sie Sealed Secrets oder Vault.
  • Kultur: GitOps erfordert Disziplin im Umgang mit Git und Code Reviews.

Enterprise-Tipps

  • Start Small: Beginnen Sie mit Non-Production Clusters.
  • Policy as Code: Nutzen Sie OPA/Gatekeeper, um Compliance im Git zu erzwingen.
  • Disaster Recovery: Ihr Git-Repo ist Ihr Backup. Stellen Sie sicher, dass es redundant ist.
  • Training: Investieren Sie in Git-Schulungen für Ihr Ops-Team.

Weiterführende Themen

Kubernetes Enterprise

Kubernetes im großen Stil – Management, Security und Best Practices.

Zu Kubernetes Enterprise
Service Mesh

Istio, Linkerd – Kommunikation, Security und Observability zwischen Services.

Zu Service Mesh
Observability

Logging, Metrics, Tracing – Wie man komplexe Systeme überwacht.

Zu Observability
Zero Trust

Security-Modell "Never trust, always verify" im Enterprise-Umfeld.

Zu Zero Trust