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:
- PVC wird erstellt
- Kubernetes sucht ein passendes PV
- PV wird an PVC gebunden (Bound)
- 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.