Menü

Kubernetes Persistent Volume Claims Explained

Inhalt

Diese Seite teilen

Yifat Perry
Yifat Perry

Kubernetes Persistent Volume Claims erklärt

Was sind Persistente Kubernetes-Volumes und Persistente Volume-Ansprüche?

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.

Ansprüche auf persistente Datenträger: Statische vs. dynamische Bereitstellung

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:

  • Bei der statischen Konfiguration erstellen Administratoren manuell PVs und definieren eine StorageClass, die den Kriterien dieser PVs entspricht. Wenn ein Pod ein PVC verwendet, das die StorageClass angibt, erhält er Zugriff auf eines dieser statischen PVs.
  • Eine dynamische Konfiguration erfolgt, wenn kein statisches PV vorhanden ist, das dem PVC entspricht. In diesem Fall stellt der Kubernetes-Cluster basierend auf den StorageClass-Definitionen ein neues PV bereit.

Erstellen eines persistenten Volume-Anspruchs und Binden an ein persistentes Volume

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.

1. Einrichten eines Knotens

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.

2. Erstellen eines persistenten Volumes

Erstellen Sie eine YAML-Datei wie die folgende, um ein PV zu definieren.

k8s pvc 1

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

3. Erstellen eines persistenten Volume-Anspruchs und Binden an ein persistentes Volume

Erstellen Sie ein PVC, das ein PV erfordert, das den folgenden Bedingungen unterliegt, damit es mit dem zuvor erstellten PV übereinstimmt:
  • 3 GB oder mehr Speicherkapazität
  • Lese-/Schreibzugriff aktivieren

k8s pvc 2

Führen Sie diesen Befehl aus, um den PVC anzuwenden:
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:

k8s pvc 3

4. Erstellen eines Pods und Einbinden des persistenten Volume-Claims

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:

k8s pvc 4

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.

Kubernetes PVC-Fehler: Häufige Ursachen und Lösung

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.

FailedAttachVolume- und FailedMount-Fehler

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:

  • Wenn die Fehlerursache ein Fehler beim Trennen ist, verwenden Sie die Schnittstelle des Speichergeräts, um das Volume manuell zu trennen.
  • Wenn der Fehler „Fehler beim Anhängen oder Mounten“ lautet, prüfen Sie, ob ein Problem mit der Netzwerkpartitionierung oder ein falscher Netzwerkpfad vorliegt. Wenn dies nicht der Fall ist, versuchen Sie, Kubernetes dazu zu bringen, den Pod auf einem anderen Knoten zu planen, oder untersuchen und beheben Sie das Problem auf dem neuen Knoten.

CrashLoopBackOff-Fehler aufgrund eines PersistentVolumeClaim

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:

  1. Skalieren Sie die Bereitstellung auf 0 Instanzen, um das Debuggen zu ermöglichen.
  2. Rufen Sie die Kennung des fehlgeschlagenen PVC mithilfe dieser Abfrage ab:
    kubectl get deployment -o jsonpath="{.spec.template.spec.volumes[*].persistentVolumeClaim.claimName}" failed-deployment 
    
  3. Erstellen Sie einen neuen Pod zum Debuggen und führen Sie mit diesem Befehl eine Shell aus:
    exec -it volume-debugger sh
    
  4. Identifizieren Sie das aktuell im Verzeichnis /data gemountete Volume und beheben Sie das Problem, das zum Absturz des Pods führt.
  5. Beenden Sie die Shell, löschen Sie den Debug-Pod und skalieren Sie die Bereitstellung auf die erforderliche Anzahl von Replikaten zurück.

Kubernetes-Speicheroptimierung mit Cloud Volumes ONTAP

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.

Drift chat loading