Was sind PV und PVC im Kontext von Kubernetes?
sobes.tech KI
Antwort von AI
Persistierendes Volume (PV) ist eine Speicherressource im Kubernetes-Cluster. Es abstrahiert die Details der spezifischen Implementierung des Speichers für die Verbraucher. PV wird vom Cluster-Administrator verwaltet und existiert unabhängig vom Lebenszyklus eines Pods.
Persistent Volume Claim (PVC) ist eine Benutzeranfrage für Speicher. Der Benutzer fordert ein Speicher-Volumen mit bestimmten Eigenschaften (Größe, Zugriffsmodus) an. Die PVC wird mit einem passenden PV verbunden. Falls kein geeignetes PV gefunden wird, kann eine dynamische Bereitstellung eines neuen PV erfolgen, wenn ein entsprechender StorageClass konfiguriert ist.
Hauptunterschiede und Interaktionen:
- PV: Repräsentiert die tatsächliche Speicherressource.
- PVC: Repräsentiert die Speicheranfrage des Benutzers.
- PVC wird mit PV verbunden.
- PV kann statisch vom Administrator erstellt oder dynamisch in Antwort auf eine PVC unter Verwendung eines StorageClass erstellt werden.
- Ein Pod verweist auf PVC, nicht direkt auf PV, was die Trennung der Anwendungslogik von den Speicher-Details ermöglicht.
Zugriffsmodi (Access Modes) für PV und PVC:
ReadWriteOnce(RWO): Das Volume kann von einem einzelnen Knoten gleichzeitig gelesen und geschrieben werden.ReadOnlyMany(ROX): Das Volume kann von vielen Knoten gleichzeitig nur gelesen werden.ReadWriteMany(RWX): Das Volume kann von vielen Knoten gleichzeitig gelesen und geschrieben werden.
Beispiel YAML für PV und PVC:
# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # Was mit dem Volume nach der Löschung der PVC geschehen soll (Retain, Recycle, Delete)
storageClassName: local-storage # Kann für die Verbindung mit einem StorageClass verwendet werden
local:
path: /mnt/data
nodeAffinity: # Affinität für lokalen Speicher
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- my-node
# persistent-volume-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: local-storage # Verknüpft mit PV oder StorageClass
# pod-using-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: nginx
volumeMounts:
- name: app-storage
mountPath: /usr/share/nginx/html
volumes:
- name: app-storage
persistentVolumeClaim:
claimName: my-pvc # Verweis auf PVC