Inhaltsverzeichnis

Vorwort

Teil IGrundlagen

1Was ist GitOps?

1.1CIOps vs. GitOps

1.2Der Weg zu GitOps

1.2.1Traditionelle Silos

1.2.2DevOps

1.2.3Infrastructure as Code

1.2.4Kubernetes

1.2.5OpenGitOps

1.3Die vier Prinzipien

1.3.1Prinzip 1: Deklarativ

1.3.2Prinzip 2: Versioniert und unveränderlich

1.3.3Prinzip 3: Automatisch bezogen

1.3.4Prinzip 4: Kontinuierlich angeglichen

1.4Fragen und Missverständnisse

2Welchen Unterschied macht GitOps?

2.1Indizien aus den DORA-Studien

2.2Der Unterschied im Alltag: Geschichten eines Entwicklungsteams

2.3Szenario

2.3.1Repositories

2.3.2Deployment-Fluss

2.3.3Vergleichsszenario »Mit GitOps«

2.4Kontinuierlich nach Dev deployen

2.5Ressourcen aufräumen

2.6Grenzfälle in CI vermeiden

2.7Ressourcen wiederherstellen

2.8Konfigurationsänderungen ausrollen

2.9Incidents navigieren

2.10Zielsysteme besser absichern

3Wie fange ich mit GitOps an?

3.1Agile Empfehlung: zügiger Durchstich

3.2Fragen zur Orientierung

3.3Eine Beispielimplementierung mit Argo CD

3.3.1Zielsetzung

3.3.2Voraussetzungen

3.4Schritt 1: Einen Cluster starten

3.5Schritt 2: Argo CD installieren

3.5.1Ressourcentypen von Argo CD verstehen

3.6Schritt 3: Eine eigene Application erzeugen

3.7Schritt 4: Eine Änderung deployen

3.8Fazit

Teil IIPraxis

4Argo CD oder Flux auswählen

4.1Zahlen und Fakten

4.2Bootstrapping

4.3Linking

4.4CLI und GUI

4.5Komponenten und Ressourcenbedarf

4.6Authentifizierung und Autorisierung

4.7Templating

4.8Configuration Management

4.9Monitoring und Alerting

4.10Ökosystem

4.11Mandantentrennung

4.12Multi-Cluster-Management

4.13OCI statt Git

4.14Hochverfügbarkeit und Lastverteilung

4.15Reifegrad

4.16Kommerzielle Angebote

4.17Fazit und Tipps zur Entscheidungsfindung

5Secrets sicher verwalten

5.1Secrets lagern und verwalten

5.1.1Secrets verschlüsselt im Repo speichern

5.1.2Secrets extern verwalten

5.2Secrets konsumieren

5.2.1Secrets als native Kubernetes-Secrets konsumieren

5.2.2Secrets über Sidecar-Container injizieren

5.2.3Secrets über ein CSI-Volume konsumieren

5.3Wir erweitern die Beispielimplementierung

5.3.1Ziele

5.3.2Datenfluss von HashiCorp Vault über ESO in den Cluster

5.3.3Schritt 1: Das Config-Repo bootstrappen

5.3.4Schritt 2: Anwendungen in neuen Namespace deployen

5.3.5Schritt 3: ESO mit HashiCorp Vault verbinden

5.3.6Schritt 4: Beispiel-Secret erstellen

5.3.7Schritt 5: Das Secret integrieren

5.3.8Schritt 6: Das Secret ändern

5.4Fazit

6Repositories und Ordner strukturieren

6.1Design des GitOps-Prozesses

6.2Kategorien von GitOps-Patterns

6.3Operator Deployment Patterns

6.3.1Instance per Cluster

6.3.2Hub and Spoke

6.3.3Instance per Namespace

6.4Repository Patterns

6.4.1Monorepo

6.4.2Repo per Team

6.4.3Repo per Application

6.4.4Repo per Environment

6.5Promotion Patterns

6.5.1Branch oder Folder per Environment

6.5.2Preview Environments

6.5.3Global Environments oder Environment per Application

6.5.4Configuration Management

6.5.5Config Update

6.6Verdrahtungs-Patterns

6.6.1Bootstrapping

