Kubernetes Persistent Volume Claims erklärt
Ein persistentes Kubernetes-Volume (Persistent Volume, PV) ist ein Objekt, das Pods den Zugriff auf persistenten Speicher auf einem Speichergerät ermöglicht, das über eine Kubernetes-StorageClass definiert ist. Im Gegensatz zu regulären Volumes, die flüchtiger Natur sind, sind PVs persistent und unterstützen zustandsbehaftete Anwendungsfälle. Ein PV ist ein Ressourcenobjekt in einem Kubernetes-Cluster, das auch nach der Zerstörung der Pods, die es verwenden, weiter besteht.
PVs müssen über Persistent Volume Claims (PVCs) angefordert werden, also über Speicheranforderungen. Ein PVC ist im Wesentlichen eine Anforderung zum Mounten eines PV, das bestimmte Anforderungen erfüllt, auf einem Pod. PVCs geben kein bestimmtes PV an, sondern die vom Pod benötigte StorageClass. Administratoren können StorageClasses definieren, die Eigenschaften von Speichergeräten wie Leistung, Servicelevel und Back-End-Richtlinien angeben.
Ein großer Vorteil des PVC-Musters in Kubernetes besteht darin, dass Entwickler Speicherressourcen dynamisch anfordern können, ohne die Implementierung der zugrunde liegenden Speichergeräte zu kennen.
Um einen Pod an ein PV zu binden, muss der Pod eine Volume-Einbindung und ein PVC enthalten. Diese Deklarationen ermöglichen es Benutzern, PVs in Pods einzubinden, ohne die Details der zugrunde liegenden Speichergeräte zu kennen.
Es gibt zwei Möglichkeiten, PVs an einem Pod zu montieren:
Dieses Tutorial veranschaulicht die Funktionsweise von PVs und PVCs. Es ist eine Zusammenfassung des vollständigen Tutorials, das in der Kubernetes-Dokumentation verfügbar ist.
Richten Sie einen Kubernetes-Cluster mit einem einzelnen Knoten ein und stellen Sie sicher, dass die kubectl-Befehlszeile eine Verbindung zur Steuerungsebene hat. Erstellen Sie auf dem Knoten ein Verzeichnis wie folgt:
sudo mkdir /mnt/data
Erstellen Sie eine Datei index.html im Verzeichnis.

Führen Sie diesen Befehl aus, um das PV auf Ihrem Knoten zu erstellen:
kubectl apply -f https://k8s.io/examples/pods/storage/pv-volume.yaml

kubectl apply -f https://k8s.io/examples/pods/storage/pv-claim.yaml
Wenn Sie einen persistenten Volume-Anspruch erstellen, findet die Kubernetes-Steuerebene das richtige PV. Wenn es gefunden wird, wird das PVC an das PV gebunden.
Überprüfen Sie den Status des zuvor erstellten PV, indem Sie Folgendes ausführen:
kubectl get pv task-pv-volume
Wenn die Bindung erfolgreich ist, sollte die Ausgabe folgendermaßen aussehen:

Erstellen Sie abschließend einen Pod, der den PVC verwendet. Führen Sie den Pod mit dem NGINX-Image aus und geben Sie den zuvor erstellten PVC im entsprechenden Abschnitt der Pod-Spezifikation an:

Verwenden Sie einen Bash-Befehl, um Curl in Ihrem Pod zu installieren, und führen Sie diesen Befehl aus:
curl http://localhost/
Die Ausgabe sollte den Inhalt der in Schritt 1 erstellten Datei index.html anzeigen. Sie sollte zeigen, dass der neue Pod über den PVC auf Daten im PV zugreifen kann.
Die Verwendung von Kubernetes PVC kann komplex sein, was zu Fehlern führen kann, die schwer zu diagnostizieren und zu beheben sind. PVC-Fehler lassen sich im Allgemeinen auf drei große Kategorien zurückführen: Probleme bei der Erstellung von PVs, Probleme bei der Bereitstellung von PVs und Änderungen der PV- oder PVC-Spezifikationen.
Die häufigsten Fehler im Zusammenhang mit PVCs sind FailedAttachVolume, FailedMount und CrashLoopBackOff.
Diese beiden Fehler weisen darauf hin, dass ein Pod ein PV nicht mounten konnte. Der Unterschied besteht darin, dass „FailedAttachVolume“ auftritt, wenn sich ein Volume nicht von einem vorherigen Knoten trennen lässt, und „FailedMount“, wenn sich ein Volume nicht im erforderlichen Pfad mounten lässt.
Für diese beiden Fehler gibt es zahlreiche mögliche Ursachen, darunter ein Ausfall des neuen Knotens, zu viele an den neuen Knoten angeschlossene Festplatten, ein Fehler bei der Netzwerkpartitionierung und ein Ausfall von Speichergeräten auf dem vorherigen Knoten.
Diagnose des Problems
Um die Ursache von Problemen wie FailedAttachVolume und FailedMount zu diagnostizieren, führen Sie den Befehl „describe pod“ aus. Suchen Sie im Abschnitt „Ereignisse“ nach der Fehlermeldung. Die Meldung sollte auch Informationen zur Fehlerursache enthalten.
Problemlösung
Kubernetes kann die Fehler „FailedAttachVolume“ und „FailedMount“ nicht automatisch beheben, daher müssen Sie das Problem manuell beheben:
CrashLoopBackOff zeigt an, dass ein Pod wiederholt abgestürzt, neu gestartet und erneut abgestürzt ist. In einigen Fällen tritt dieser Fehler aufgrund beschädigter PersistentVolumeClaims auf.
Diagnose des Problems
Um festzustellen, ob ein CrashLoopBackOff-Fehler auf einen PVC zurückzuführen ist, überprüfen Sie die Protokolle der vorherigen Containerinstanz, die den PV bereitgestellt hat, überprüfen Sie die Bereitstellungsprotokolle und führen Sie bei Bedarf eine Shell auf dem Container aus, um die Absturzursache zu ermitteln.
Problemlösung
Wenn CrashLoopBackOff das Ergebnis eines Problems mit einem PVC ist, versuchen Sie die folgenden Schritte:
kubectl get deployment -o jsonpath="{.spec.template.spec.volumes[*].persistentVolumeClaim.claimName}" failed-deployment
exec -it volume-debugger sh
NetApp Cloud Volumes ONTAP, die führende Speicherverwaltungslösung für Unternehmen, bietet sichere und bewährte Speicherverwaltungsdienste auf AWS, Azure und Google Cloud. Die Kapazität von Cloud Volumes ONTAP ist bis in den Petabyte-Bereich skalierbar und unterstützt verschiedene Anwendungsfälle wie Dateidienste, Datenbanken, DevOps oder andere Unternehmens-Workloads mit einem leistungsstarken Funktionsumfang, darunter Hochverfügbarkeit, Datenschutz, Speichereffizienz, Kubernetes-Integration und mehr.
Insbesondere unterstützt Cloud Volumes ONTAP die Bereitstellungs- und Verwaltungsanforderungen von Kubernetes Persistent Volume für containerisierte Workloads.