Training Module

Kubernetes GitOps at Scale — App-of-Apps & Sync-Waves

In diesem 110-Minuten-Modul löst ihr ein Problem, das im ArgoCD-Kurs bewusst außen vor geblieben ist: Eine einzelne Application pro Kommando zu pflegen funktioniert für eine Demo, aber nicht für zehn, zwanzig oder hundert Anwendungen – spätestens dann will niemand mehr jede Application einzeln per kubectl apply anlegen. Das App-of-Apps-Pattern löst das: Eine Parent-Application zeigt nicht auf rohe Deployment-Manifeste, sondern auf ein Git-Verzeichnis voller Application-Manifeste – und wenn die Parent-Application synct, legt ArgoCD alle darin beschriebenen Child-Applications selbst an. Danach seziert ihr die Sync-Waves: die Annotation argocd.argoproj.io/sync-wave, mit der sich eine erzwungene Reihenfolge zwischen Ressourcen durchsetzen lässt, die voneinander abhängen – etwa ein Namespace vor einem Secret, das wiederum vor einem Deployment existieren muss, das dieses Secret mountet. Im ersten Hands-on registriert ihr eine Parent-Application, deren source ein Git-Verzeichnis mit drei Child-Application-Manifesten ist, löst den Sync aus und beobachtet live, wie ArgoCD alle drei Child-Applications automatisch anlegt und synct – ohne dass ihr eine einzige davon selbst per kubectl apply registriert. Im zweiten Hands-on baut ihr euch zunächst bewusst eine Race-Bedingung: Namespace, Secret und Deployment gleichzeitig ohne Sync-Wave deployen, und live sehen, wie das Deployment das Secret nicht mounten kann, weil es zum Zeitpunkt des Pod-Starts noch nicht existiert. Anschließend behebt ihr das mit sync-wave-Annotationen ( -1/0/1) und beobachtet, wie ArgoCD jetzt wartet, bis eine Welle abgeschlossen ist, bevor die nächste startet. Ein kurzer Ausblick ohne eigenes Hands-on rundet ab: ApplicationSet als Generator-basierte Alternative zum manuell gepflegten Child-App-Verzeichnis, sowie eine vertiefte Abgrenzung zu Flux’ eigenem Dependency-Modell. Ausdrücklich NICHT Teil dieses Kurses: Progressive Delivery mit Argo Rollouts (eigenes Aufbaumodul), CI/Image-Build und ein eigenständiger Multi-Cluster-Hands-on – der Anwendungsfall Multi-App-/Cluster-Bootstrap wird benannt und eingeordnet, aber nicht selbst als zweiter Cluster aufgebaut. Pflicht ist das Modul “Kubernetes GitOps — Deklaratives Deployment mit ArgoCD” – dieses Modul setzt dessen Git-Repo und ArgoCD-Installation direkt fort, statt sie zu wiederholen. Die Session läuft komplett lokal über Minikube (–driver=docker) – ArgoCD selbst läuft rein containerisiert im Cluster, ohne Cloud-Account und ohne Kostenwirkung.

Format

110 Minuten, live (remote oder vor Ort), Input & zwei Hands-on-Übungen

Teilnehmende

Absolvent:innen von “Kubernetes GitOps — Deklaratives Deployment mit ArgoCD”, die mehrere GitOps-verwaltete Anwendungen zentral statt einzeln steuern wollen

Voraussetzungen

Abgeschlossenes Modul “Kubernetes GitOps — Deklaratives Deployment mit ArgoCD” (Pflicht) – Application-CRD, Sync-/Health-Status und Reconciliation-Loop gelten als bekannt, lauffähige lokale Docker-Umgebung für Minikube

Warum dieses Training für deine Organisation wirkt

Ein Sync, viele Anwendungen

Statt zehn Application-Objekte einzeln per kubectl apply zu pflegen, registriert ihr eine einzige Parent-Application – der Rest entsteht automatisch aus eurem Git-Repo, inklusive Prune/Self-Heal für jede Child-Application einzeln.

Reihenfolge wird erzwungen, nicht gehofft

Ohne Sync-Wave verlässt ihr euch darauf, dass ein Secret “zufällig” vor dem Deployment existiert, das es mountet. Mit sync-wave-Annotationen wartet ArgoCD nachweislich, bis eine Welle abgeschlossen ist, bevor die nächste beginnt.

