Training Module

Kubernetes Failure-Domain-Scheduling — Topology Spread Constraints & Pod Anti-Affinity

Dieses 100-Minuten-Modul schließt eine Lücke, die zwei Vorgängermodule dieses Repos jeweils ausdrücklich als Ausblick ohne eigenen Kurs benannt haben: “Kubernetes Administration” und “Kubernetes Hochverfügbarkeit — Multi-Master Control-Plane” nennen beide die Verteilung von Worker-Nodes über Failure-Domains als offenen Punkt, ohne ihn selbst zu vertiefen. Ihr startet mit der Einordnung, die im Ernstfall den Unterschied macht: Kubernetes plant Pods nicht automatisch failure-domain-bewusst – ohne explizite Konfiguration kann der Scheduler sechs Replicas einer Anwendung problemlos alle in derselben Verfügbarkeitszone platzieren, und der Ausfall genau dieser einen Zone reißt dann die komplette Anwendung mit. Im ersten Hands-on vergebt ihr topology.kubernetes.io/zone -Labels an die drei Nodes eures kind-Clusters – und wir sagen von Anfang an ehrlich: Das sind simulierte Zonen, keine physisch getrennten Rechenzentren. Alle Nodes laufen als Docker-Container auf demselben Host; die Labels lösen dasselbe Scheduling-Verhalten aus wie echte Cloud-AZs, aber keine echte physische Redundanz. Im zweiten, größten Hands-on konfiguriert ihr topologySpreadConstraints mit maxSkew und vergleicht live, was der Unterschied zwischen whenUnsatisfiable: DoNotSchedule (hart, neue Pods bleiben Pending, bis der Skew wieder passt) und ScheduleAnyway (weich, der Scheduler platziert trotzdem, auch wenn der Skew dabei wächst) am eigenen Cluster tatsächlich bedeutet – inklusive einer bewusst provozierten ungleichen Verteilung, die ihr anschließend korrigiert. Im dritten Hands-on stellt ihr Pod-Anti-Affinity daneben: den älteren, binären Mechanismus (“niemals zwei Pods in derselben Zone”), der keine Skew-Feinsteuerung kennt, dafür aber Fälle abdeckt, in denen Topology Spread Constraints allein nicht reichen. Den Abschluss bildet ein bewusster Ausblick ohne eigenes Hands-on: wie ein Cluster-Autoscaler auf Pending-Pods durch Skew-Verletzungen reagiert, und was sich an echten Cloud-AZs gegenüber unseren simulierten Labels unterscheidet. Voraussetzung sind beide Module “Kubernetes Administration” und “Kubernetes Hochverfügbarkeit — Multi-Master Control-Plane” gleichzeitig. Die Session läuft weiterhin vollständig lokal über kind, ohne Cloud-Account und ohne Kostenwirkung.

Format

100 Minuten, live (remote oder vor Ort), Input & Hands-on

Teilnehmende

Ops/Admins, die Worker-Nodes bewusst über Failure-Domains verteilen wollen, statt sich auf Zufallsverteilung zu verlassen

Voraussetzungen

Abgeschlossene Module “Kubernetes Administration” UND “Kubernetes Hochverfügbarkeit — Multi-Master Control-Plane” (beide Pflicht), lauffähige lokale Docker-Umgebung für kind

Warum dieses Training für deine Organisation wirkt

Die Lücke, die zwei Module offen ließen

“Administration” und “Hochverfügbarkeit” nennen Failure-Domain-Scheduling beide ausdrücklich nur als Ausblick, ohne eigenen Kurs. Dieses Modul schließt genau diese benannte Lücke, statt sie ein drittes Mal zu wiederholen.

Simuliert, aber ehrlich benannt

Zone-Labels auf einem Docker-Host sind keine physische Redundanz – wir sagen das im Kick-off und in der Übung selbst so, statt eine Illusion echter Verfügbarkeitszonen zu erzeugen.

Skew ist kein Diagramm mehr, sondern ein Kommando

Wer nur gehört hat, dass DoNotSchedule härter ist als ScheduleAnyway, glaubt es. Wer live sieht, wie ein Pod bei Skew-Verletzung Pending bleibt, während der andere trotzdem geplant wird, versteht den Unterschied im Ernstfall sofort.

Was Teilnehmende mitnehmen

  • Herleiten, warum Kubernetes Pods nicht von sich aus failure-domain-bewusst plant – und was das für die tatsächliche Ausfallsicherheit einer Anwendung bedeutet.
  • topology.kubernetes.io/zone-Labels auf echten Cluster-Nodes setzen – klar als simulierte, nicht physisch getrennte Zonen gekennzeichnet.
  • topologySpreadConstraints mit maxSkew, topologyKey und whenUnsatisfiable korrekt konfigurieren und den Unterschied zwischen DoNotSchedule und ScheduleAnyway live an provozierter Schieflage nachvollziehen.
  • Pod-Anti-Affinity als binären Verteilungsmechanismus gegen die feingranulare Skew-Steuerung von Topology Spread Constraints abgrenzen und begründet auswählen, wann welcher Mechanismus passt.
  • Eine ungleiche Pod-Verteilung gezielt provozieren, mit kubectl get pods -o wide nachweisen und anschließend korrigieren.
  • Die Interaktion mit einem Cluster-Autoscaler sowie den Unterschied zu echten Cloud-Availability-Zones als Konzept einordnen – ohne eigenes Hands-on.

