Sobes.tech
Middle

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