Der Weg zum Multi-App-/Cluster-Bootstrap

App-of-Apps ist der strukturelle Baustein, mit dem Teams später ganze Cluster oder ganze Anwendungslandschaften aus einem einzigen Git-Repo heraus bootstrappen – ein Anwendungsfall, den ihr hier kennenlernt und einordnet, ohne ihn selbst als zweiten Cluster nachzubauen.

Was Teilnehmende mitnehmen

  • Eine Parent-Application als App-of-Apps-Root aufsetzen, deren source ein Git-Verzeichnis mit mehreren Child-Application-Manifesten ist, und darüber mehrere Child-Applications zentral steuern.
  • Live beobachten, wie ArgoCD beim Sync der Parent-Application automatisch alle darin beschriebenen Child-Applications anlegt und selbst synct.
  • Die Annotation argocd.argoproj.io/sync-wave einsetzen, um eine erzwungene Reihenfolge zwischen abhängigen Ressourcen durchzusetzen (z. B. Namespace → Secret → Deployment), statt sich auf Zufallsreihenfolge zu verlassen.
  • Live erleben, was ohne Sync-Wave passiert: eine Race-Bedingung, bei der ein Deployment ein noch nicht existierendes Secret nicht mounten kann – und wie sync-wave-Annotationen (-1/0/1) genau das beheben.
  • Den Anwendungsfall Multi-App-/Cluster-Bootstrap benennen und einordnen: App-of-Apps als struktureller Baustein für zentral gesteuerte, große GitOps-Landschaften.
  • ApplicationSet als Generator-basierte Alternative zum manuell gepflegten Child-App-Verzeichnis sowie eine vertiefte Abgrenzung zu Flux’ eigenem Dependency-Modell konzeptionell einordnen – bewusst ohne eigenes Hands-on zu diesen Punkten.
  • Benennen, was dieses Modul bewusst nicht behandelt: Progressive Delivery mit Argo Rollouts, CI/Image-Build und ein eigenständiger Multi-Cluster-Hands-on.

Für wen dieses Modul ideal ist

  • • Absolvent:innen von “Kubernetes GitOps — Deklaratives Deployment mit ArgoCD” oder gleichwertigen Vorkenntnissen
  • • Teams, die schon mehr als eine Application pflegen und den manuellen kubectl apply-Aufwand pro Anwendung loswerden wollen
  • • Alle, die vor dem ersten produktiven Multi-App-Rollout wissen wollen, wie sich eine erzwungene Reihenfolge zwischen abhängigen Ressourcen technisch durchsetzen lässt – bevor eine Race-Bedingung produktiv auffällt

Rahmendaten

  • • Dauer: 110 Minuten live (remote oder vor Ort)
  • • Format: Input, Live-Demo, zwei Hands-on-Übungen (Parent-Application & Child-Apps, Race-Bedingung ohne Sync-Wave → Fix mit Sync-Wave-Annotationen)
  • • Voraussetzungen: abgeschlossenes Modul “Kubernetes GitOps — Deklaratives Deployment mit ArgoCD” (Pflicht), lauffähige lokale Docker-Umgebung für Minikube, keine Cloud-Kostenwirkung

Modulaufbau & Agenda

  1. GitOps-Recap (10 min): kurzer Rückblick auf Reconciliation-Loop, Application-CRD und Sync-/Health-Status aus dem Vorgängerkurs – als bekannt vorausgesetzt, nicht neu hergeleitet.

  2. App-of-Apps-Konzept (15 min): Parent-Application als App-of-Apps-Root, Child-Applications als von ihr verwaltete Objekte, Anwendungsfall Multi-App-/Cluster-Bootstrap.

  3. Hands-on 1: Parent-Application & Child-Apps (30 min, Hands-on): Parent-Application registrieren, deren source ein Git-Verzeichnis mit drei Child-Application-Manifesten ist, Sync auslösen, live beobachten, wie ArgoCD alle Child-Applications automatisch anlegt.

  4. Sync-Waves-Konzept (10 min): die Annotation argocd.argoproj.io/sync-wave, wie ArgoCD Wellen sortiert und nacheinander abarbeitet.

  5. Hands-on 2: Race ohne Sync-Wave → Fix mit Sync-Wave (35 min, Hands-on): Namespace, Secret und Deployment zunächst ohne Sync-Wave gemeinsam deployen und die Race-Bedingung live sehen, danach mit sync-wave-Annotationen (-1/0/1) korrigieren.

  6. Ausblick ohne Hands-on & Abschluss (10 min): ApplicationSet als Generator-Alternative, vertiefte Abgrenzung zu Flux; Progressive Delivery, CI/Image-Build und eigenständiger Multi-Cluster-Hands-on ausdrücklich nicht Teil dieses Kurses.

