Ein StatefulSet ist der Workload-Controller in Kubernetes für zustandsbehaftete Anwendungen. Anders als ein Deployment behandelt es seine Pods nicht als beliebig austauschbar, sondern gibt jedem Pod eine dauerhaft stabile Identität.

Stabile Identität, Speicher und Reihenfolge

  • Stabile Netzwerk-Identität: Jeder Pod erhält einen festen Namen mit Ordnungsnummer (Ordinal-Index), etwa db-0, db-1, db-2. Dafür ist ein Headless Service (clusterIP: None) nötig, dessen DNS-Einträge direkt auf die einzelnen Pods zeigen.
  • Stabile Speicherzuordnung: Jeder Pod bekommt seinen eigenen PersistentVolumeClaim. Wird der Pod auf einen anderen Node verschoben, wandert der Speicher mit – Daten gehen nicht verloren.
  • Geordnete Abläufe: Beim Hochskalieren startet Pod N erst, wenn Pod N-1 bereit ist; beim Herunterskalieren wird in umgekehrter Reihenfolge beendet. Updates laufen mit der Strategie RollingUpdate (mit partition-Parameter) oder OnDelete.

Typische Einsätze sind Datenbanken (PostgreSQL, MySQL), Nachrichten-Dienste wie Kafka oder verteilte Systeme wie etcd und Zookeeper, bei denen jede Instanz eine eigene Identität und eigenen Speicher braucht.

Ein StatefulSet ist damit die Ergänzung zum Deployment (stateless) und zum DaemonSet (ein Pod je Node). Grundlagen zu den kleinsten Einheiten liefert der Artikel Pod.