Die Verwaltung von Storage für zustandsbehaftete Anwendungen ist ein entscheidender Aspekt der Containerorchestrierung. Kubernetes Persistent Volume (PV) ist eine grundlegende Funktion, die diesem Bedarf gerecht wird, indem sie einen Mechanismus zum Verwalten von Storage-Ressourcen unabhängig vom Lebenszyklus einzelner Pods bereitstellt. In diesem Artikel werden wir uns mit dem Konzept von Kubernetes Persistent Volume, seinen Funktionen und Best Practices für die effektive Verwendung in Ihren Kubernetes-Clustern befassen.
Was ist Kubernetes Persistentes Volume?
Ein Kubernetes Persistentes Volume (PV) ist eine Storage-Ressource in einem Kubernetes-Cluster, die die zugrunde liegende Storage-Technologie abstrahiert. Im Gegensatz zu temporärem Storage, der an den Lebenszyklus eines Pods gebunden ist und verschwindet, wenn der Pod beendet wird, bieten PVs eine Möglichkeit, persistenten Storage zu verwalten und Anwendungen zuzuweisen. Dadurch wird sichergestellt, dass die Daten intakt bleiben, selbst wenn die darauf zugreifenden Pods beendet oder verschoben werden.
Die Verwendung persistenter Volumes bietet Vorteile wie:
- Storage-Abstraktion: PVs verbergen die Besonderheiten des physischen Storage (z. B. lokale Festplatten, SAN, Cloud-Storage) von den Pods. Benutzer können Storage anfordern, ohne die spezifischen Implementierungsdetails kennen zu müssen.
- Persistenz: PVs garantieren Datenpersistenz auch bei Pod-Neustarts oder -Neuterminierungen. Stellen Sie sich einen Webserver-Pod vor, der flüchtigen Storage zum Speichern temporärer Protokolle verwendet. Wenn der Pod neu gestartet wird, gehen diese Protokolle verloren. Persistenter Storage hingegen stellt sicher, dass Daten wie Anwendungsdaten, die von einem Datenbank-Pod verwaltet werden, intakt bleiben.
- Entkoppeln von Storage von Pods: Diese Trennung ermöglicht mehr Flexibilität und Kontrolle über Storage-Ressourcen. Pods können leicht nach oben oder unten skaliert werden, ohne den zugrunde liegenden Storage zu beeinträchtigen.
Wichtige Funktionen von Kubernetes Persistenten Volumes
Kubernetes Persistent Volumes bieten mehrere wichtige Funktionen, die sie leistungsstark und an verschiedene Storage-Anforderungen anpassbar machen:
Storage-Klassen
Storage-Klassen funktionieren wie Vorlagen, die verschiedene Ebenen oder Kategorien von Storage definieren, die in einem Cluster verfügbar sind. Sie können Eigenschaften wie Performance (z. B. SSD vs. HDD), Kapazität, Langlebigkeit und Kosten angeben. Dadurch können Administratoren Storage bereitstellen, der auf die spezifischen Anforderungen von Anwendungen zugeschnitten ist.
Zugriffsmodi
Zugriffsmodi definieren, wie Pods mit dem von einem PV bereitgestellten Storage interagieren können. Hier ist eine Aufschlüsselung der gängigen Modi:
- ReadWriteOnce (RWO): Nur jeweils ein Pod kann das Volume mit Lese-/Schreibberechtigungen montieren. Dadurch wird die Datenintegrität für Anwendungen sichergestellt, die exklusiven Schreibzugriff erfordern, z. B. eine primäre Datenbankreplikation.
- ReadOnlyMany (ROX): Mehrere Pods können das Volume gleichzeitig, aber nur im schreibgeschützten Modus, montieren. Dies ist nützlich für Szenarien, in denen Anwendungen ohne Änderungen auf gemeinsame Daten zugreifen müssen, wie z. B. eine Konfigurationsdatei oder ein Protokoll-Repository.
- ReadWriteMany (RWX): Mehrere Pods können das Volume mit Lese-/Schreibberechtigungen montieren. Dieser Zugriffsmodus sollte aufgrund potenzieller Dateninkonsistenzen mit Vorsicht verwendet werden, wenn mehrere Pods gleichzeitig schreiben. Es eignet sich ideal für bestimmte Anwendungsfälle wie gemeinsame Caches oder kollaborative Bearbeitungstools.
Rückforderungsrichtlinien
Die Rückforderungsrichtlinien schreiben vor, wie Kubernetes eine PV verarbeitet, nachdem sie nicht mehr an einen Pod gebunden ist. Zu den wichtigsten Richtlinien gehören:
- Aufbewahrung: Die PV bleibt bestehen, nachdem der Pod unverbindlich ist, was eine manuelle Verwaltung für eine mögliche zukünftige Verwendung oder Migration ermöglicht.
- Recycling: Kubernetes recycelt die PV . Dazu gehört in der Regel das Löschen vorhandener Daten und das Bereitstellen des Storage für zukünftige Pod-Zuweisungen.
- Löschen: Das PV-Objekt und die zugrunde liegende Storage-Ressource werden vollständig gelöscht. Nutzen Sie dies mit Vorsicht, da die Datenwiederherstellung möglicherweise nicht möglich ist.
Volume-Plugins
Kubernetes nutzt Volume-Plugins, um die Lücke zwischen der Plattform und verschiedenen Storage-Anbietern zu schließen. Diese Plug-ins ermöglichen es Kubernetes, verschiedene Storage-Backends zu verstehen und mit ihnen zu interagieren, einschließlich lokalem Storage, NAS-Lösungen (Network Attached Storage) wie NFS oder iSCSI und Cloud-Provider-spezifische Storage-Services wie AWS EBS oder GCE Persistent Disk. Diese Plug-in-Architektur bietet erhebliche Flexibilität bei der Auswahl und Integration von Storage-Lösungen in Ihren Kubernetes-Cluster.
Bereitstellung persistenter Volumes
Kubernetes bietet zwei primäre Methoden zur Bereitstellung persistenter Volumes (PVs): statische Bereitstellung und dynamische Bereitstellung. Jeder Ansatz richtet sich an unterschiedliche Anwendungsfälle und bietet unterschiedliche Vorteile.
Statische Bereitstellung
Bei der statischen Bereitstellung erstellen und konfigurieren Cluster-Administratoren PVs im Voraus manuell. Dieser Ansatz bietet eine feinkörnige Kontrolle über die Storage-Konfiguration und eignet sich für Szenarien mit klar definierten Storage-Anforderungen, die sich nicht häufig ändern. So stellen Sie eine PV statisch bereit:
1. Definieren Sie die Storage-Details: Bestimmen Sie die Storage-Kapazität, die Zugriffsmodi (ReadWriteOnce, ReadOnlyMany, ReadWriteMany), die Wiederherstellungsrichtlinie (Retain, Recycle, Delete) und die Daten des Volume-Plugins (z. B. Serveradresse für NFS ).
2. Erstellen Sie das PV-Objekt mit YAML: Verwenden Sie eine YAML-Manifestdatei, um die PV-Konfiguration zu definieren. Hier ist ein Beispiel für den Einsatz von NFS-Storage:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv-nfs
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /path/to/nfs/share
server: nfs-server.example.com
- Name: Eindeutiger Name für die PV .
- Storage: Gewünschte Storage-Kapazität (z. B. 10Gi für 10 Gigabyte).
- AccessModes: Wählen Sie den geeigneten Zugriffsmodus basierend auf den Anforderungen Ihrer Anwendung aus.
- persistentVolumeReclaimRichtlinie: Definieren Sie, wie Kubernetes die PV handhaben sollte, nachdem sie von einem Pod gelöst wurde.
- nfs.path : Pfad zum NFS-Share auf dem NFS-Server.
- nfs.server: IP-Adresse oder Hostname des NFS-Servers.
3. Wenden Sie das YAML-Manifest an: Verwenden Sie den Befehl kubectl apply -f, um das PV-Objekt in Ihrem Kubernetes-Cluster zu erstellen.
Dynamische Bereitstellung
Die dynamische Bereitstellung nutzt StorageClasses, um die PVPVErstellung zu automatisieren. Administratoren definieren StorageClasses, die die gewünschten Storage-Eigenschaften angeben und Kubernetes die PV-Erstellung nach Bedarf durchführen lassen, wenn ein PersistentVolumeClaim (PVC) Storage anfordert. So verwenden Sie dynamische Bereitstellung:
1. Eine StorageClass definieren: Erstellen Sie ein StorageClass-YAML-Manifest mit Angabe des Provisioners, des Storage-Typs (z. B. SSD, HDD) und aller zusätzlichen Parameter, die der Provisioner benötigt. Hier ein Beispiel für AWS EBS:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard-ebs
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
- Name: Eindeutiger Name für die StorageClass.
- Vorsorge: Name des Storage Provisioner-Plugins (z. B. kubernetes.io/aws-ebs für AWS EBS ).
- Parameter.Typ: Storage-Typ innerhalb des Provisioners (z. B. gp2 für einen Universal-SSD-Volumentyp in AWS EBS ).
2. Wenden Sie das StorageClass-Manifest an: Verwenden Sie kubectl apply -f, um das StorageClass-Objekt in Ihrem Cluster zu erstellen.
Binden persistenter Volumes an Pods
Durch die Bindung einer PV an einen Pod können Anwendungen persistenten Storage nutzen. Diese Bindung wird in der Regel durch einen PersistentVolumeClaim (PVC ) erreicht.
Ein PVC fungiert als Storage-Anforderung, die von einem Pod gesendet wird. Sie gibt die Storage-Anforderungen an, die ein Pod hat, einschließlich:
- Zugriffsmodi: Definiert, wie der Pod mit dem Storage interagieren kann (z. B. ReadWriteOnce, ReadOnlyMany, ReadWriteMany).
- Storage-Kapazität: Die gewünschte Storage-Menge für den Pod.
- StorageClassName (optional): Referenziert eine StorageClass für dynamische Bereitstellung.
Hier ist ein Beispiel für einen Pod mit dem Namen „Pod-Beispiel“, der ein PVC mit dem Namen „Pvc-Beispiel“ verwendet:
apiVersion: v1
kind: Pod
metadata:
name: pod-example
spec:
containers:
- name: app
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: pvc-storage
volumes:
- name: pvc-storage
persistentVolumeClaim:
claimName: pvc-example
In diesem Beispiel montiert der Pod das PVC mit dem Namen „pvc-example“ auf dem Pfad „/usr/share/nginx/html“ innerhalb des Containers. Dadurch kann der Pod auf seine persistenten Daten zugreifen und diese verwalten, die in der zugrunde liegenden PV gespeichert sind.
Verwaltung persistenter Volumes
Es ist unerlässlich, Ihre persistenten Volumes (PVs) effektiv zu verwalten, um eine effiziente und skalierbare Storage-Nutzung in Ihrem Kubernetes-Cluster aufrechtzuerhalten. Einige wichtige Aspekte des PV-Managements sind:
1. Ändern der Größe persistenter Volumes
Kubernetes v1.11 führte die Möglichkeit ein, die Größe von PVs zu ändern. Dadurch können Sie die einem PV zugewiesene Storage-Kapazität dynamisch anpassen und so den wachsenden Storage-Anforderungen Ihrer Anwendungen gerecht werden.
Um die Größe einer PV zu ändern, aktualisieren Sie die Storage-Anforderung des PVC: Bearbeiten Sie das PVC, das auf die PV verweist, und ändern Sie den Storage-Wert im Abschnitt resources.requests der YAML-Spezifikation des PVC. Um beispielsweise die Größe eines PVC mit dem Namen „pvc-example“ auf 20Gi zu erhöhen, aktualisieren Sie das YAML-Manifest:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
resources:
requests:
storage: 20Gi
Nachdem Sie die Storage-Anforderung des PVC aktualisiert haben, versucht Kubernetes, die Größe des zugrunde liegenden Storage, der für den PV bereitgestellt wird, zu ändern. Die Größenänderung einer PV ist in der Regel ein einfacher Betrieb (Erweiterung des Storage). Die Verringerung der Größe einer PV wird aufgrund potenzieller Datenverlustbedenken nicht unterstützt.
2. Löschen persistenter Volumes
Um eine PV zu löschen, stellen Sie sicher, dass sie derzeit nicht an PVCs gebunden ist. Sie können eine PV, die von einem PVC verwendet wird, nicht löschen, um Datenverluste zu vermeiden. So löschen Sie eine PV:
kubectl delete pv pv-example
Ersetzen Sie pv-example durch den tatsächlichen Namen der PV, die PV Sie löschen möchten.
3. Aktualisieren persistenter Volumes
Während die Kern-Storage-Kapazität innerhalb eines PV-Objekts nicht direkt geändert werden kann, können Sie bestimmte Metadaten einer PV aktualisieren, z. B. Beschriftungen oder Anmerkungen. Diese Beschriftungen und Anmerkungen können verwendet werden, um Ihre PVs innerhalb des Clusters besser zu organisieren, zu identifizieren und zu verwalten.
Best Practices für die Verwendung persistenter Kubernetes-Volumes
Im Folgenden finden Sie einige der Best Practices, die Sie befolgen sollten, um das Beste aus persistenten Kubernetes-Volumes herauszuholen:
- Wählen Sie die entsprechenden Storage-Klassen aus: Wählen Sie Storage-Klassen, die den Performance- und Haltbarkeitsanforderungen Ihrer Anwendungen entsprechen. Verwenden Sie beispielsweise SSD-gestützten Storage für Hochleistungsanwendungen und HDD-gestützten Storage für Archivierungszwecke.
- Zugriffsmodi richtig konfigurieren: Wählen Sie den geeigneten Zugriffsmodus für Ihre PV aus, je nachdem, wie Ihre Anwendungen auf den Storage zugreifen müssen. Sie können beispielsweise RWX für gemeinsam genutzte Dateisysteme und RWO für Datenbanken mit einer einzigen Instanz verwenden.
- Setzen Sie Rückforderungsrichtlinien sinnvoll um: Legen Sie Richtlinien für die Wiederherstellung fest, die Ihrer Strategie für das Datenlebenszyklusmanagement entsprechen. Verwenden Sie die Aufbewahrungsrichtlinie für kritische Daten, die vor dem Löschen manuelle Eingriffe erfordern.
- Überwachung und Protokollierung: Nutzen Sie Überwachungs- und Protokollierungstools, um die Nutzung, Performance und den Zustand von PV zu überwachen. Tools wie Prometheus und Grafana können wertvolle Einblicke in Ihre Storage-Infrastruktur liefern.
- Verwenden Sie Portworx ® für erweitertes Datenmanagement: Für fortschrittliches Datenmanagement und persistente Storage-Lösungen in Kubernetes sollten Sie Portworx von Pure Storage in Betracht ziehen. Portworx bietet Funktionen wie Hochverfügbarkeit, Disaster Recovery und Backup, die speziell für containerisierte Anwendungen entwickelt wurden.
Fazit
Kubernetes Persistent Volumes (PVs) bieten einen grundlegenden Mechanismus für die Verwaltung von Storage in zustandsbehafteten Anwendungen. Durch die Nutzung von PVs können Sie die Datenpersistenz, Hochverfügbarkeit und effiziente Storage-Nutzung in Ihrem Kubernetes-Cluster sicherstellen. Lösungen wie Portworx von Pure Storage bieten eine intuitive Möglichkeit, die Vorteile der persistenten Datenträger von Kubernetes zu nutzen. Mit Funktionen wie Hochverfügbarkeit, Disaster Recovery und Backup, die künstliche Intelligenz für eine höhere Effizienz nutzen, ist Portworx die ideale Kubernetes-Lösung für persistenten Storage für containerisierte Anwendungen.