Sobes.tech
Junior

Bleibt bei einem Deployment ein Zustand erhalten?

sobes.tech KI

Antwort von AI

Beim Bereitstellen eines Deployments in Kubernetes wird der Zustand nicht innerhalb des Deployment-Controllers selbst gespeichert. Deployment verwaltet ein ReplicaSet, das wiederum die Pods verwaltet. Pods sind per Natur vergänglich und können neu gestartet oder gelöscht werden.

Der Zustand für Anwendungen, die mit Deployment bereitgestellt werden, wird in der Regel durch andere Mechanismen gespeichert:

  • Persistent Volumes (PV) und Persistent Volume Claims (PVC): Werden verwendet, um Daten zu speichern, die auch nach dem Löschen oder Neustarten der Pods zugänglich bleiben sollen. PV stellt Speicher bereit, und PVC fordert ihn an.
  • ConfigMaps und Secrets: Werden verwendet, um Konfigurationsdaten und sensible Informationen (Passwörter, Schlüssel) getrennt vom Container-Image zu speichern.
  • StatefulSets: Ein speziell entwickelter Controller zur Verwaltung zustandsbehafteter Anwendungen. StatefulSets garantieren eine stabile Netzwerkidentifikation und persistenten Speicher für jeden Pod sowie eine geordnete Bereitstellung und Skalierung.

Beispiel für eine PVC-Anfrage in einem Pod-Manifest:

# Definition eines Pods, der PVC verwendet
apiVersion: v1
kind: Pod
metadata:
  name: meine-statische-anwendung
spec:
  containers:
  - name: mein-container
    image: mein-image
    volumeMounts:
    - name: daten-volumen
      mountPath: /daten
  volumes:
  - name: daten-volumen
    persistentVolumeClaim:
      claimName: mein-pvc

Beispiel für die Definition eines StatefulSet:

# Definition eines StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mein-statefulset
spec:
  serviceName: "mein-service"
  replicas: 3
  selector:
    matchLabels:
      app: meine-statische-anwendung
  template:
    metadata:
      labels:
        app: meine-statische-anwendung
    spec:
      containers:
      - name: mein-container
        image: mein-image
        volumeMounts:
        - name: mein-volumen
          mountPath: /daten
  volumeClaimTemplates:
  - metadata:
      name: mein-volumen
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Der Deployment speichert also keinen Zustand. Seine Aufgabe ist es, die erforderliche Anzahl an Pod-Replikaten bereitzustellen, ohne deren individuelle Identität oder Zustand zwischen Neustarts zu bewahren. Für zustandsbehaftete Anwendungen werden StatefulSets, PV/PVC, ConfigMaps und Secrets verwendet.