Lavorare con le istantanee
A partire dalla versione 20.01 di Astra Trident, è possibile creare snapshot di PVS nel livello Kubernetes. È possibile utilizzare queste snapshot per mantenere copie point-in-time dei volumi creati da Astra Trident e pianificare la creazione di volumi aggiuntivi (cloni). Lo snapshot del volume è supportato da ontap-nas
, ontap-san
, ontap-san-economy
, solidfire-san
, gcp-cvs
, e. azure-netapp-files
driver.
|
Questa funzione è disponibile da Kubernetes 1.17 (beta) ed è GA da 1.20. Per informazioni sulle modifiche apportate al passaggio dalla versione beta a quella GA, vedere "il blog di release". Con la laurea in GA, il v1 La versione API è stata introdotta ed è compatibile con le versioni precedenti v1beta1 snapshot.
|
-
La creazione di snapshot dei volumi richiede la creazione di un controller di snapshot esterno e di alcune definizioni di risorse personalizzate (CRD). Questa è la responsabilità del Kubernetes orchestrator in uso (ad esempio: Kubeadm, GKE, OpenShift).
È possibile creare uno snapshot-controller esterno e uno snapshot CRD 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-3.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
-
Creare lo snapshot-controller nello spazio dei nomi desiderato. Modificare i manifesti YAML riportati di seguito per modificare lo spazio dei nomi.
Non creare uno snapshot-controller se si configurano snapshot di volumi on-demand in un ambiente GKE. GKE utilizza un controller di snapshot integrato e nascosto.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
|
CSI Snapshotter offre un "convalida di webhook" per aiutare gli utenti a convalidare le istantanee v1beta1 esistenti e confermare che si tratta di oggetti di risorse validi. Il webhook validante etichetta automaticamente gli oggetti snapshot non validi e impedisce la creazione di oggetti non validi futuri. Il webhook di convalida viene implementato da Kubernetes orchestrator. Consultare le istruzioni per implementare manualmente il webhook di convalida "qui". Trova esempi di manifesti di snapshot non validi "qui". |
Nell'esempio riportato di seguito vengono illustrati i costrutti necessari per l'utilizzo delle snapshot e viene illustrato come creare e utilizzare le istantanee.
Fase 1: Impostare un VolumeSnapshotClass
Prima di creare un'istantanea del volume, impostare un collegamento:../trident-reference/objects.html[VolumeSnapshotClass
^].
$ cat snap-sc.yaml #Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.17 - 1.19, use apiVersion v1beta1. apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
Il driver
Indica il driver CSI di Astra Trident. deletionPolicy
può essere Delete
oppure Retain
. Quando è impostato su Retain
, lo snapshot fisico sottostante sul cluster di storage viene conservato anche quando VolumeSnapshot
oggetto eliminato.
Fase 2: Creare un'istantanea di un PVC esistente
$ cat snap.yaml #Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.17 - 1.19, use apiVersion v1beta1. apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1
Lo snapshot è in fase di creazione per un PVC denominato pvc1`e il nome dello snapshot è impostato su `pvc1-snap
.
$ kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created $ kubectl get volumesnapshots NAME AGE pvc1-snap 50s
Questo ha creato un VolumeSnapshot
oggetto. Un'istantanea VolumeSnapshot è analoga a un PVC ed è associata a un VolumeSnapshotContent
oggetto che rappresenta lo snapshot effettivo.
È possibile identificare VolumeSnapshotContent
oggetto per pvc1-snap
VolumeSnapshot descrivendolo.
$ 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 . .
Il Snapshot Content Name
Identifica l'oggetto VolumeSnapshotContent che fornisce questa snapshot. Il Ready To Use
Il parametro indica che l'istantanea può essere utilizzata per creare un nuovo PVC.
Fase 3: Creazione di PVC da VolumeSnapshots
Vedere l'esempio seguente per creare un PVC utilizzando uno snapshot:
$ 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
dataSource
Mostra che il PVC deve essere creato utilizzando un VolumeSnapshot denominato pvc1-snap
come origine dei dati. Questo indica ad Astra Trident di creare un PVC dall'istantanea. Una volta creato, il PVC può essere collegato a un pod e utilizzato come qualsiasi altro PVC.
|
Quando si elimina un volume persistente con snapshot associate, il volume Trident corrispondente viene aggiornato a uno stato di eliminazione. Per eliminare il volume Astra Trident, è necessario rimuovere le snapshot del volume. |