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 snapshot e i CRD, fare riferimento alla 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"-
I
driver
punti al driver Astra Trident CSI. -
deletionPolicy
può essereDelete
oRetain
. Quando è impostato suRetain
, lo snapshot fisico sottostante sul cluster di archiviazione viene conservato anche quando l' `VolumeSnapshot`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
-
-
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
-
Nell'esempio riportato di seguito viene creato un oggetto snapshot volume per un PVC denominato
pvc1
e il nome dello snapshot viene impostato supvc1-snap
. Un VolumeSnapshot è analogo a un PVC ed è associato 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 l'
VolumeSnapshotContent`oggetto per `pvc1-snap
VolumeSnapshot descrivendolo.Snapshot Content Name`Identifica l'oggetto VolumeSnapshotContent che serve questo snapshot. Il `Ready 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 alla "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 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 l' "Processo Snapshot con pre-provisioning di Kubernetes" per consentire all'amministratore del cluster di creare un VolumeSnapshotContent
oggetto e importare 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">
. -
Specifica
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>
insnapshotHandle
. questa è l'unica informazione fornita ad Astra Trident dallo snap-over esterno nellaListSnapshots
chiamata.`<volumeSnapshotContentName>`Non può sempre corrispondere 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 la
VolumeSnapshot
CR che fa riferimento all'VolumeSnapshotContent`oggetto. In questo modo viene richiesto l'accesso per utilizzare `VolumeSnapshot
in un determinato spazio dei nomi.EsempioNell'esempio seguente viene creata una
VolumeSnapshot
CR denominataimport-snap
che fa riferimento allaVolumeSnapshotContent
import-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. Astra Trident crea laTridentSnapshot
.-
Lo snapshot esterno imposta
VolumeSnapshotContent
sureadyToUse
eVolumeSnapshot
sutrue
. -
Trident ritorna
readyToUse=true
.
-
-
Qualsiasi utente: creare un
PersistentVolumeClaim
per fare riferimento al nuovoVolumeSnapshot
, dove ilspec.dataSource
nome (ospec.dataSourceRef
) è ilVolumeSnapshot
nome.EsempioNell'esempio riportato di seguito viene creato un PVC che fa riferimento alla
VolumeSnapshot
import-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 dello snapshot è nascosta per impostazione predefinita in modo da facilitare la massima compatibilità dei volumi sottoposti a provisioning mediante i ontap-nas
driver e. ontap-nas-economy
Abilitare la .snapshot
directory per il ripristino diretto dei dati dagli 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 aggiornare lonamespace
spazio dei nomi.