Lavorare con gli snapshot
Gli snapshot dei volumi persistenti (PV) di Kubernetes consentono copie point-in-time dei volumi. È possibile creare uno snapshot di un volume creato utilizzando Trident, importare uno snapshot creato al di fuori di Trident, creare un nuovo volume da uno snapshot esistente e recuperare i dati del volume dagli snapshot.
Panoramica
Lo snapshot del volume è supportato da ontap-nas , ontap-nas-flexgroup , ontap-san , ontap-san-economy , solidfire-san , gcp-cvs , azure-netapp-files , E google-cloud-netapp-volumes conducenti.
Per lavorare con gli snapshot è necessario disporre di un controller snapshot esterno e di definizioni di risorse personalizzate (CRD). Questa è responsabilità dell'orchestratore di Kubernetes (ad esempio: Kubeadm, GKE, OpenShift).
Se la distribuzione Kubernetes non include il controller snapshot e i CRD, fare riferimento aDistribuisci un controller di snapshot del volume .
|
|
Non creare un controller snapshot se si creano snapshot di volumi on-demand in un ambiente GKE. GKE utilizza un controller snapshot nascosto e integrato. |
Crea uno snapshot del volume
-
Crea un
VolumeSnapshotClassPer ulteriori informazioni, fare riferimento a"Classe VolumeSnapshot" .-
IL
driverindica il pilota Trident CSI. -
deletionPolicy`può essere `DeleteORetain. Quando impostato suRetain, lo snapshot fisico sottostante sul cluster di archiviazione viene mantenuto anche quandoVolumeSnapshotl'oggetto viene eliminato.Esempiocat snap-sc.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
-
-
Crea un'istantanea di un PVC esistente.
Esempi-
Questo esempio crea un'istantanea di un PVC esistente.
cat snap.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1 -
Questo esempio crea un oggetto snapshot del volume per un PVC denominato
pvc1e il nome dello snapshot è impostato supvc1-snap. Un VolumeSnapshot è analogo a un PVC ed è associato a unVolumeSnapshotContentoggetto che rappresenta l'istantanea effettiva.kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
Puoi identificare il
VolumeSnapshotContentoggetto per ilpvc1-snapVolumeSnapshot descrivendolo. ILSnapshot Content Nameidentifica l'oggetto VolumeSnapshotContent che gestisce questo snapshot. ILReady To UseIl parametro indica che lo snapshot può essere utilizzato per creare un nuovo PVC.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 ...
-
Creare un PVC da uno snapshot del volume
Puoi usare dataSource per creare un PVC utilizzando un VolumeSnapshot denominato <pvc-name> come fonte dei dati. Una volta creato, il PVC può essere attaccato a un contenitore e utilizzato come qualsiasi altro PVC.
|
|
Il PVC verrà creato nello stesso backend del volume sorgente. Fare riferimento a"KB: La creazione di un PVC da uno snapshot PVC Trident non può essere creata in un backend alternativo" . |
L'esempio seguente crea il PVC utilizzando pvc1-snap come fonte dei dati.
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
Importa uno snapshot del volume
Trident supporta il"Processo di snapshot pre-provisioning di Kubernetes" per consentire all'amministratore del cluster di creare un VolumeSnapshotContent oggetti e importare snapshot creati al di fuori di Trident.
Trident deve aver creato o importato il volume padre dello snapshot.
-
Amministratore del cluster: Crea un
VolumeSnapshotContentoggetto che fa riferimento allo snapshot del backend. In questo modo si avvia il flusso di lavoro degli snapshot in Trident.-
Specificare il nome dello snapshot del backend in
annotationsCOMEtrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">. -
Specificare
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>InsnapshotHandleQuesta è l'unica informazione fornita a Trident dallo snapshotter esterno nelListSnapshotschiamata.IL <volumeSnapshotContentName>non può sempre corrispondere al nome dello snapshot backend a causa dei vincoli di denominazione CR.EsempioL'esempio seguente crea un
VolumeSnapshotContentoggetto che fa riferimento allo snapshot del backendsnap-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 -
-
Amministratore del cluster: Crea il
VolumeSnapshotCR che fa riferimento alVolumeSnapshotContentoggetto. Questa richiesta richiede l'accesso per utilizzare ilVolumeSnapshotin un dato spazio dei nomi.EsempioL'esempio seguente crea un
VolumeSnapshotCR nominatoimport-snapche fa riferimento alVolumeSnapshotContentnominatoimport-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 -
Elaborazione interna (nessuna azione richiesta): Lo snapshotter esterno riconosce il nuovo creato
VolumeSnapshotContente gestisce ilListSnapshotschiamata. Trident crea ilTridentSnapshot.-
Lo snapshotter esterno imposta il
VolumeSnapshotContentAreadyToUsee ilVolumeSnapshotAtrue. -
Il ritorno Trident
readyToUse=true.
-
-
Qualsiasi utente: Crea un
PersistentVolumeClaimper fare riferimento al nuovoVolumeSnapshot, dove ilspec.dataSource(Ospec.dataSourceRef) il nome è ilVolumeSnapshotnome.EsempioL'esempio seguente crea un PVC che fa riferimento a
VolumeSnapshotnominatoimport-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
Recupera i dati del volume utilizzando gli snapshot
La directory snapshot è nascosta per impostazione predefinita per facilitare la massima compatibilità dei volumi forniti tramite ontap-nas E ontap-nas-economy conducenti. Abilita il .snapshot directory per recuperare direttamente i dati dagli snapshot.
Utilizzare il ripristino dello snapshot del volume ONTAP CLI per ripristinare un volume a uno stato registrato in uno snapshot precedente.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
|
|
Quando si ripristina una copia snapshot, la configurazione del volume esistente viene sovrascritta. Le modifiche apportate ai dati del volume dopo la creazione della copia snapshot andranno perse. |
Ripristino del volume in loco da uno snapshot
Trident fornisce un rapido ripristino del volume in loco da uno snapshot utilizzando TridentActionSnapshotRestore (TASR) CR. Questa CR funziona come un'azione Kubernetes imperativa e non persiste dopo il completamento dell'operazione.
Trident supporta il ripristino degli snapshot su ontap-san , ontap-san-economy , ontap-nas , ontap-nas-flexgroup , azure-netapp-files , gcp-cvs , google-cloud-netapp-volumes , E solidfire-san conducenti.
È necessario disporre di un PVC associato e di uno snapshot del volume disponibile.
-
Verificare che lo stato del PVC sia vincolato.
kubectl get pvc -
Verificare che lo snapshot del volume sia pronto per l'uso.
kubectl get vs
-
Creare il CR TASR. Questo esempio crea un CR per PVC
pvc1e snapshot del volumepvc1-snapshot.Il CR TASR deve trovarsi in uno spazio dei nomi in cui sono presenti PVC e VS. cat tasr-pvc1-snapshot.yamlapiVersion: trident.netapp.io/v1 kind: TridentActionSnapshotRestore metadata: name: trident-snap namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot -
Applicare il CR per ripristinare dallo snapshot. Questo esempio ripristina da uno snapshot
pvc1.kubectl create -f tasr-pvc1-snapshot.yamltridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Trident ripristina i dati dallo snapshot. È possibile verificare lo stato di ripristino dello snapshot:
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: ""
|
|
|
Elimina un PV con gli snapshot associati
Quando si elimina un volume persistente con snapshot associati, il volume Trident corrispondente viene aggiornato allo "stato di eliminazione". Rimuovere gli snapshot del volume per eliminare il volume Trident .
Distribuisci un controller di snapshot del volume
Se la distribuzione Kubernetes non include il controller snapshot e i CRD, è possibile distribuirli come segue.
-
Creare CRD di snapshot del volume.
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 -
Creare il controller snapshot.
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.yamlSe necessario, aprire deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamle aggiornarenamespaceal tuo namespace.