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
L'istantanea del volume è supportata 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 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.
-
deletionPolicypuò essereDeleteoppureRetain. Quando è impostato suRetain, lo snapshot fisico sottostante sul cluster di storage viene conservato anche quandoVolumeSnapshotoggetto 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
pvc1e il nome dello snapshot è impostato supvc1-snap. Un'istantanea VolumeSnapshot è analoga a un PVC ed è associata a unVolumeSnapshotContentoggetto 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
VolumeSnapshotContentoggetto perpvc1-snapVolumeSnapshot descrivendolo. IlSnapshot Content NameIdentifica l'oggetto VolumeSnapshotContent che fornisce questa snapshot. IlReady To UseParametro 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
VolumeSnapshotContentoggetto che fa riferimento allo snapshot backend. Viene avviato il flusso di lavoro dello snapshot in Trident.-
Specificare il nome dell'istantanea backend in
annotationscometrident.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 nellaListSnapshotschiamata.Il <volumeSnapshotContentName>Impossibile corrispondere sempre al nome dell'istantanea backend a causa di vincoli di denominazione CR.EsempioNell'esempio seguente viene creato un
VolumeSnapshotContentoggetto 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
VolumeSnapshotCR che fa riferimento a.VolumeSnapshotContentoggetto. In questo modo viene richiesto l'accesso per l'utilizzo diVolumeSnapshotin un determinato namespace.EsempioNell'esempio seguente viene creato un
VolumeSnapshotCR con nomeimport-snapquesto fa riferimento alVolumeSnapshotContentcon 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
ListSnapshotslaVolumeSnapshotContentchiamata. Trident crea laTridentSnapshot.-
Lo snapshot esterno imposta
VolumeSnapshotContenta.readyToUsee a.VolumeSnapshota.true. -
Trident ritorna
readyToUse=true.
-
-
Qualsiasi utente: creare un
PersistentVolumeClaimper fare riferimento al nuovoVolumeSnapshot, dove ilspec.dataSource(o.spec.dataSourceRef) è ilVolumeSnapshotnome.EsempioNell'esempio seguente viene creato un PVC che fa riferimento a.
VolumeSnapshotcon 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
pvc1e snapshot volumepvc1-snapshot.Il TASR CR deve trovarsi in uno spazio dei nomi in cui esistono 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 la CR per eseguire il ripristino dall'istantanea. Nell'esempio riportato di seguito vengono ripristinati gli snapshot
pvc1.kubectl create -f tasr-pvc1-snapshot.yamltridentactionsnapshotrestore.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 gli snapshot associati, il volume Trident corrispondente viene aggiornato allo "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.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 aggiornarenamespaceallo spazio dei nomi.