Arbeiten Sie mit Snapshots
Kubernetes Volume Snapshots von Persistent Volumes (PVs) ermöglichen zeitpunktgenaue Kopien von Volumes. Sie können einen Snapshot eines mit Astra Trident erstellten Volumes erstellen, einen außerhalb von Astra Trident erstellten Snapshot importieren, ein neues Volume aus einem vorhandenen Snapshot erstellen und Volume-Daten aus Snapshots wiederherstellen.
Überblick
Volumen-Snapshot wird unterstützt von ontap-nas
, , ontap-nas-flexgroup
ontap-san
ontap-san-economy
solidfire-san
, , , gcp-cvs`und `azure-netapp-files
Fahrer.
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 Snapshot Controller und CRDs nicht enthält, finden Sie weitere Informationen unter Stellen Sie einen Volume-Snapshot-Controller bereit.
Erstellen Sie keinen Snapshot Controller, wenn Sie On-Demand Volume Snapshots in einer GKE-Umgebung erstellen. GKE verwendet einen integrierten, versteckten Snapshot-Controller. |
Erstellen eines Volume-Snapshots
-
Erstellen Sie eine
VolumeSnapshotClass
. Weitere Informationen finden Sie unter "VolumeSnapshotKlasse".-
Der
driver
verweist auf den Astra Trident CSI-Treiber. -
deletionPolicy
Kann oderRetain
seinDelete
. Wenn auf festgelegtRetain
, wird der zugrunde liegende physische Snapshot auf dem Speicher-Cluster auch dann beibehalten, wenn dasVolumeSnapshot
Objekt gelöscht wird.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 einer vorhandenen PVC.
Beispiele-
In diesem Beispiel wird ein Snapshot eines vorhandenen PVC erstellt.
cat snap.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1
-
In diesem Beispiel wird ein Volume-Snapshot-Objekt für eine PVC mit dem Namen erstellt
pvc1
, und der Name des Snapshots wird auf festgelegtpvc1-snap
. Ein VolumeSnapshot ist analog zu einer PVC und einem Objekt zugeordnetVolumeSnapshotContent
, das den tatsächlichen Snapshot 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 das Objekt für den
pvc1-snap
VolumeSnapshot identifizierenVolumeSnapshotContent
, indem Sie es beschreiben. DasSnapshot Content Name
identifiziert das VolumeSnapshotContent-Objekt, das diesen Snapshot bereitstellt. DerReady To Use
Parameter gibt an, dass der Snapshot zum Erstellen einer 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 Volume-Snapshot
Sie können verwenden dataSource
, um eine PVC mit einem VolumeSnapshot zu erstellen, der als Datenquelle benannt <pvc-name>
ist. Nachdem die PVC erstellt wurde, kann sie an einem Pod befestigt und wie jedes andere PVC verwendet werden.
Die PVC wird im selben Backend wie das Quell-Volume erstellt. Siehe "KB: Die Erstellung einer PVC aus einem Trident PVC-Snapshot kann nicht in einem alternativen Backend erstellt werden". |
Im folgenden Beispiel wird die PVC als Datenquelle erstellt pvc1-snap
.
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 Sie einen Volume-Snapshot
Astra Trident unterstützt das, damit der "Vorab bereitgestellter Snapshot-Prozess von Kubernetes"Clusteradministrator ein Objekt erstellen und Snapshots importieren kann VolumeSnapshotContent
, die außerhalb von Astra Trident erstellt wurden.
Astra Trident muss das übergeordnete Volume des Snapshots erstellt oder importiert haben.
-
Cluster admin: Erstellen Sie ein
VolumeSnapshotContent
Objekt, das auf den Back-End-Snapshot verweist. Dadurch wird der Snapshot Workflow in Astra Trident gestartet.-
Geben Sie den Namen des Back-End-Snapshots in
annotations
als `trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">`an. -
Geben Sie
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>
in ansnapshotHandle
. Dies ist die einzige Information, die Astra Trident vom externen Snapshotter im Aufruf zur Verfügung gestelltListSnapshots
wird.Der <volumeSnapshotContentName>
kann aufgrund von Einschränkungen bei der CR-Benennung nicht immer mit dem Namen des Back-End-Snapshots übereinstimmen.BeispielIm folgenden Beispiel wird ein Objekt erstellt
VolumeSnapshotContent
, das auf einen Back-End-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>
-
-
Cluster admin: Erstellen Sie den
VolumeSnapshot
CR, der das Objekt referenziertVolumeSnapshotContent
. Damit wird der Zugriff auf die Verwendung des in einem bestimmten Namespace benötigtVolumeSnapshot
.BeispielIm folgenden Beispiel wird ein CR mit dem
import-snap
Namen erstelltVolumeSnapshot
, der auf den Namenimport-snap-content
verweistVolumeSnapshotContent
.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 Schnapper erkennt das neu erstellte
VolumeSnapshotContent
und führt denListSnapshots
Aufruf aus. Astra Trident erstellt dieTridentSnapshot
.-
Der externe Schnapper setzt den
VolumeSnapshotContent
aufreadyToUse
und denVolumeSnapshot
auftrue
. -
Trident kehrt zurück
readyToUse=true
.
-
-
Jeder Benutzer: Erstellen Sie ein
PersistentVolumeClaim
, um auf den neuenzu verweisenVolumeSnapshot
, wobei derspec.dataSource
(oderspec.dataSourceRef
) Name der Name istVolumeSnapshot
.BeispielIm folgenden Beispiel wird eine PVC erstellt, die auf den Namen
import-snap
verweistVolumeSnapshot
.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
Stellen Sie Volume-Daten mithilfe von Snapshots wieder her
Das Snapshot-Verzeichnis ist standardmäßig ausgeblendet, um die maximale Kompatibilität der mit den Treibern und ontap-nas-economy
bereitgestellten Volumes zu ermöglichen ontap-nas
. Aktivieren Sie das .snapshot
Verzeichnis, um Daten von Snapshots direkt wiederherzustellen.
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. |
Löschen Sie ein PV mit den zugehörigen Snapshots
Wenn Sie ein persistentes Volume mit zugeordneten Snapshots löschen, wird das entsprechende Trident-Volume in einen „Löschzustand“ aktualisiert. Entfernen Sie die Volume Snapshots, um das Astra Trident Volume zu löschen.
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-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.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
Öffnen Sie ggf. deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
Ihren Namespace und aktualisieren Sienamespace
ihn.