Arbeiten Sie mit Snapshots
Kubernetes Volume Snapshots von Persistent Volumes (PVs) ermöglichen zeitpunktgenaue 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-Snapshot wird 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
Treiber.
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 die Kubernetes-Distribution den 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 Snapshots in einer GKE-Umgebung erstellen. GKE verwendet einen integrierten, versteckten Snapshot-Controller. |
Erstellen eines Volume-Snapshots
-
Erstellen Sie ein
VolumeSnapshotClass
. Weitere Informationen finden Sie unter "VolumeSnapshotKlasse".-
Der
driver
verweist auf den Trident-CSI-Treiber. -
deletionPolicy
Kann seinDelete
OderRetain
. Wenn eingestellt aufRetain
, Der zugrunde liegende physische Snapshot auf dem Storage-Cluster wird auch dann beibehalten, wenn derVolumeSnapshot
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 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
Der Name des Snapshots lautetpvc1-snap
. Ein VolumeSnapshot ist analog zu einem PVC und einem zugeordnetVolumeSnapshotContent
Objekt, 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 den identifizieren
VolumeSnapshotContent
Objekt für daspvc1-snap
VolumeSnapshot wird beschrieben. DerSnapshot 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
Verwenden Sie können dataSource
So erstellen Sie eine PVC mit einem VolumeSnapshot namens <pvc-name>
Als Quelle der Daten. 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 mit erstellt pvc1-snap
Als Datenquelle speichern.
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
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 Trident erstellt wurden.
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 Trident gestartet.-
Geben Sie den Namen des Back-End-Snapshots in an
annotations
Alstrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">
. -
Geben Sie
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>
in ansnapshotHandle
. Dies ist die einzige Information, die Trident vom externen Snapshotter im Aufruf zur Verfügung gestelltListSnapshots
wird.Der <volumeSnapshotContentName>
Aufgrund von Einschränkungen bei der CR-Benennung kann der Name des Back-End-Snapshots nicht immer übereinstimmen.BeispielIm folgenden Beispiel wird ein erstellt
VolumeSnapshotContent
Objekt, das auf 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> volumeSnapshotRef: name: import-snap namespace: default
-
-
Cluster admin: Erstellen Sie das
VolumeSnapshot
CR, der auf den verweistVolumeSnapshotContent
Objekt: Dadurch wird der Zugriff auf die Verwendung des angefordertVolumeSnapshot
In einem bestimmten Namespace.BeispielIm folgenden Beispiel wird ein erstellt
VolumeSnapshot
CR benanntimport-snap
Die auf die verweisenVolumeSnapshotContent
Genanntimport-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 Schnapper erkennt das neu erstellte
VolumeSnapshotContent
und führt denListSnapshots
Aufruf aus. Trident erstellt dieTridentSnapshot
.-
Der externe Schnapper legt den fest
VolumeSnapshotContent
BisreadyToUse
Und dasVolumeSnapshot
Bistrue
. -
Trident kehrt zurück
readyToUse=true
.
-
-
Jeder Benutzer: Erstellen Sie eine
PersistentVolumeClaim
Um auf das neue zu verweisenVolumeSnapshot
, Wo derspec.dataSource
(Oderspec.dataSourceRef
) Name ist derVolumeSnapshot
Name:BeispielIm folgenden Beispiel wird eine PVC erstellt, die auf den verweist
VolumeSnapshot
Genanntimport-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
Stellen Sie Volume-Daten mithilfe von Snapshots wieder her
Das Snapshot-Verzeichnis ist standardmäßig ausgeblendet, um die maximale Kompatibilität von Volumes zu ermöglichen, die über bereitgestellt werden ontap-nas
Und ontap-nas-economy
Treiber. Aktivieren Sie die .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. |
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.
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 müssen über einen gebundenen PVC-Snapshot und einen verfügbaren Volume-Snapshot verfügen.
-
Vergewissern Sie sich, dass der PVC-Status gebunden ist.
kubectl get pvc
-
Überprüfen Sie, ob der Volume-Snapshot einsatzbereit ist.
kubectl get vs
-
Erstellen Sie den TASR CR. In diesem Beispiel wird ein CR für PVC und Volume-Snapshot erstellt
pvc1
pvc1-snapshot
.Der TASR CR muss sich in einem Namensraum befinden, in dem PVC und VS vorhanden sind. cat tasr-pvc1-snapshot.yaml
apiVersion: trident.netapp.io/v1 kind: TridentActionSnapshotRestore metadata: name: trident-snap namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot
-
Wenden Sie den CR an, um ihn aus dem Snapshot wiederherzustellen. Dieses Beispiel wird aus Snapshot wiederhergestellt
pvc1
.kubectl create -f tasr-pvc1-snapshot.yaml
tridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Trident stellt die Daten aus dem Snapshot wieder her. Sie können den Wiederherstellungsstatus von Snapshots ü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 Sie ein PV mit den zugehörigen Snapshots
Beim Löschen eines persistenten Volumes mit zugeordneten Snapshots wird das entsprechende Trident-Volume auf den „Löschstatus“ aktualisiert. Entfernen Sie die Volume-Snapshots, um das 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 bei Bedarf deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
Und Aktualisierungnamespace
In Ihren Namespace.