Kubernetes PersistentVolume (PV) & PersistentVolumeClaim (PVC) einfach erklärt – Persistenter Speicher richtig nutzen

Container und Pods in Kubernetes sind flüchtig: Sie können jederzeit neu gestartet, verschoben oder gelöscht werden. Lokale Daten gehen dabei verloren. Genau dieses Problem lösen PersistentVolumes (PV) und PersistentVolumeClaims (PVC).

Sie ermöglichen persistenten Speicher, der unabhängig vom Lebenszyklus eines Pods existiert – essenziell für Datenbanken, Uploads, Logs oder zustandsbehaftete Anwendungen.

In diesem Artikel lernst du:

  • was PV und PVC in :contentReference[oaicite:0]{index=0} sind
  • wie persistenter Speicher in Kubernetes funktioniert
  • den Unterschied zwischen PV und PVC
  • YAML-Beispiele aus der Praxis
  • Best Practices und typische Fehler

1) Warum braucht Kubernetes Persistent Volumes?

Standardmäßig sind Container-Dateisysteme ephemer. Wird ein Pod neu erstellt, sind alle lokalen Daten weg.

Typische Probleme ohne Persistent Volumes:

  • Datenverlust bei Pod-Neustarts
  • keine Trennung von Anwendung und Speicher
  • keine Portabilität zwischen Umgebungen

Persistent Volumes lösen diese Probleme durch eine klare Abstraktion zwischen Speicherbereitstellung und Speichernutzung.

2) Was ist ein PersistentVolume (PV)?

Ein PersistentVolume ist eine Cluster-Ressource, die physischen oder virtuellen Speicher beschreibt. Es wird meist von Administratoren oder automatisch über StorageClasses bereitgestellt.

Ein PV ist:

  • clusterweit verfügbar
  • unabhängig von Pods
  • an eine konkrete Storage-Technologie gebunden

Merksatz: PV = angebotener Speicher im Cluster

3) Beispiel: Einfaches PersistentVolume

Dieses PV stellt 10 GiB Speicher über ein lokales Volume bereit (nur für Lern- und Testzwecke).

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data

4) Was ist ein PersistentVolumeClaim (PVC)?

Ein PersistentVolumeClaim ist eine Speicheranforderung durch eine Anwendung. Pods nutzen nie direkt ein PV, sondern immer einen PVC.

Ein PVC beschreibt:

  • wie viel Speicher benötigt wird
  • welche Zugriffsmethoden erlaubt sind
  • optional: welche StorageClass verwendet werden soll

Merksatz: PVC = Speicher-Anfrage einer Anwendung

5) Beispiel: PersistentVolumeClaim

Dieser PVC fordert 5 GiB Speicher an.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
kubectl apply -f pvc.yaml
kubectl get pvc

6) Wie PV und PVC zusammenarbeiten

Kubernetes verknüpft PVCs automatisch mit passenden PVs:

  1. PVC wird erstellt
  2. Kubernetes sucht ein passendes PV
  3. PV wird an PVC gebunden (Bound)
  4. Pod kann den Speicher nutzen

Kriterien für das Matching:

  • Speichergröße
  • AccessMode
  • StorageClass

7) PVC in einem Pod verwenden

So bindest du einen PVC als Volume in einen Pod ein:

apiVersion: v1
kind: Pod
metadata:
  name: pvc-demo-pod
spec:
  containers:
  - name: app
    image: nginx
    volumeMounts:
    - mountPath: /usr/share/nginx/html
      name: data
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: app-pvc

8) Access Modes erklärt

  • ReadWriteOnce (RWO) – Lesen/Schreiben von einem Node
  • ReadOnlyMany (ROX) – Lesen von mehreren Nodes
  • ReadWriteMany (RWX) – Lesen/Schreiben von mehreren Nodes

Nicht jedes Storage-Backend unterstützt alle Modi.

9) Reclaim Policy: Was passiert beim Löschen?

Die persistentVolumeReclaimPolicy bestimmt, was mit dem Speicher passiert, wenn ein PVC gelöscht wird.

  • Retain – Daten bleiben erhalten (Standard für Sicherheit)
  • Delete – Speicher wird gelöscht (Cloud-Volumes)
  • Recycle – veraltet

10) Best Practices für PV & PVC

  • Pods immer über PVCs anbinden, nie direkt an PVs
  • StorageClasses für dynamische Provisionierung nutzen
  • Reclaim Policy bewusst setzen
  • Backups für produktive Volumes einplanen
  • PVs nicht unnötig manuell verwalten

11) Häufige Fehler & Troubleshooting

  • PVC bleibt auf Pending → kein passendes PV / StorageClass
  • Pod startet nicht → PVC nicht gebunden
  • Daten weg → falsche Reclaim Policy
kubectl get pv
kubectl get pvc
kubectl describe pvc <name>

12) Fazit

PersistentVolumes und PersistentVolumeClaims bilden das Fundament für persistente Daten in Kubernetes. Sie trennen Speicherbereitstellung von Speichernutzung und ermöglichen robuste, zustandsbehaftete Anwendungen.

Faustregel: PV stellt Speicher bereit – PVC fordert ihn an – Pods nutzen ihn.

Nach oben scrollen