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 Astra Trident, importare uno snapshot creato all'esterno di Astra 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".-
Il
driver
Indica il driver Astra 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
Astra Trident supporta a. "Processo Snapshot con pre-provisioning di Kubernetes" per consentire all'amministratore del cluster di creare un VolumeSnapshotContent
Object e importa gli snapshot creati all'esterno di Astra Trident.
Astra Trident deve aver creato o importato il volume principale dello snapshot.
-
Cluster admin: creare un
VolumeSnapshotContent
oggetto che fa riferimento allo snapshot backend. In questo modo viene avviato il flusso di lavoro delle snapshot in Astra 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>
pollsnapshotHandle
. Queste sono le uniche informazioni fornite a Astra Trident dallo snap-ter esterno inListSnapshots
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>
-
-
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 la nuova creazione
VolumeSnapshotContent
ed esegueListSnapshots
chiamata. Astra Trident crea l'TridentSnapshot
.-
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. |
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 le snapshot del volume per eliminare il volume Astra 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.