StatefulSets für zustandsbehaftete Apps
Deployen und verwalten Sie zustandsbehaftete Anwendungen wie Datenbanken mit StatefulSets und stellen Sie stabile Netzwerkkennungen sowie persistenten Speicher sicher.
StatefulSets für zustandsbehaftete Apps ist eine kostenlose DevOps Bootcamp-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des DevOps Bootcamp-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der DevOps Bootcamp-Kurs umfasst insgesamt 4 Lektionen.
StatefulSets für zustandsbehaftete Apps
Willkommen! In dieser Lektion beschäftigen wir uns ausführlich mit StatefulSets, einem Kubernetes-Objekt zur Verwaltung zustandsbehafteter Anwendungen.
Im Gegensatz zu zustandslosen Apps, die sich problemlos skalieren und ersetzen lassen, benötigen zustandsbehaftete Apps für jede Instanz eine eindeutige Identität und persistenten Speicher. Dazu zählen Datenbanken, Nachrichtenwarteschlangen oder benutzerdefinierte Anwendungen, die Daten lokal speichern.
Warum Stateful? Die Herausforderung
Herkömmliche Deployments eignen sich hervorragend für zustandslose Anwendungen. Wenn ein Pod ausfällt, wird er durch einen neuen ersetzt. Dabei spielt es keine Rolle, welcher Pod die Anfrage verarbeitet.
Bei zustandsbehafteten Apps benötigt jedes Replikat jedoch häufig eine stabile, eindeutige Identität und eigenen dedizierten Speicher. Wenn ein Datenbank-Pod neu gestartet wird, muss er wieder eine Verbindung zu seinem spezifischen Daten-Volume herstellen.
Stabile Netzwerk- und Pod-Identität
Eine wichtige Funktion von StatefulSets besteht darin, jedem Pod eine stabile, eindeutige Netzwerkkennung bereitzustellen.
- Pods werden vorhersehbar und geordnet benannt, z. B.
web-0undweb-1. - Bei Neustarts behalten sie ihre Hostnamen.
- Dadurch können andere Services zuverlässig eine Verbindung zu einem bestimmten Replikat herstellen.
Stabiler und persistenter Speicher
StatefulSets stellen sicher, dass jeder Pod eigenen stabilen, persistenten Speicher erhält. Dies wird mithilfe von Persistent Volume Claims (PVCs) umgesetzt.
Wenn ein StatefulSet-Pod erstellt wird, wird automatisch ein PVC auf Grundlage einer Definition von volumeClaimTemplates bereitgestellt. Fällt der Pod aus und wird neu erstellt, wird er wieder mit demselben PVC und damit mit seinen ursprünglichen Daten verbunden.
Aufbau eines StatefulSet-YAMLs
Eine StatefulSet-YAML-Definition sieht einem Deployment ähnlich, enthält jedoch einige wichtige Ergänzungen. Dazu gehören:
apiVersion,kind,metadataspec.replicas,spec.selector,spec.template(wie bei Deployments)spec.serviceName: Verweist auf einen headless Service.spec.volumeClaimTemplates: Legt fest, wie PVCs für jeden Pod erstellt werden.
Headless Service für stabile IDs
Damit StatefulSets stabile Netzwerkidentitäten bereitstellen können, benötigen sie einen Headless Service. Ein headless Service verfügt über keine Cluster-IP. Stattdessen gibt er direkt die IP-Adressen der von ihm ausgewählten Pods zurück.
Das StatefulSet verwendet diesen Service, um DNS-Einträge für jeden seiner Pods zu registrieren, z. B. pod-0.my-service.my-namespace.svc.cluster.local.
apiVersion: v1
kind: Service
metadata:
name: my-app-headless
spec:
ports:
- port: 80
name: web
clusterIP: None # This makes it a headless service
selector:
app: my-appVolumeClaimTemplates
Der Abschnitt volumeClaimTemplates ist spezifisch für StatefulSets. Er dient als Vorlage für die Persistent Volume Claims (PVCs), die für jedes Replikat erstellt werden.
Jeder Pod im StatefulSet, z. B. my-app-0 und my-app-1, erhält auf Grundlage dieser Vorlage einen eigenen PVC, z. B. data-my-app-0 und data-my-app-1. Dadurch wird dedizierter Speicher sichergestellt.
volumeClaimTemplates:
- metadata:
name: data # This name is used in Pod's volumeMounts
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 1GiVollständiges StatefulSet-Beispiel
Hier sehen Sie ein vollständiges Beispiel für ein einfaches Nginx-StatefulSet. Beachten Sie serviceName, das mit dem headless Service verknüpft ist, sowie volumeClaimTemplates.
Um dieses StatefulSet bereitzustellen, speichern Sie es als nginx-statefulset.yaml und führen Sie kubectl apply -f nginx-statefulset.yaml aus.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx-headless" # Must match headless service name
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www # Mounts the volume from the PVC
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www # This name links to volumeMounts.name
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: nginx-headless
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginxBenennung und Reihenfolge von Pods
Nach der Bereitstellung sehen Sie Pods mit Namen wie web-0 und web-1. Diese Indizes sind stabil und eindeutig.
StatefulSets erzwingen bei Skalierungsvorgängen eine strikte Reihenfolge. Pods werden der Reihe nach erstellt (0, 1, 2, …) und in umgekehrter Reihenfolge beendet (…, 2, 1, 0).
Diese geordnete Vorgehensweise ist für viele verteilte zustandsbehaftete Systeme entscheidend, um die Konsistenz zu wahren.
Skalierung und Rolling Updates
Sie können ein StatefulSet genau wie ein Deployment skalieren, indem Sie kubectl scale statefulset web --replicas=3 verwenden.
Auch Rolling Updates sind möglich, wobei dieselben Garantien für die Reihenfolge gelten: Pods werden einzeln in umgekehrter ordinaler Reihenfolge aktualisiert. Dabei wird der nächste Pod erst aktualisiert, wenn der vorherige bereit ist.
Diese sorgfältige Orchestrierung minimiert Unterbrechungen bei zustandsbehafteten Anwendungen.
Überprüfen Sie Ihr Verständnis
Welche der folgenden Aussagen beschreiben wichtige Eigenschaften oder Anforderungen von Kubernetes-StatefulSets?
Zusammenfassung: StatefulSets in der Praxis
Sehr gut! In dieser Lektion haben Sie StatefulSets kennengelernt, ein leistungsfähiges Kubernetes-Objekt zur Verwaltung zustandsbehafteter Anwendungen.
- Sie stellen stabile Netzwerkidentitäten und geordnete Abläufe bereit.
- Mit
volumeClaimTemplatesverwenden sie dedizierten, persistenten Speicher für jedes Replikat. - Ein headless Service ist für ihre stabilen Netzwerk-IDs unerlässlich.
StatefulSets sind grundlegend für den zuverlässigen Betrieb von Datenbanken und anderen kritischen zustandsbehafteten Workloads unter Kubernetes.
Häufig gestellte Fragen
Ist die Lektion „StatefulSets für zustandsbehaftete Apps“ kostenlos?
Ja — der vollständige Text von „StatefulSets für zustandsbehaftete Apps“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des DevOps Bootcamp-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der DevOps Bootcamp-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „StatefulSets für zustandsbehaftete Apps“?
Deployen und verwalten Sie zustandsbehaftete Anwendungen wie Datenbanken mit StatefulSets und stellen Sie stabile Netzwerkkennungen sowie persistenten Speicher sicher. Du übst DevOps Bootcamp mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um DevOps Bootcamp zu starten?
Keine Vorkenntnisse erforderlich. DevOps Bootcamp auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „StatefulSets für zustandsbehaftete Apps“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser DevOps Bootcamp-Lektion Code schreiben und ausführen?
Ja. Jede DevOps Bootcamp-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- StatefulSets für zustandsbehaftete Apps
- DaemonSets für Node-spezifische Aufgaben
- Kubernetes-Operatoren verstehen
- Custom Resource Definitions (CRDs)