Lavora 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 dai ontap-nas, ontap-nas-flexgroup, ontap-san, ontap-san-economy, solidfire-san, azure-netapp-files e google-cloud-netapp-volumes driver.
Per lavorare con gli snapshot, è necessario disporre di un controller snapshot esterno e di Custom Resource Definitions (CRD). Questa è responsabilità dell'orchestratore Kubernetes (ad esempio: Kubeadm, GKE, OpenShift).
Se la tua distribuzione Kubernetes non include il controller snapshot e i CRD, consulta Distribuire un controller 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 integrato e nascosto. |
Crea uno Snapshot del volume
-
Crea un
VolumeSnapshotClass. Per ulteriori informazioni, fare riferimento a "VolumeSnapshotClass".-
Il
driverpunta al driver Trident CSI. -
deletionPolicypuò essereDeleteoRetain. Quando impostato suRetain, lo snapshot fisico sottostante sullo storage cluster viene mantenuto anche quando l'oggettoVolumeSnapshotviene 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 una Snapshot di un PVC esistente.
Esempi-
Questo esempio crea uno snapshot 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 -
In questo esempio viene creato 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 un oggettoVolumeSnapshotContentche rappresenta lo snapshot effettivo.kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
È possibile identificare l
VolumeSnapshotContent'oggetto per il `pvc1-snapVolumeSnapshot descrivendolo. LSnapshot Content Name'oggetto identifica l'oggetto VolumeSnapshotContent che serve questa snapshot. Il parametro `Ready To Useindica che la snapshot può essere utilizzata 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 ...
-
Crea un PVC da una Snapshot del volume
Puoi usare dataSource per creare un PVC usando un VolumeSnapshot denominato <pvc-name> come origine dei dati. Dopo che il PVC è stato creato, può essere collegato a un pod e usato come qualsiasi altro PVC.
|
|
Il PVC verrà creato nello stesso backend del volume sorgente. Fare riferimento a "KB: Creazione di un PVC da un Trident PVC Snapshot non può essere creata in un backend alternativo". |
L'esempio seguente crea il PVC utilizzando pvc1-snap come origine 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 una Snapshot del volume
Trident supporta la "Processo di snapshot pre-provisionato Kubernetes" per consentire all'amministratore del cluster di creare un oggetto VolumeSnapshotContent e importare Snapshot creati al di fuori di Trident.
Trident deve aver creato o importato il volume d'origine dello Snapshot.
-
Cluster admin: Creare un
VolumeSnapshotContentoggetto che fa riferimento allo snapshot del backend. Questo avvia il flusso di lavoro dello 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>insnapshotHandle. Questa è l'unica informazione fornita a Trident dallo snapshotter esterno nella chiamataListSnapshots.Il <volumeSnapshotContentName>non può sempre corrispondere al nome dello snapshot del backend a causa dei vincoli di denominazione del CR.EsempioIl seguente esempio crea un oggetto
VolumeSnapshotContentche 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 -
-
Cluster admin: Crea il
VolumeSnapshotCR che fa riferimento all'VolumeSnapshotContentoggetto. Questa richiesta consente l'accesso all'utilizzo diVolumeSnapshotin un determinato namespace.EsempioIl seguente esempio crea un
VolumeSnapshotCR chiamatoimport-snapche fa riferimento alVolumeSnapshotContentchiamatoimport-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
VolumeSnapshotContente esegue la chiamataListSnapshots. Trident crea ilTridentSnapshot.-
L'external snapshotter imposta
VolumeSnapshotContentsureadyToUseeVolumeSnapshotsutrue. -
Trident restituisce
readyToUse=true.
-
-
Qualsiasi utente: Crea un
PersistentVolumeClaimper fare riferimento al nuovoVolumeSnapshot, dove ilspec.dataSource(ospec.dataSourceRef) nome è ilVolumeSnapshotnome.EsempioIl seguente esempio crea un PVC che fa riferimento al
VolumeSnapshotdenominatoimport-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 le Snapshot
La directory delle snapshot è nascosta per impostazione predefinita per facilitare la massima compatibilità dei volumi forniti utilizzando i driver ontap-nas e ontap-nas-economy. Abilita la directory .snapshot per recuperare i dati direttamente dalle snapshot.
Utilizzare il comando ONTAP CLI di ripristino dell'istantanea del volume per ripristinare un volume a uno stato registrato in una precedente Snapshot.
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 vengono perse. |
Ripristino del volume in loco da una Snapshot
Trident offre un rapido ripristino in-place del volume da una snapshot utilizzando il TridentActionSnapshotRestore (TASR) CR. Questo CR funziona come un'azione Kubernetes imperativa e non persiste dopo il completamento dell'operazione.
Trident supporta il ripristino delle snapshot sui driver ontap-san, ontap-san-economy, ontap-nas, ontap-nas-flexgroup, azure-netapp-files, google-cloud-netapp-volumes e solidfire-san.
È necessario disporre di un PVC vincolato e di una Snapshot del volume disponibile.
-
Verificare che lo stato del PVC sia bound.
kubectl get pvc -
Verificare che la snapshot del volume sia pronta per l'uso.
kubectl get vs
-
Crea il CR TASR. Questo esempio crea un CR per PVC
pvc1e volume snapshotpvc1-snapshot.Il TASR CR deve trovarsi in uno spazio dei nomi in cui esistono il PVC e il VS. cat tasr-pvc1-snapshot.yamlapiVersion: trident.netapp.io/v1 kind: TridentActionSnapshotRestore metadata: name: trident-snap namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot -
Applica il CR per ripristinare dallo snapshot. Questo esempio ripristina dallo snapshot
pvc1.kubectl create -f tasr-pvc1-snapshot.yamltridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Trident ripristina i dati dallo snapshot. Puoi 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: ""
|
|
|
Eliminare un PV con le relative Snapshot
Quando si elimina un Persistent Volume con le relative Snapshot, il volume Trident corrispondente viene aggiornato a uno "Deleting state". Rimuovere le Snapshot del volume per eliminare il volume Trident.
Distribuire un controller snapshot del volume
Se la tua distribuzione di Kubernetes non include il controller di snapshot e i CRD, puoi distribuirli come segue.
-
Crea 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 -
Crea il controller di 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, apri deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamle aggiornanamespaceal tuo namespace.