Training Module

Kubernetes StatefulSets — Stabile Identität für zustandsbehaftete Workloads

In diesem 100-Minuten-Modul schließt ihr die Lücke zwischen zustandslosen und zustandsbehafteten Workloads. Der Einstieg ist die zentrale Abgrenzung: Ein ReplicaSet/ Deployment behandelt seine Pods als austauschbar – generierte Namen wie web-7d9f8c9-x2k4p, keine garantierte Start-Reihenfolge, kein stabiler Speicher-Zuordnungspunkt. Ein StatefulSet gibt genau das auf, was Deployments schnell macht, und tauscht es gegen stabile, geordnete Identität: Pods heißen <name>-0, <name>-1, … und behalten diesen Namen über jeden Neustart hinweg. Im ersten Hands-on setzt ihr volumeClaimTemplates ein: Statt eine gemeinsame PersistentVolumeClaim für alle Replicas zu teilen – aus dem Modul Storage bereits als Engpass bekannt, ReadWriteOnce erlaubt ohnehin meist nur einem Pod gleichzeitig Schreibzugriff – provisioniert Kubernetes für jede Replica automatisch eine eigene PVC nach dem Muster <template>-<statefulset>-<ordinal>. Danach ordnet ihr podManagementPolicy ein – OrderedReady (Default, strikt sequentiell, jeder Pod muss erst bereit sein, bevor der nächste startet) gegen Parallel (alle Replicas gleichzeitig) – und seht, wie dieselbe Reihenfolge beim Scale-down rückwärts gilt. Im zweiten Hands-on koppelt ihr das StatefulSet an einen Headless Service (clusterIP: None, aus dem Modul Networking Vertiefung als Konzept bereits bekannt) und löst live einen stabilen Pro-Pod-DNS-Namen auf wie pod-0.<service>.<namespace>.svc.cluster.local – der Baustein, den verteilte Systeme für Peer-Discovery brauchen. Voraussetzung sind die Module “Kubernetes Storage” (PersistentVolume/ PersistentVolumeClaim/StorageClass) und “Kubernetes Networking Vertiefung” (Headless Services, SRV-Records) – beide werden hier vorausgesetzt und nicht wiederholt. Die Session läuft weiterhin vollständig lokal über Minikube oder kind, ohne Cloud-Account und ohne Kostenwirkung.

Format

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

Teilnehmende

Entwickler:innen und Ops, die zustandsbehaftete Workloads wie Datenbank-Cluster stabil betreiben wollen

Voraussetzungen

Abgeschlossene Module “Kubernetes Storage” und “Kubernetes Networking Vertiefung” oder gleichwertige Vorkenntnisse, lauffähige lokale Docker-Umgebung für Minikube oder kind

Warum dieses Training für deine Organisation wirkt

Austauschbar ist der Normalfall — bis er es nicht mehr ist

Deployment/ReplicaSet setzen bewusst auf Austauschbarkeit: jeder Pod ist gleich, jeder ersetzbar, egal wer zuerst startet. Ein Datenbank-Cluster mit Primary/Replica-Rollen oder ein verteiltes System mit Peer-Wahl braucht das Gegenteil – eine Identität, die über einen Neustart hinweg erhalten bleibt.

Eine geteilte PVC ist für Replicas ohnehin meist keine Option

ReadWriteOnce, aus dem Modul Storage bekannt, erlaubt in der Regel nur einem Pod gleichzeitig Schreibzugriff. volumeClaimTemplates löst das nicht über einen komplizierteren AccessMode, sondern über eine eigene PVC pro Replica – jeder Pod bekommt seinen eigenen, stabil zugeordneten Speicher.

Reihenfolge und Name sind kein Zufall mehr

OrderedReady erzwingt, dass Pod-1 erst startet, wenn Pod-0 bereit ist – und beim Scale-down läuft es rückwärts. Kombiniert mit dem stabilen DNS-Namen aus dem Headless Service weiß jeder Pod jederzeit, wer er ist und wie er seine Nachbarn erreicht.

Was Teilnehmende mitnehmen

  • StatefulSet gegen Deployment/ReplicaSet abgrenzen: stabile, geordnete Identität statt austauschbarer Pods, und benennen, wann dieser Mechanismus tatsächlich gebraucht wird (Datenbank-Cluster, verteilte Systeme mit Peer-Discovery).
  • volumeClaimTemplates in einem StatefulSet-Manifest definieren und live nachweisen, dass Kubernetes für jede Replica automatisch eine eigene PVC nach dem Muster <template>-<statefulset>-<ordinal> anlegt.
  • Die Standard-StorageClass des eigenen Clusters (bei Minikube i. d. R. standard mit hostpath-Provisioner) vor dem Hands-on gezielt prüfen, statt sie stillschweigend vorauszusetzen.
  • podManagementPolicy OrderedReady (Default) und Parallel unterscheiden und begründen, wann welches Verhalten beim Scaling und beim Rolling Update sinnvoll ist.
  • Stabile Pod-Namen (<name>-0, <name>-1, …) über einen Pod-Neustart hinweg live nachvollziehen – die Identität bleibt erhalten, obwohl der Scheduler den Pod ggf. neu platziert.
  • Einen Headless Service (clusterIP: None) über das serviceName-Feld an ein StatefulSet koppeln und live einen stabilen Pro-Pod-DNS-Namen wie pod-0.<service>.<namespace>.svc.cluster.local auflösen.

