Lavorare con le istantanee
Le snapshot del volume di Kubernetes dei volumi persistenti (PVS) consentono copie point-in-time dei volumi. Puoi creare una snapshot di un volume creato utilizzando Trident, importare uno snapshot creato al di fuori di Trident, creare un nuovo volume da una snapshot esistente e recuperare i dati del volume da snapshot.
Panoramica
Lo snapshot del volume è supportato da ontap-nas
, ontap-nas-flexgroup
, ontap-san
, ontap-san-economy
, solidfire-san
, gcp-cvs
, e. azure-netapp-files
driver.
Per utilizzare gli snapshot, è necessario disporre di un controller snapshot esterno e di CRD (Custom Resource Definitions). Questa è la responsabilità del Kubernetes orchestrator (ad esempio: Kubeadm, GKE, OpenShift).
Se la distribuzione Kubernetes non include il controller di snapshot e i CRD, fare riferimento a. Implementare un controller per lo snapshot dei volumi.
|
Non creare un controller di snapshot se si creano snapshot di volumi on-demand in un ambiente GKE. GKE utilizza un controller di snapshot integrato e nascosto. |
Creare un'istantanea del volume
-
Creare un
VolumeSnapshotClass
. Per ulteriori informazioni, fare riferimento a. "VolumeSnapshotClass".-
`driver`Indica il driver Trident CSI.
-
deletionPolicy
può essereDelete
oppureRetain
. Quando è impostato suRetain
, lo snapshot fisico sottostante sul cluster di storage viene conservato anche quandoVolumeSnapshot
oggetto eliminato.Esempiocat snap-sc.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
-
-
Creare 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 di volume per un PVC denominato
pvc1
e il nome dello snapshot è impostato supvc1-snap
. Un'istantanea VolumeSnapshot è analoga a un PVC ed è associata a unVolumeSnapshotContent
oggetto che 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
VolumeSnapshotContent
oggetto perpvc1-snap
VolumeSnapshot descrivendolo. IlSnapshot Content Name
Identifica l'oggetto VolumeSnapshotContent che fornisce questa snapshot. IlReady To Use
Parametro indica che l'istantanea 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 . .
-
Creare un PVC da uno snapshot di volume
È possibile utilizzare dataSource
Per creare un PVC utilizzando un VolumeSnapshot denominato <pvc-name>
come origine dei dati. Una volta creato, il PVC può essere collegato a un pod e utilizzato come qualsiasi altro PVC.
|
Il PVC verrà creato nello stesso backend del volume di origine. Fare riferimento a. "KB: La creazione di un PVC da uno snapshot PVC Trident non può essere creata in un backend alternativo". |
Nell'esempio seguente viene creato il PVC utilizzando pvc1-snap
come origine 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
Importare uno snapshot di volume
Trident supporta l' "Processo Snapshot con pre-provisioning di Kubernetes" per consentire all'amministratore del cluster di creare un VolumeSnapshotContent
oggetto e importare snapshot creati all'esterno di Trident.
Trident deve aver creato o importato il volume principale dello snapshot.
-
Cluster admin: creare un
VolumeSnapshotContent
oggetto che fa riferimento allo snapshot backend. Viene avviato il flusso di lavoro dello snapshot in Trident.-
Specificare il nome dell'istantanea backend in
annotations
cometrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">
. -
Specificare
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>
insnapshotHandle
. si tratta delle uniche informazioni fornite a Trident dallo snap-over esterno nellaListSnapshots
chiamata.Il <volumeSnapshotContentName>
Impossibile corrispondere sempre al nome dell'istantanea backend a causa di vincoli di denominazione CR.EsempioNell'esempio seguente viene creato un
VolumeSnapshotContent
oggetto che fa riferimento allo snapshot 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: creare il
VolumeSnapshot
CR che fa riferimento a.VolumeSnapshotContent
oggetto. In questo modo viene richiesto l'accesso per l'utilizzo diVolumeSnapshot
in un determinato namespace.EsempioNell'esempio seguente viene creato un
VolumeSnapshot
CR con nomeimport-snap
questo fa riferimento alVolumeSnapshotContent
con nomeimport-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 snapshot esterno riconosce il nuovo creato ed esegue
ListSnapshots
laVolumeSnapshotContent
chiamata. Trident crea laTridentSnapshot
.-
Lo snapshot esterno imposta
VolumeSnapshotContent
a.readyToUse
e a.VolumeSnapshot
a.true
. -
Trident ritorna
readyToUse=true
.
-
-
Qualsiasi utente: creare un
PersistentVolumeClaim
per fare riferimento al nuovoVolumeSnapshot
, dove ilspec.dataSource
(o.spec.dataSourceRef
) è ilVolumeSnapshot
nome.EsempioNell'esempio seguente viene creato un PVC che fa riferimento a.
VolumeSnapshot
con nomeimport-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
Ripristinare i dati del volume utilizzando le snapshot
La directory Snapshot è nascosta per impostazione predefinita per facilitare la massima compatibilità dei volumi con cui viene eseguito il provisioning mediante ontap-nas
e. ontap-nas-economy
driver. Attivare il .snapshot
directory per ripristinare i dati direttamente dalle snapshot.
Utilizzare la CLI ONTAP per il ripristino dello snapshot del volume per ripristinare uno stato di un volume 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-place da uno snapshot
Trident consente il ripristino rapido e in-place del volume da uno snapshot utilizzando il TridentActionSnapshotRestore
CR (TASR). Questo CR funziona come un'azione imperativa di Kubernetes e non persiste al termine dell'operazione.
Trident supporta il ripristino delle istantanee su ontap-san
, ontap-san-economy
, ontap-nas
, , ontap-nas-flexgroup
, azure-netapp-files
gcp-cvs
, google-cloud-netapp-volumes
e solidfire-san
driver.
È necessario disporre di un PVC associato e di uno snapshot del volume disponibile.
-
Verificare che lo stato del PVC sia limitato.
kubectl get pvc
-
Verificare che lo snapshot del volume sia pronto per l'uso.
kubectl get vs
-
Creare TASR CR. In questo esempio viene creata una CR per PVC
pvc1
e snapshot volumepvc1-snapshot
.Il TASR CR deve trovarsi in uno spazio dei nomi in cui esistono PVC e VS.
cat tasr-pvc1-snapshot.yaml apiVersion: trident.netapp.io/v1 kind: TridentActionSnapshotRestore metadata: name: trident-snap namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot
-
Applicare la CR per eseguire il ripristino dall'istantanea. Nell'esempio riportato di seguito vengono ripristinati gli snapshot
pvc1
.kubectl create -f tasr-pvc1-snapshot.yaml tridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Trident ripristina i dati dalla 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: ""
|
|
Eliminare un PV con gli snapshot associati
Quando si elimina un volume persistente con snapshot associate, il volume Trident corrispondente viene aggiornato a uno stato di eliminazione. Rimuovere gli snapshot del volume per eliminare il volume Trident.
Implementare un controller per lo snapshot dei volumi
Se la distribuzione Kubernetes non include lo snapshot controller e i CRD, è possibile implementarli come segue.
-
Creare CRD snapshot di 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 di snapshot.
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
Se necessario, aprire deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
e aggiornarenamespace
allo spazio dei nomi.