Für wen dieses Modul ideal ist

  • • Ops/Admins mit abgeschlossenen Modulen “Kubernetes Administration” UND “Kubernetes Hochverfügbarkeit — Multi-Master Control-Plane”
  • • Teams, die eine produktive Multi-Zone-Topologie planen oder betreiben und Worker-Pods bewusst statt zufällig verteilen wollen
  • • Alle, die den Unterschied zwischen Topology Spread Constraints und Pod-Anti-Affinity bisher nur aus der Dokumentation kennen, nicht aus eigener Übung

Rahmendaten

  • • Dauer: 100 Minuten live (remote oder vor Ort)
  • • Format: Input, Live-Demo, drei aufeinander aufbauende Hands-on-Übungen (Zone-Labels, Topology Spread Constraints, Pod-Anti-Affinity), Cluster-Autoscaler-/Cloud-AZ-Ausblick als reiner Konzeptteil
  • • Voraussetzungen: beide Module “Kubernetes Administration” und “Kubernetes Hochverfügbarkeit — Multi-Master Control-Plane”, lauffähige lokale Docker-Umgebung für kind, keine Cloud-Kostenwirkung

Modulaufbau & Agenda

  1. Einordnung & Abgrenzung zu Control-Plane-HA (10 min): warum Kubernetes Pods nicht automatisch failure-domain-bewusst plant, und wie sich Worker-Verteilung von der Control-Plane-Hochverfügbarkeit des Vorgängermoduls unterscheidet.

  2. Hands-on 1: Zonen-Labels auf dem Drei-Node-kind-Cluster (20 min, Hands-on): topology.kubernetes.io/zone-Labels an drei Nodes vergeben – ausdrücklich als simulierte, nicht physisch getrennte Zonen angesagt.

  3. Hands-on 2: topologySpreadConstraints konfigurieren, Skew live vergleichen (30 min, Hands-on): maxSkew und whenUnsatisfiable setzen, eine ungleiche Verteilung provozieren, DoNotSchedule gegen ScheduleAnyway am selben Szenario gegenüberstellen und die Schieflage korrigieren.

  4. Hands-on 3: Pod-Anti-Affinity als Alternative/Ergänzung (25 min, Hands-on): dieselbe Verteilungsaufgabe mit podAntiAffinity lösen und den binären Charakter gegen die Skew-Feinsteuerung von Topology Spread Constraints abgrenzen.

  5. Ausblick, ohne eigenes Hands-on (15 min): Interaktion mit einem Cluster-Autoscaler bei Pending-Pods durch Skew-Verletzungen, und was sich an echten Cloud-Availability-Zones gegenüber unseren simulierten Labels unterscheidet.

Dieses Modul setzt beide Vorgängermodule gleichzeitig voraus: Kubernetes Administration — RBAC, Node-Betrieb und Cluster-Netzwerk (Node-Administration und die erste Nennung von Failure-Domain-Scheduling als Ausblick) und Kubernetes Hochverfügbarkeit — Multi-Master Control-Plane (ein echter Multi-Node-kind-Cluster, auf dem dieses Modul direkt aufbaut). Beide Module benennen an ihrem jeweiligen Ende wörtlich dieselbe offene Lücke, die dieses Modul schließt. Wer eines der beiden Module noch nicht hat, sollte es zuerst buchen – keines der beiden reicht hier allein.

Bewusst nicht Teil dieses Moduls: kein produktiver Cluster-Autoscaler-Aufbau (der Block 5 bleibt Konzept, weil ein lokaler kind-Cluster keinen echten Node-Autoscaler betreiben kann – dieselbe Grenze, die auch Kubernetes Ressourcenmanagement & Autoscaling für Cluster-/Node-Autoscaling zieht), keine echte Multi-AZ-Cloud-Konfiguration und kein nodeSelector -Grundlagenteil (kennt ihr bereits aus Kubernetes Anwendungsdesign).

Hands-on Inhalte (Auszug)

Simulierte Zonen anlegen

  • Mit kubectl label node … topology.kubernetes.io/zone=zone-a (bzw. zone-b/zone-c) jedem Worker-Node eine eigene Zone zuweisen
  • Mit kubectl get nodes -L topology.kubernetes.io/zone die Zuordnung verifizieren – und ausdrücklich ansagen, dass das Docker-Containern auf demselben Host entspricht, nicht getrennten Rechenzentren

Schieflage provozieren und korrigieren

  • Zwei Zonen-Nodes mit kubectl cordon sperren, ein Deployment ohne Constraint skalieren und die einseitige Verteilung mit kubectl get pods -o wide nachweisen
  • Nach dem Uncordon mit gesetztem topologySpreadConstraints beobachten, wie neue Pods die Schieflage ausgleichen, ohne dass bereits laufende Pods verschoben werden

DoNotSchedule vs. ScheduleAnyway

  • Mit maxSkew: 1 und whenUnsatisfiable: DoNotSchedule live zeigen, dass ein zusätzlicher Pod bei Skew-Verletzung Pending bleibt
  • Dieselbe Situation mit ScheduleAnyway wiederholen und beobachten, dass der Pod trotzdem geplant wird, obwohl der Skew wächst

Pod-Anti-Affinity im Vergleich

  • Eine podAntiAffinity-Regel mit topologyKey: topology.kubernetes.io/zone schreiben, die zwei Pods derselben Anwendung strikt in unterschiedliche Zonen zwingt
  • Einen vierten Replica-Pod bei nur drei Zonen bewusst in Pending laufen lassen und den binären Unterschied zur Skew-Toleranz von Topology Spread Constraints benennen

Dieses Modul ist Teil unserer Pilotphase. Gemeinsam mit euch definieren wir passende Metriken (z. B. Zeit von der provozierten Schieflage bis zur verifizierten Korrektur) 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