Persistent Volumes (PV) und Persistent Volume Claims (PVC) stellen in Kubernetes dauerhafte Speicherkapazitäten zur Verfügung, die im Gegensatz zu ephemeren Volumen wie EmptyDir eine langfristige Datenpersistenz ermöglichen. Durch die Abstraktion der Speicherressourcen von den eigentlichen Pods vereinfachen PV und PVC die Speicherzuweisung und -verwaltung und gewährleisten eine effiziente und zuverlässige Datenhaltung.
Released.Available für
neue PVCs zur Verfügung.Hinweis: Die Recycle Policy wird als veraltet betrachtet und ist in neueren Kubernetes-Versionen nicht mehr empfohlen. Stattdessen wird die Verwendung von StorageClass-Objekten mit der Delete Policy oder anderen dynamischen Provisionierungsmethoden empfohlen. ## Konfigurationsbeispiel
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: standard
nfs:
path: /var/lib/nfs/data
server: 10.0.0.2apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: standardIn diesem Beispiel:
Retain,
Delete und Recycle.In diesem Beispiel wird eine Kubernetes-Umgebung dargestellt, in der
eine StorageClass für das dynamische Volumen-Provisioning
definiert ist. Es wird gezeigt, wie ein PersistentVolume
(PV) und ein PersistentVolumeClaim (PVC) erstellt werden,
um Speicherressourcen zuzuweisen. Ein Pod verwendet diesen Claim, um
einen Speicherbereich an einen Mount-Punkt innerhalb des Containers zu
binden.
Die StorageClass my-local-storage definiert, wie ein
PersistentVolume (PV) bereitgestellt wird. Es wird angegeben, dass kein
automatischer Provisioner für die Bereitstellung des Volumes genutzt
wird (provisioner: kubernetes.io/no-provisioner). Das
Volume wird erst gebunden
(volumeBindingMode: WaitForFirstConsumer), wenn ein Pod,
der es anfordert, tatsächlich instanziiert wird. Die Möglichkeit zur
Erweiterung des Volumes wird durch
allowVolumeExpansion: true gegeben.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: truemy-persistent-volume definiert ein PV mit 1 Gi
Speicherplatz. Die Zugriffsmöglichkeit ist auf
ReadWriteOnce gesetzt, was bedeutet, dass das Volume auf
genau einem Node im Read-Write-Modus gemountet werden kann. Durch
hostPath wird ein lokaler Pfad
(/var/tmp/my-data) auf dem Node als Speicherort für das
Volume festgelegt. Die
persistentVolumeReclaimPolicy: Recycle besagt, dass Daten
auf dem Volume beim Löschen des PV nicht dauerhaft gelöscht, sondern für
neue Claims zur Verfügung stehen.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-persistent-volume
spec:
storageClassName: my-local-storage
persistentVolumeReclaimPolicy: Recycle
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /var/tmp/my-dataDas PVC my-pvc fordert Speicher von der
my-local-storage StorageClass an, mit der
Zugriffsmöglichkeit ReadWriteOnce und einer Größe von 100
Mi. Dieses PVC wird dann verwendet, um Speicheranforderungen für Pods zu
erfüllen.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: my-local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100MiDer Pod my-pv-pod startet einen Container mit dem Image
busybox und führt einen Befehl aus, der eine Nachricht in
eine Datei (/output/erfolg.txt) innerhalb des gemounteten
Volumes schreibt. Der volumeMounts-Abschnitt verbindet das
durch my-pvc definierte PVC mit dem Pfad
/output im Container. Der Pod verwendet Never
als restartPolicy, was bedeutet, dass der Container nicht
automatisch neu gestartet wird, wenn er beendet wird.
apiVersion: v1
kind: Pod
metadata:
name: my-pv-pod
spec:
restartPolicy: Never
containers:
- name: my-busybox
image: busybox
command: ["sh", "-c", "echo Hallo, dies ist ein Persistent Volume Claim Test >> /output/erfolg.txt"]
volumeMounts:
- mountPath: /output
name: my-volume-mount
volumes:
- name: my-volume-mount
persistentVolumeClaim:
claimName: my-pvc