Arbeiten mit Volumegruppen-Snapshots
Kubernetes-Volumegruppen-Snapshots von persistenten Volumes (PVs). NetApp Trident ermöglicht die Erstellung von Snapshots mehrerer Volumes (einer Gruppe von Volume-Snapshots). Dieser Volumegruppen-Snapshot stellt Kopien mehrerer Volumes dar, die zum gleichen Zeitpunkt erstellt wurden.
|
|
VolumeGroupSnapshot ist eine Beta-Funktion in Kubernetes mit Beta-APIs. Für VolumeGroupSnapshot ist mindestens Kubernetes 1.32 erforderlich. |
Erstellen von Volumegruppen-Snapshots
Die Snapshot-Funktion für Volumengruppen wird von den folgenden Speichertreibern unterstützt:
-
`ontap-san`Treiber - nur für die iSCSI- und FC-Protokolle, nicht für das NVMe/TCP-Protokoll.
-
ontap-san-economy- nur für das iSCSI-Protokoll. -
ontap-nas
|
|
Die Erstellung von Volume-Group-Snapshots wird für NetApp ASA r2- oder AFX-Speichersysteme nicht unterstützt. |
-
Stellen Sie sicher, dass Ihre Kubernetes-Version K8s 1.32 oder höher ist.
-
Sie benötigen einen externen Snapshot-Controller und benutzerdefinierte Ressourcendefinitionen (CRDs), um mit Snapshots arbeiten zu können. Dies ist die Aufgabe des Kubernetes Orchestrator (z. B. Kubeadm, GKE, OpenShift).
Wenn Ihre Kubernetes-Distribution den externen Snapshot-Controller und die CRDs nicht enthält, lesen Sie Stellen Sie einen Volume-Snapshot-Controller bereit .
Erstellen Sie keinen Snapshot-Controller, wenn Sie On-Demand-Volume-Gruppen-Snapshots in einer GKE-Umgebung erstellen. GKE verwendet einen integrierten, versteckten Snapshot-Controller. -
Legen Sie im Snapshot-Controller-YAML Folgendes fest:
CSIVolumeGroupSnapshotSetzen Sie das Feature Gate auf „true“, um sicherzustellen, dass der Volumegruppen-Snapshot aktiviert ist. -
Erstellen Sie die erforderlichen Snapshot-Klassen für Volumegruppen, bevor Sie einen Snapshot für Volumegruppen erstellen.
-
Stellen Sie sicher, dass sich alle PVCs/Volumes auf derselben SVM befinden, um VolumeGroupSnapshot erstellen zu können.
-
Erstellen Sie eine VolumeGroupSnapshotClass, bevor Sie einen VolumeGroupSnapshot erstellen. Weitere Informationen finden Sie unter "VolumeGroupSnapshotClass".
apiVersion: groupsnapshot.storage.k8s.io/v1beta1 kind: VolumeGroupSnapshotClass metadata: name: csi-group-snap-class annotations: kubernetes.io/description: "Trident group snapshot class" driver: csi.trident.netapp.io deletionPolicy: Delete -
Erstellen Sie PVCs mit den erforderlichen Bezeichnungen unter Verwendung vorhandener Speicherklassen oder fügen Sie diese Bezeichnungen zu vorhandenen PVCs hinzu.
Das folgende Beispiel erstellt den PVC mit
pvc1-group-snapals Datenquelle und BezeichnungconsistentGroupSnapshot: groupA. Definieren Sie den Label-Schlüssel und den Wert entsprechend Ihren Anforderungen.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc1-group-snap
labels:
consistentGroupSnapshot: groupA
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
storageClassName: sc1-1
-
Erstellen Sie einen VolumeGroupSnapshot mit demselben Label (
consistentGroupSnapshot: groupA) im PVC angegeben.In diesem Beispiel wird ein Snapshot einer Volume-Gruppe erstellt:
apiVersion: groupsnapshot.storage.k8s.io/v1beta1
kind: VolumeGroupSnapshot
metadata:
name: "vgs1"
namespace: trident
spec:
volumeGroupSnapshotClassName: csi-group-snap-class
source:
selector:
matchLabels:
consistentGroupSnapshot: groupA
Wiederherstellen von Volumedaten mithilfe eines Gruppen-Snapshots
Sie können einzelne persistente Volumes mithilfe der einzelnen Snapshots wiederherstellen, die im Rahmen des Volume-Gruppen-Snapshots erstellt wurden. Der Volume-Gruppen-Snapshot kann nicht als Einheit wiederhergestellt werden.
Verwenden Sie die ONTAP-CLI zur Wiederherstellung eines Volume-Snapshots, um einen in einem früheren Snapshot aufgezeichneten Zustand wiederherzustellen.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
|
|
Wenn Sie eine Snapshot-Kopie wiederherstellen, wird die vorhandene Volume-Konfiguration überschrieben. Änderungen an den Volume-Daten nach der Erstellung der Snapshot Kopie gehen verloren. |
In-Place-Volume-Wiederherstellung aus einem Snapshot
Trident ermöglicht mithilfe des CR-Systems (TASR) eine schnelle Wiederherstellung von in-Place-Volumes aus einem Snapshot TridentActionSnapshotRestore. Dieser CR fungiert als eine zwingend notwendige Kubernetes-Aktion und bleibt nach Abschluss des Vorgangs nicht erhalten.
Weitere Informationen finden Sie unter "In-Place-Volume-Wiederherstellung aus einem Snapshot".
Löschen eines PV mit zugehörigen Gruppen-Snapshots
Beim Löschen eines Gruppenvolume-Snapshots:
-
Sie können VolumeGroupSnapshots als Ganzes löschen, nicht jedoch einzelne Snapshots in der Gruppe.
-
Wenn PersistentVolumes gelöscht werden, während ein Snapshot für dieses PersistentVolume vorhanden ist, versetzt Trident dieses Volume in den Status „Löschen“, da der Snapshot entfernt werden muss, bevor das Volume sicher entfernt werden kann.
-
Wenn ein Klon mithilfe eines gruppierten Snapshots erstellt wurde und die Gruppe anschließend gelöscht werden soll, beginnt ein Split-on-Clone-Vorgang und die Gruppe kann erst gelöscht werden, wenn die Aufteilung abgeschlossen ist.
Stellen Sie einen Volume-Snapshot-Controller bereit
Wenn Ihre Kubernetes-Distribution den Snapshot-Controller und CRDs nicht enthält, können Sie sie wie folgt bereitstellen.
-
Erstellen von Volume Snapshot-CRDs.
cat snapshot-setup.sh
#!/bin/bash # Create volume snapshot CRDs kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml -
Erstellen Sie den Snapshot-Controller.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yamlÖffnen Sie bei Bedarf deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamlUnd AktualisierungnamespaceIn Ihren Namespace.