Für wen dieses Modul ideal ist

  • • Entwickler:innen und Ops mit abgeschlossenen Modulen “Kubernetes Storage” und “Kubernetes Networking Vertiefung” oder gleichwertigen Vorkenntnissen
  • • Alle, die demnächst einen Datenbank-Cluster, ein Message-Queue-Cluster oder ein anderes zustandsbehaftetes verteiltes System auf Kubernetes betreiben sollen
  • • Teams, die bisher ein Deployment mit geteilter PVC “irgendwie zum Laufen” gebracht haben und verstehen wollen, warum das strukturell an Grenzen stößt

Rahmendaten

  • • Dauer: 100 Minuten live (remote oder vor Ort)
  • • Format: Input, Live-Demo, zwei Hands-on-Übungen (volumeClaimTemplates, Headless Service & Pro-Pod-DNS)
  • • Voraussetzungen: abgeschlossene Module “Kubernetes Storage” und “Kubernetes Networking Vertiefung”, lauffähige lokale Docker-Umgebung für Minikube oder kind, keine Cloud-Kostenwirkung

Modulaufbau & Agenda

  1. StatefulSet vs. Deployment/ReplicaSet: stabile Identität als Konzept (20 min): austauschbare Pods vs. geordnete, stabile Identität, und wann der Mechanismus tatsächlich gebraucht wird.

  2. Hands-on 1: volumeClaimTemplates (25 min, Hands-on): StatefulSet mit volumeClaimTemplates anwenden, automatisch provisionierte PVCs pro Replica live prüfen, Default-StorageClass vorab bestätigen.

  3. Geordnetes Scaling & Rolling Update (20 min): podManagementPolicy OrderedReady vs. Parallel, RollingUpdate mit partition, stabile Pod-Namen über Neustarts hinweg.

  4. Hands-on 2: Headless Service & Pro-Pod-DNS (25 min, Hands-on): Headless Service anlegen, StatefulSet über serviceName koppeln, stabilen DNS-Namen je Pod per Debug-Pod auflösen.

  5. Puffer/Q&A (10 min): offene Fragen, individuelle Vertiefung je nach Ziel-Workload der Teilnehmenden.

Dieses Modul setzt zwei Vertiefungsmodule voraus: Kubernetes Storage — Volumes, PersistentVolumes & Claims für PersistentVolume, PersistentVolumeClaim und StorageClass, die hier als bekannt gelten und nicht wiederholt werden, sowie Kubernetes Networking Vertiefung — Service Discovery, DNS und Ingress-Pfadregeln für Headless Services und SRV-Records, die ebenfalls vorausgesetzt und nicht erneut eingeführt werden. Wer einen der beiden Kurse noch nicht abgeschlossen hat, sollte ihn zuerst buchen.

Dieses Modul vertieft damit konkret zwei Vorgängerkurse gleichzeitig, wie zuvor bereits “Kubernetes Security Vertiefung” (dort Administration und Anwendungsdesign) – anders als die übrigen Vertiefungsmodule auf “Kubernetes Workloads & Konfiguration”, die jeweils nur das gemeinsame Workloads-Fundament voraussetzen.

Hands-on Inhalte (Auszug)

StatefulSet mit volumeClaimTemplates anwenden

  • Ein StatefulSet-Manifest mit drei Replicas und einem volumeClaimTemplates-Block (accessModes: [ReadWriteOnce], angeforderte Größe) anwenden
  • Vorab mit kubectl get storageclass die als (default) markierte StorageClass bestätigen (bei Minikube i. d. R. standard mit hostpath-Provisioner)

PVCs pro Replica live prüfen

  • kubectl get pvc ausführen und die drei automatisch angelegten PVCs nach dem Muster <template>-<statefulset>-<ordinal> live sehen
  • In jeden Pod schreiben und bestätigen, dass jeder Pod ausschließlich seine eigene PVC sieht

Headless Service koppeln

  • Einen Headless Service (clusterIP: None) mit passendem Selector anlegen
  • Das serviceName-Feld im StatefulSet auf den Headless Service setzen und das StatefulSet erneut anwenden

Pro-Pod-DNS live auflösen

  • Über einen kurzlebigen Debug-Pod (kubectl run … –rm -it) den DNS-Namen jedes einzelnen Pods auflösen, z. B. nslookup pod-0.<service>.<namespace>.svc.cluster.local
  • Einen Pod gezielt löschen, die automatische Neuerstellung durch das StatefulSet beobachten und bestätigen, dass derselbe DNS-Name wieder auflöst

Dieses Modul ist Teil unserer Pilotphase. Gemeinsam mit euch definieren wir passende Metriken (z. B. Zeit von der Manifest-Anwendung bis zur bestätigten Pro-Pod-DNS-Auflösung) 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