6.6.2Linking

6.7Beispiele für Config-Repos

6.7.1Beispiel 1: Argo CD Autopilot

6.7.2Beispiel 2: GitOps Playground

6.7.3Beispiel 3: Flux Monorepo

6.7.4Beispiel 4: Flux Repo per Team

6.7.5Beispiel 5: The Path to GitOps

6.7.6Beispiel 6: Environment-Varianten

6.8Mandantentrennung

6.8.1Rolle der GitOps-Operatoren

6.8.2Rolle der Repo-Struktur

6.8.3Rolle der Cluster

6.8.4Teams und Environments trennen

6.9Fazit

7Asynchron deployen

7.1Deployment-Flüsse

7.1.1Schritte

7.1.2Kombinationen von Zuständigkeiten

7.1.3Deployment-Fluss 1: CIOps

7.1.4Deployment-Fluss 2: Schmal-GitOps

7.1.5Deployment-Fluss 3: CI-Klammer

7.1.6Deployment-Fluss 4: Übergabe

7.1.7Deployment-Fluss 5: GitOps-geführt

7.2Rollout durch den GitOps-Operator

7.2.1Rollout-Schritte im GitOps-Operator

7.2.2Timing und Koordination der Rollout-Schritte

7.2.3Intervalle der Rollout-Schritte

7.2.4Rollout im GitOps-Operator aktiv triggern

7.3Config Update

7.3.1Argo CD Image Updater

7.3.2Flux Image Automation

7.3.3Dependency-Bot

7.4Prüfen

7.4.1Prüfen via CI-Server

7.4.2Prüfen via GitOps-Operator

7.4.3Progressive Delivery

7.5CI-Server mit GitOps verwalten

7.6Fazit

8Alerting integrieren

8.1Gesundheitszustand feststellen

8.1.1Kubernetes-nativ mit kstatus

8.1.2Helm-Hooks

8.1.3Flux

8.1.4Argo CD

8.2Benachrichtigungen verschicken

8.2.1Flux

8.2.2Argo CD

8.3Ganzheitliche Herangehensweise

9Imperativ eingreifen

9.1Eindeutig ausgeschlossene Aktionen

9.2Risiken und Chancen

9.3Einen Debug-Pod starten

9.4Ein Backup wiederherstellen

9.5Ein Deployment neu starten

9.6Ressourcen neu erzeugen

9.7Ein Deployment skalieren

9.8Fazit

Teil IIIWeiterführendes

10Mehrere Cluster verwalten

10.1Single-Cluster vs. Multi-Cluster

10.2Cluster API

10.3Konzept von Cluster API

10.4Definition der Cluster API-Ressourcen

10.5Installation des Management-Clusters

10.5.1Provider konfigurieren und temporären Management-Cluster bauen

10.5.2Worker Cluster anlegen

10.5.3Installation des Cluster API Operators

10.5.4Deklarative Installation des Management-Clusters

10.6Verwaltung von Workload-Clustern mit Argo CD

10.7Fazit

11Infrastruktur verwalten

11.1Terraform

11.1.1Ein kurzes Tutorial zum Einstieg

11.1.2Grundbausteine von Terraform

11.1.3Terraform vs. OpenTofu

11.1.4Terraform und GitOps

11.1.5Eine EC2-Instanz verwalten mit TF-Controller und Flamingo

11.2Pulumi

11.2.1Grundbausteine von Pulumi

11.2.2Eine EC2-Instanz verwalten mit Pulumi Kubernetes Operator

11.3Crossplane

11.3.1Grundbausteine von Crossplane

11.3.2Eine EC2-Instanz verwalten mit Crossplane

12GitOps außerhalb von Kubernetes

12.1Aus den GitOps-Prinzipien folgende Verantwortlichkeiten

12.2Infrastructure-as-Code-Formate

12.3Weitere GitOps-Operatoren

12.4Features von GitOps-Operatoren

12.5Einen eigenen GitOps-Operator bauen

12.6Eigene GitOps-Operatoren aus der Praxis

12.6.1Docker Swarm und Ansible

12.6.2Helmfile

12.6.3Lektionen

Teil IVAnhang

Nachwort

Index