44 StatefulSets

44.1 Einführung

StatefulSets sind eine spezielle Art von Controller in Kubernetes, die für die Verwaltung von stateful Anwendungen entwickelt wurden. Im Gegensatz zu Deployments, die für stateless Anwendungen verwendet werden, bieten StatefulSets Mechanismen, um sicherzustellen, dass jeder Pod in einem Set eine stabile, eindeutige Netzwerkidentität und beständige Speicherverbindungen hat.

44.2 Eigenschaften von StatefulSets

  1. Stabile, eindeutige Netzwerknamen: Jeder Pod in einem StatefulSet erhält einen dauerhaften, eindeutigen Netzwerknamen.
  2. Beständige Speicher: Jeder Pod kann an ein persistentes Volume gebunden werden, das seine Daten beibehält, auch wenn der Pod neu gestartet oder verschoben wird.
  3. Geordnete Bereitstellung und Skalierung: Pods in einem StatefulSet werden in einer bestimmten Reihenfolge bereitgestellt und skaliert.
  4. Geordnete Updates: Updates an Pods erfolgen ebenfalls in einer bestimmten Reihenfolge.

44.3 Anwendungsfälle

StatefulSets eignen sich besonders für Anwendungen, die einen stabilen, eindeutigen Netzwerkbezeichner und persistenten Speicher benötigen, wie z.B. Datenbanken, verteilte Dateisysteme und andere stateful Anwendungen.

44.4 Beispielkonfiguration

1. Erstellen eines StatefulSets

Erstellen Sie eine YAML-Datei statefulset.yaml mit folgendem Inhalt:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
  namespace: default
spec:
  serviceName: "nginx"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

2. Erstellen eines Headless Service

Ein Headless Service wird benötigt, um die Netzwerkkonnektivität für die Pods in einem StatefulSet zu ermöglichen:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx

Deployen Sie den Service und das StatefulSet:

kubectl apply -f headless-service.yaml
kubectl apply -f statefulset.yaml

44.5 StatefulSet Verwaltung

Überprüfen des StatefulSets

Überprüfen Sie die laufenden Pods und das StatefulSet:

kubectl get statefulsets
kubectl get pods -l app=nginx

Skalieren eines StatefulSets

StatefulSets können wie Deployments skaliert werden:

kubectl scale statefulset web --replicas=5

Updates an StatefulSets

Updates an StatefulSets erfolgen geordnet und sicher, um sicherzustellen, dass die Anwendung konsistent bleibt. Ändern Sie die StatefulSet Konfiguration und wenden Sie die Änderungen an:

kubectl apply -f statefulset.yaml

StatefulSets bieten eine robuste Lösung für die Verwaltung von stateful Anwendungen in Kubernetes. Durch die Bereitstellung stabiler Netzwerkidentitäten und beständiger Speicher ermöglichen StatefulSets eine konsistente und zuverlässige Verwaltung von stateful Workloads. Ein tiefes Verständnis der Funktionsweise und der Verwaltung von StatefulSets ist entscheidend für den erfolgreichen Einsatz stateful Anwendungen in Kubernetes.