Pirate
Janis Hahn
October 22, 2024

101 Series - StatefulSets vs Deployments

In Kubernetes gibt es verschiedene Möglichkeiten, Anwendungen bereitzustellen, abhängig von deren Anforderungen. In dieser Ausgabe der 101-Series werfen wir einen Blick auf die grundlegenden Unterschiede zwischen Stateful und Stateless Anwendungen und wie diese mit StatefulSets und Deployments betrieben werden.
101 Series StatefulSets vs Deployments

Was bedeutet "Stateless"?

Eine Stateless Anwendung speichert keinen Zustand zwischen verschiedenen Anfragen. Jede Interaktion wird isoliert und unabhängig von vorherigen Anfragen behandelt. Das bedeutet, dass bei jeder neuen Anfrage der gesamte Kontext, den die Anwendung benötigt, mitgeliefert werden muss, da die Anwendung selbst sich nichts “merkt”.

Beispiel Stateless

Stell dir vor, du gehst zu McDonald’s und bestellst jedes Mal etwas anderes, aber der Kassierer merkt sich nie, was du vorher bestellt hast. Jede Bestellung steht für sich alleine – das ist Stateless.

Was bedeutet "Stateful"?

Im Gegensatz dazu behalten Stateful Anwendungen Informationen über vorherige Interaktionen und speichern Daten zwischen Anfragen. Das bedeutet, dass die Anwendung auch nach einer Unterbrechung oder einem Neustart weiterhin auf den gespeicherten Zustand zugreifen kann.

Beispiel Stateful

Stell dir vor, du bist Stammkunde in deinem Lieblingscafé. Der Barista weiß schon, was du trinken willst, sobald du durch die Tür gehst. Er merkt sich, was du beim letzten Mal bestellt hast – das ist Stateful.

Kubernetes Deployments: Perfekt für stateless Anwendungen

Ein Deployment ist in Kubernetes eine Gruppe von Stateless Instanzen einer einzelnen Anwendung und besonders einfach zu skalieren. Wenn der Zustand nicht gespeichert wird, kann jede Instanz der Anwendung gleich behandelt werden. Neue Instanzen (Pods) können hinzugefügt oder entfernt werden, ohne dass es zu Inkonsistenzen kommt, da keine Zustandsinformationen über den Pod hinausgehen. Dies ist oft die bevorzugte Architektur bei Anwendungen wie Webservern oder API-Gateways, wo jede Anfrage für sich alleine steht.

  • Einfaches Skalieren: Du kannst deine Anwendung problemlos horizontal skalieren, indem du die Anzahl der Pods erhöhst.
  • Pods sind austauschbar: Wenn ein Pod abstürzt, startet Kubernetes einfach einen neuen, ohne dass du dir Gedanken um den Zustand machen musst.
  • Load Balancing: Kubernetes verteilt eingehende Anfragen automatisch auf alle verfügbaren Pods.

Kubernetes StatefulSets: Ideal für stateful Anwendungen

In Kubernetes sind stateful Anwendungen schwieriger zu skalieren und zu verwalten, da der Zustand, den jede Instanz speichert, mit der Anwendung verknüpft ist. StatefulSets, eine spezielle Ressource in Kubernetes, helfen dabei, stateful Anwendungen zu verwalten. Sie stellen sicher, dass Pods in einer definierten Reihenfolge gestartet werden und dass jeder Pod eine "persistente Identität" (z.B. Hostname oder Speicherplatz über PersistentVolumes) hat. Dies ist besonders bei Datenbanken oder Anwendungen notwendig, die auf beständige Daten zugreifen müssen.

  • Stabile Identität: Jeder Pod hat einen festen Namen und einen fest zugewiesenen Hostname, der auch nach einem Neustart erhalten bleibt.
  • Persistenter Speicher: Jeder Pod kann auf seinen eigenen, persistenten Speicher zugreifen, der nicht verloren geht, wenn der Pod neu erstellt wird.
  • Reihenfolge beim Starten und Beenden: StatefulSets stellen sicher, dass Pods in einer bestimmten Reihenfolge gestartet und heruntergefahren werden, was für einige Anwendungen wichtig ist.

Fazit

Wenn deine Anwendung keine dauerhaften Informationen speichern muss, dann ist ein Deployment ideal. Für Anwendungen, die einen Zustand beibehalten müssen, benötigst du ein StatefulSet. Die Wahl zwischen den beiden hängt also stark von der Art deiner Anwendung ab.

Habt ihr noch Fragen oder Feedback zu Deployments und StatefulSets? Weitere Details dazu lernt ihr zum Beispiel in unserer Kubernetes Einführungsschulung! Zögert nicht, uns zu kontaktieren – schreibt uns eine kurze Nachricht oder nutzt den Chat auf unserer Website. Wir freuen uns auf eure Rückmeldungen!