Lavorare con le istantanee
È possibile creare Kubernetes VolumeSnapshots (snapshot del volume) di volumi persistenti (PVS) per mantenere le copie point-in-time dei volumi Astra Trident. Inoltre, è possibile creare un nuovo volume, noto anche come clone, da uno snapshot di volume esistente. Lo snapshot del volume è supportato da ontap-nas
, ontap-san
, ontap-san-economy
, solidfire-san
, gcp-cvs
, e. azure-netapp-files
driver.
È necessario disporre di uno snapshot controller esterno e di Custom Resource Definitions (CRD). 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. Implementazione di un controller di snapshot di volume.
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. |
Fase 1: Creare un VolumeSnapshotClass
In questo esempio viene creata una classe di snapshot del volume.
cat snap-sc.yaml 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.
Per ulteriori informazioni, fare riferimento al VolumeSnapshotClass
.
Fase 2: Creare un'istantanea di un PVC esistente
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
In questo esempio, lo snapshot viene creato 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
Questo esempio crea 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. |
Implementazione di un controller di snapshot di volume
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 lo snapshot controller nello spazio dei nomi desiderato. Modificare i manifesti YAML riportati di seguito per modificare lo spazio dei nomi.
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