Dieses Modul setzt das Aufbaumodul Kubernetes GitOps — Deklaratives Deployment mit ArgoCD zwingend voraus. Die Application-CRD, Sync-Status (Synced/OutOfSync) gegen Health-Status (Healthy/Degraded/Progressing) und die Reconciliation-Loop gelten als bekannt und werden hier nicht erneut hergeleitet – Hands-on 1 setzt direkt auf dem dort aufgebauten Git-Repo und der dort installierten ArgoCD-Instanz auf.

Was dieses Modul bewusst nicht behandelt: ApplicationSet als Generator-basierte Alternative zum manuell gepflegten Child-App-Verzeichnis (List-, Git- und Cluster-Generator) sowie eine vertiefte Abgrenzung zu Flux’ eigenem Dependency-Modell (Kustomization dependsOn) – beides nur als Ausblick genannt, kein eigenes Hands-on hier. Für List- und Git-Directory-Generator gibt es dafür das eigenständige Aufbaumodul Kubernetes GitOps at Scale — ApplicationSet & Generators , das direkt auf diesem Kurs aufsetzt und dieselben drei Child-Services weiterverwendet. Für die vertiefte Flux-Abgrenzung samt Umstiegsszenario gibt es das eigenständige Aufbaumodul Kubernetes GitOps mit Flux — Abgrenzung und Umstieg von ArgoCD. Ebenfalls nicht Thema: Progressive Delivery mit Argo Rollouts (Canary/Blue-Green) – dafür gibt es das eigenständige Aufbaumodul Kubernetes Progressive Delivery — Canary & Blue-Green mit Argo Rollouts. Kein CI/Image-Build (das leistet das Modul CI: Continuous Integration & der Build-Prozess ). Und kein eigenständiger Multi-Cluster-Hands-on: Der Anwendungsfall Multi-App-/Cluster-Bootstrap wird in Block 2 als Konzept benannt und eingeordnet, aber nicht selbst als zweiter Cluster aufgebaut – dieses 110-Minuten-Modul bleibt bei einem einzigen Minikube-Cluster.

Hands-on Inhalte (Auszug)

Parent-Application registrieren

  • Drei Child-Application-Manifeste in einem Git-Verzeichnis apps/ ablegen, committen und pushen
  • Eine Parent-Application anwenden, deren source.path auf genau dieses Verzeichnis zeigt, mit syncPolicy.automated für Auto-Sync

Child-Apps automatisch beobachten

  • Mit kubectl -n argocd get application -w live sehen, wie drei Child-Applications ohne eigenes kubectl apply entstehen
  • Jede Child-Application einzeln auf Synced/Healthy prüfen

Race-Bedingung ohne Sync-Wave

  • Namespace, Secret und Deployment ohne sync-wave-Annotation gemeinsam in einer Child-Application deployen
  • Live beobachten, wie das Deployment das Secret nicht mounten kann, weil es zum Pod-Start noch nicht existiert

Fix mit Sync-Wave-Annotationen

  • Annotationen argocd.argoproj.io/sync-wave: “-1” (Namespace), “0” (Secret) und “1” (Deployment) ergänzen
  • Erneut synchen und bestätigen, dass die Deployment-Welle erst startet, wenn die Secret-Welle Healthy ist

Dieses Modul ist Teil unserer Pilotphase. Gemeinsam mit euch definieren wir passende Metriken (z. B. Zeit von der Parent-Application-Registrierung bis alle Child-Applications bestätigt Synced/Healthy sind) und werten sie im Anschluss transparent aus. Ergebnisse veröffentlichen wir, sobald sie belastbar sind.

Bereit, das Modul zu buchen?

Wir passen die Hands-on-Übung auf euren Erfahrungsstand und eure Zielumgebung an.

Academy Briefing anfragen