Arbeiten Sie mit Snapshots
Ab Version 20.01 von Astra Trident können Sie auf der Kubernetes-Ebene Snapshots von PVS erstellen. Mithilfe dieser Snapshots können zeitpunktgenaue Kopien von Volumes erstellt werden, die durch Astra Trident erstellt wurden, und die Erstellung zusätzlicher Volumes (Klone) geplant werden. Volume Snapshot wird von unterstützt ontap-nas, ontap-san, ontap-san-economy, solidfire-san, gcp-cvs, und azure-netapp-files Treiber.
|
|
Diese Funktion ist über Kubernetes 1.17 (Beta) erhältlich und wird ab 1.20 verfügbar sein. Informationen zu den Änderungen, die beim Wechsel von der Beta zu GA erforderlich sind, finden Sie unter "Der Release Blog". Mit der Graduierung zu GA, die v1 Die API-Version wird eingeführt und ist abwärtskompatibel mit v1beta1 Snapshots:
|
-
Zum Erstellen von Volume-Snapshots müssen ein externer Snapshot-Controller und CRDs (Custom Resource Definitions) erstellt werden. In dieser Verantwortung liegt der verwendete Kubernetes Orchestrator (z. B. Kubeadm, GKE, OpenShift).
Wenn Ihre Kubernetes-Distribution den Snapshot-Controller und CRDs nicht enthält, können Sie sie wie folgt bereitstellen.
-
Erstellen von Volume Snapshot-CRDs.
Verwenden Sie für Kubernetes ab Version 1.20 v1 Snapshot-CRDs mit Snapshot-Komponenten von Version 5.0 oder höher. Verwenden Sie für Kubernetes 1.19 v1beta1 mit v3.0.3 Snapshot-Komponenten.
V5.0-Komponentencat snapshot-setup.sh #!/bin/bash # Create volume snapshot CRDs kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
komponenten v3.0.3cat snapshot-setup.sh #!/bin/bash # Create volume snapshot CRDs kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
-
Erstellen Sie den Snapshot-Controller im gewünschten Namespace. Bearbeiten Sie die YAML-Manifeste unten, um den Namespace zu ändern.
Für Kubernetes 1.20 und höher verwenden Sie v5.0 oder höher. Für Kubernetes Version 1.19 verwenden Sie v3.0.3
Erstellen Sie keinen Snapshot-Controller, wenn Sie On-Demand-Volumen-Schnappschüsse in einer GKE-Umgebung einrichten. GKE verwendet einen integrierten, verborgenen Snapshot-Controller. V5.0-Controllerkubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
controller v3.0.3kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
|
|
CSI-Snapshotter bietet ein "Webhook wird überprüft" Um Benutzern zu helfen, vorhandene v1beta1 Snapshots zu validieren und zu bestätigen, dass es sich um gültige Ressourcenobjekte handelt. Der validierende Webhook markiert automatisch ungültige Snapshot-Objekte und verhindert die Erstellung von zukünftigen ungültigen Objekten. Der validierende Webhook wird über den Kubernetes Orchestrator implementiert. Lesen Sie die Anweisungen, um den zu validierende Webhook manuell bereitzustellen "Hier". Beispiele für ungültige Snapshot-Manifeste "Hier". |
Das unten aufgeführte Beispiel erläutert die Konstrukte, die für die Arbeit mit Snapshots erforderlich sind und zeigt, wie Snapshots erstellt und verwendet werden können.
Schritt 1: Richten Sie ein VolumeSnapshotClass
Richten Sie vor dem Erstellen eines Volume-Snapshots einen Link:./Trident-Referenz/objects.html ein[VolumeSnapshotClass^].
cat snap-sc.yaml #Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.19, use apiVersion v1beta1. apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
Der driver Zeigt auf den CSI-Treiber von Astra Trident. deletionPolicy Kann sein Delete Oder Retain. Wenn eingestellt auf Retain, Der zugrunde liegende physische Snapshot auf dem Storage-Cluster wird auch dann beibehalten, wenn der VolumeSnapshot Objekt wurde gelöscht.
Schritt 2: Erstellen Sie einen Schnappschuss eines vorhandenen PVC
cat snap.yaml
#Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.19, use apiVersion v1beta1.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: pvc1-snap
spec:
volumeSnapshotClassName: csi-snapclass
source:
persistentVolumeClaimName: pvc1
Der Snapshot wird für ein PVC mit dem Namen erstellt pvc1, Und der Name des Snapshots ist auf festgelegt pvc1-snap.
kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
Dadurch wurde ein erstellt VolumeSnapshot Objekt: Ein VolumeSnapshot ist analog zu einem PVC und einem zugeordnet VolumeSnapshotContent Objekt, das den tatsächlichen Snapshot darstellt.
Es ist möglich, die zu identifizieren VolumeSnapshotContent Objekt für das pvc1-snap VolumeSnapshot wird beschrieben.
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
.
.
Der Snapshot Content Name Identifiziert das VolumeSnapshotContent-Objekt, das diesen Snapshot bereitstellt. Der Ready To Use Der Parameter gibt an, dass der Snapshot zum Erstellen einer neuen PVC verwendet werden kann.
Schritt 3: PVCs aus VolumeSnapshots erstellen
Im folgenden Beispiel wird das Erstellen eines PVC mithilfe eines Snapshots beschrieben:
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
dataSource Zeigt an, dass das PVC mit dem Namen VolumeSnapshot erstellt werden muss pvc1-snap Als Quelle der Daten. Damit beauftragt Astra Trident, aus dem Snapshot ein PVC zu erstellen. Nachdem die PVC erstellt wurde, kann sie an einem Pod befestigt und wie jedes andere PVC verwendet werden.
|
|
Wenn Sie ein persistentes Volume mit zugeordneten Snapshots löschen, wird das entsprechende Trident-Volume in einen „Löschzustand“ aktualisiert. Damit das Astra Trident Volume gelöscht werden kann, sollten die Snapshots des Volume entfernt werden. |
Weitere Informationen
-
Link:../Trident-Referenz/objects.html[
VolumeSnapshotClass^]