Mit Snapshots arbeiten
Kubernetes-Volume-Snapshots von Persistent Volumes (PVs) ermöglichen die Erstellung von zeitpunktbezogenen Kopien von Volumes. Sie können einen Snapshot eines mit Trident erstellten Volumes erstellen, einen außerhalb von Trident erstellten Snapshot importieren, ein neues Volume aus einem vorhandenen Snapshot erstellen und Volume-Daten aus Snapshots wiederherstellen.
Überblick
Volume-Snapshots werden unterstützt von ontap-nas , ontap-nas-flexgroup , ontap-san , ontap-san-economy , solidfire-san , gcp-cvs , azure-netapp-files , Und google-cloud-netapp-volumes Fahrer.
Sie benötigen einen externen Snapshot-Controller und benutzerdefinierte Ressourcendefinitionen (CRDs), um mit Snapshots arbeiten zu können. Dies fällt in den Verantwortungsbereich des Kubernetes-Orchestrators (z. B. Kubeadm, GKE, OpenShift).
Falls Ihre Kubernetes-Distribution den Snapshot-Controller und die CRDs nicht enthält, lesen Sie bitte weiter unterEinen Volume-Snapshot-Controller bereitstellen .
|
|
Erstellen Sie keinen Snapshot-Controller, wenn Sie in einer GKE-Umgebung bedarfsgesteuerte Volume-Snapshots erstellen. GKE verwendet einen integrierten, versteckten Snapshot-Controller. |
Erstellen Sie einen Volume-Snapshot
-
Erstellen Sie ein
VolumeSnapshotClassWeitere Informationen finden Sie unter"VolumeSnapshotClass" .-
Der
driverzeigt auf den Trident CSI-Fahrer. -
deletionPolicy`kann sein `DeleteoderRetain. Wenn eingestellt aufRetainDer zugrunde liegende physische Snapshot des Speicherclusters bleibt auch dann erhalten, wennVolumeSnapshotDas Objekt wurde gelöscht.Beispielcat snap-sc.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
-
-
Erstellen Sie einen Snapshot eines bestehenden PVC.
Beispiele-
Dieses Beispiel erstellt eine Momentaufnahme eines bestehenden PVC.
cat snap.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1 -
Dieses Beispiel erstellt ein Volume-Snapshot-Objekt für eine PVC namens
pvc1und der Name des Snapshots ist festgelegt aufpvc1-snap. Ein VolumeSnapshot ist analog zu einem PVC und ist mit einem verknüpftVolumeSnapshotContentObjekt, das die tatsächliche Momentaufnahme darstellt.kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
Sie können die
VolumeSnapshotContentObjekt für daspvc1-snapVolumeSnapshot durch Beschreibung. DerSnapshot Content Nameidentifiziert das VolumeSnapshotContent-Objekt, das diesen Snapshot bereitstellt. DerReady To UseDer Parameter gibt an, dass der Snapshot zur Erstellung eines neuen PVC verwendet werden kann.kubectl describe volumesnapshots pvc1-snap Name: pvc1-snap Namespace: default ... Spec: Snapshot Class Name: pvc1-snap Snapshot Content Name: snapcontent-e8d8a0ca-9826-11e9-9807-525400f3f660 Source: API Group: Kind: PersistentVolumeClaim Name: pvc1 Status: Creation Time: 2019-06-26T15:27:29Z Ready To Use: true Restore Size: 3Gi ...
-
Erstellen Sie eine PVC aus einem Volumen-Snapshot
Sie können verwenden dataSource um ein PVC mithilfe eines VolumeSnapshots zu erstellen, der <pvc-name> als Quelle der Daten. Sobald das PVC hergestellt ist, kann es an einer Kapsel befestigt und wie jedes andere PVC verwendet werden.
|
|
Die PVC wird im selben Backend wie das Quellvolume erstellt. Siehe"KB: Die Erstellung eines PVC aus einem Trident PVC-Snapshot ist in einem alternativen Backend nicht möglich." . |
Das folgende Beispiel erstellt die PVC-Datei mithilfe von pvc1-snap als Datenquelle.
cat pvc-from-snap.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-from-snap
spec:
accessModes:
- ReadWriteOnce
storageClassName: golden
resources:
requests:
storage: 3Gi
dataSource:
name: pvc1-snap
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
Importieren eines Volume-Snapshots
Trident unterstützt die"Kubernetes-Vorbereitungs-Snapshot-Prozess" um dem Cluster-Administrator die Möglichkeit zu geben, einen VolumeSnapshotContent Objekt- und Import-Snapshots, die außerhalb von Trident erstellt wurden.
Trident muss das übergeordnete Volume des Snapshots erstellt oder importiert haben.
-
Cluster-Administrator: Erstellen Sie einen
VolumeSnapshotContentObjekt, das auf den Backend-Snapshot verweist. Dadurch wird der Snapshot-Workflow in Trident gestartet.-
Geben Sie den Namen des Backend-Snapshots an in
annotationsalstrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">. -
Angeben
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>InsnapshotHandleDies sind die einzigen Informationen, die Trident vom externen Snapshotter erhält.ListSnapshotsAnruf.Der <volumeSnapshotContentName>Aufgrund von Namensbeschränkungen für CRs kann der Name des Backend-Snapshots nicht immer übereinstimmen.BeispielDas folgende Beispiel erstellt ein
VolumeSnapshotContentObjekt, das auf einen Backend-Snapshot verweistsnap-01.
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: import-snap-content annotations: trident.netapp.io/internalSnapshotName: "snap-01" # This is the name of the snapshot on the backend spec: deletionPolicy: Retain driver: csi.trident.netapp.io source: snapshotHandle: pvc-f71223b5-23b9-4235-bbfe-e269ac7b84b0/import-snap-content # <import PV name or source PV name>/<volume-snapshot-content-name> volumeSnapshotRef: name: import-snap namespace: default -
-
Cluster-Administrator: Erstellen Sie die
VolumeSnapshotCR, das sich auf dieVolumeSnapshotContentObjekt. Hiermit wird der Zugriff zur Nutzung des/der/der/desVolumeSnapshotin einem gegebenen Namensraum.BeispielDas folgende Beispiel erstellt ein
VolumeSnapshotCR benanntimport-snapdas sich auf das beziehtVolumeSnapshotContentnamensimport-snap-content.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: import-snap spec: # volumeSnapshotClassName: csi-snapclass (not required for pre-provisioned or imported snapshots) source: volumeSnapshotContentName: import-snap-content -
Interne Verarbeitung (keine Aktion erforderlich): Der externe Snapshotter erkennt den neu erstellten
VolumeSnapshotContentund leitet dieListSnapshotsAnruf. Trident erschafft dieTridentSnapshot.-
Der externe Snapshotter setzt die
VolumeSnapshotContentZureadyToUseund dieVolumeSnapshotZutrue. -
Trident kehrt zurück
readyToUse=true.
-
-
Jeder Benutzer: Erstellen Sie ein
PersistentVolumeClaimum auf das Neue Bezug zu nehmenVolumeSnapshot, wo diespec.dataSource(oderspec.dataSourceRef) Name ist derVolumeSnapshotName.BeispielDas folgende Beispiel erstellt eine PVC, die auf die
VolumeSnapshotnamensimport-snap.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-from-snap spec: accessModes: - ReadWriteOnce storageClassName: simple-sc resources: requests: storage: 1Gi dataSource: name: import-snap kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io
Wiederherstellung von Volumendaten mithilfe von Snapshots
Das Snapshot-Verzeichnis ist standardmäßig ausgeblendet, um eine maximale Kompatibilität der mit dem bereitgestellten Volumes zu gewährleisten. ontap-nas Und ontap-nas-economy Fahrer. Aktivieren Sie die .snapshot Verzeichnis zum direkten Wiederherstellen von Daten aus Snapshots.
Verwenden Sie den Befehl „volume snapshot restore ONTAP CLI“, um ein Volume auf einen Zustand zurückzusetzen, der in einem vorherigen Snapshot aufgezeichnet wurde.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
|
|
Beim Wiederherstellen einer Snapshot-Kopie wird die bestehende Volume-Konfiguration überschrieben. Änderungen, die an den Volumendaten vorgenommen wurden, nachdem die Snapshot-Kopie erstellt wurde, gehen verloren. |
Wiederherstellung des Volumens direkt aus einem Snapshot
Trident ermöglicht die schnelle, direkte Wiederherstellung des Volumens aus einer Momentaufnahme mithilfe der TridentActionSnapshotRestore (TASR) CR. Diese CR fungiert als imperative Kubernetes-Aktion und bleibt nach Abschluss der Operation nicht erhalten.
Trident unterstützt die Wiederherstellung von Snapshots auf dem ontap-san , ontap-san-economy , ontap-nas , ontap-nas-flexgroup , azure-netapp-files , gcp-cvs , google-cloud-netapp-volumes , Und solidfire-san Fahrer.
Sie benötigen ein gebundenes PVC-Gehäuse und einen verfügbaren Volumen-Snapshot.
-
Prüfen Sie, ob der PVC-Status „gebunden“ ist.
kubectl get pvc -
Prüfen Sie, ob der Volume-Snapshot einsatzbereit ist.
kubectl get vs
-
TASR CR erstellen. Dieses Beispiel erstellt eine CR für PVC.
pvc1und Volumen-Snapshotpvc1-snapshot.Der TASR CR muss sich in einem Namensraum befinden, in dem auch der PVC und der VS existieren. cat tasr-pvc1-snapshot.yamlapiVersion: trident.netapp.io/v1 kind: TridentActionSnapshotRestore metadata: name: trident-snap namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot -
Wenden Sie die CR an, um die Wiederherstellung aus dem Snapshot durchzuführen. Dieses Beispiel stellt eine Wiederherstellung aus einem Snapshot her.
pvc1.kubectl create -f tasr-pvc1-snapshot.yamltridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Trident stellt die Daten aus dem Snapshot wieder her. Sie können den Status der Snapshot-Wiederherstellung überprüfen:
kubectl get tasr -o yaml
apiVersion: trident.netapp.io/v1
items:
- apiVersion: trident.netapp.io/v1
kind: TridentActionSnapshotRestore
metadata:
creationTimestamp: "2023-04-14T00:20:33Z"
generation: 3
name: trident-snap
namespace: trident
resourceVersion: "3453847"
uid: <uid>
spec:
pvcName: pvc1
volumeSnapshotName: pvc1-snapshot
status:
startTime: "2023-04-14T00:20:34Z"
completionTime: "2023-04-14T00:20:37Z"
state: Succeeded
kind: List
metadata:
resourceVersion: ""
|
|
|
Löschen eines PV mit zugehörigen Snapshots
Beim Löschen eines persistenten Volumes mit zugehörigen Snapshots wird das entsprechende Trident Volume auf den Status „Wird gelöscht“ aktualisiert. Um das Trident -Volume zu löschen, müssen die Volume-Snapshots entfernt werden.
Einen Volume-Snapshot-Controller bereitstellen
Falls Ihre Kubernetes-Distribution den Snapshot-Controller und die CRDs nicht enthält, können Sie diese wie folgt bereitstellen.
-
Erstellen Sie 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-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml -
Erstellen Sie den Snapshot-Controller.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yamlÖffnen Sie gegebenenfalls deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamlund aktualisierennamespacezu Ihrem Namensraum.