Travailler avec des instantanés
Les snapshots de volumes persistants (PV) de Kubernetes permettent de créer des copies ponctuelles de volumes. Vous pouvez créer un instantané d'un volume créé à l'aide de Trident, importer un instantané créé en dehors de Trident, créer un nouveau volume à partir d'un instantané existant et récupérer des données de volume à partir d'instantanés.
Aperçu
La capture instantanée de volume est prise en charge par ontap-nas , ontap-nas-flexgroup , ontap-san , ontap-san-economy , solidfire-san , gcp-cvs , azure-netapp-files , et google-cloud-netapp-volumes conducteurs.
Vous devez disposer d'un contrôleur de snapshots externe et de définitions de ressources personnalisées (CRD) pour travailler avec les snapshots. C’est la responsabilité de l’orchestrateur Kubernetes (par exemple : Kubeadm, GKE, OpenShift).
Si votre distribution Kubernetes n'inclut pas le contrôleur de snapshots et les CRD, reportez-vous à la documentation.Déployer un contrôleur d'instantané de volume .
|
|
Ne créez pas de contrôleur de snapshot si vous créez des snapshots de volume à la demande dans un environnement GKE. GKE utilise un contrôleur de snapshots intégré et caché. |
Créer un instantané de volume
-
Créer un
VolumeSnapshotClassPour plus d'informations, veuillez consulter"Classe d'instantané de volume" .-
Le
driverindique le pilote Trident CSI. -
deletionPolicy`peut être `DeleteouRetain. Lorsqu'il est réglé surRetain, l'instantané physique sous-jacent sur le cluster de stockage est conservé même lorsque leVolumeSnapshotL'objet a été supprimé.Exemplecat snap-sc.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
-
-
Créer un instantané d'un PVC existant.
Exemples-
Cet exemple crée un instantané d'un PVC existant.
cat snap.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1 -
Cet exemple crée un objet instantané de volume pour un PVC nommé
pvc1et le nom de l'instantané est défini surpvc1-snap. Un VolumeSnapshot est analogue à un PVC et est associé à unVolumeSnapshotContentobjet représentant l'instantané réel.kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
Vous pouvez identifier le
VolumeSnapshotContentl'objet pour lepvc1-snapVolumeSnapshot en le décrivant. LeSnapshot Content Nameidentifie l'objet VolumeSnapshotContent qui sert de support à cet instantané. LeReady To UseCe paramètre indique que l'instantané peut être utilisé pour créer un nouveau 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 ...
-
Créer un PVC à partir d'un instantané de volume
Vous pouvez utiliser dataSource pour créer un PVC à l'aide d'un VolumeSnapshot nommé <pvc-name> comme source des données. Une fois le tube PVC créé, il peut être fixé à une capsule et utilisé comme n'importe quel autre tube PVC.
|
|
Le PVC sera créé dans le même système de traitement que le volume source. Se référer à"KB : La création d’un PVC à partir d’un instantané de PVC Trident ne peut pas être effectuée dans un autre backend." . |
L'exemple suivant crée le PVC à l'aide de pvc1-snap comme source de données.
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
Importer un instantané de volume
Trident soutient"Processus de snapshot pré-provisionné Kubernetes" pour permettre à l'administrateur du cluster de créer un VolumeSnapshotContent objet et instantanés d'importation créés en dehors de Trident.
Trident doit avoir créé ou importé le volume parent de l'instantané.
-
Administrateur du cluster : Créer un
VolumeSnapshotContentobjet qui référence l'instantané du backend. Cela lance le flux de travail de capture d'instantané dans Trident.-
Spécifiez le nom de l'instantané du backend dans
annotationscommetrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">. -
Spécifier
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>danssnapshotHandleIl s'agit de la seule information fournie à Trident par le dispositif de capture d'instantanés externe.ListSnapshotsappel.Le <volumeSnapshotContentName>Il est impossible de toujours faire correspondre le nom de l'instantané du backend en raison des contraintes de dénomination des CR.ExempleL'exemple suivant crée un
VolumeSnapshotContentobjet qui référence un instantané du 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 -
-
Administrateur du cluster : Créez le
VolumeSnapshotCR qui fait référence à laVolumeSnapshotContentobjet. Cette demande d'accès à l'utilisation duVolumeSnapshotdans un espace de noms donné.ExempleL'exemple suivant crée un
VolumeSnapshotCR nomméimport-snapqui fait référence àVolumeSnapshotContentnommé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 -
Traitement interne (aucune action requise) : Le gestionnaire de snapshots externe reconnaît le snapshot nouvellement créé
VolumeSnapshotContentet dirige leListSnapshotsappel. Trident crée leTridentSnapshot.-
Le dispositif de capture d'écran externe définit le
VolumeSnapshotContentàreadyToUseet leVolumeSnapshotàtrue. -
Trident revient
readyToUse=true.
-
-
Tout utilisateur : Créez un
PersistentVolumeClaimpour faire référence au nouveauVolumeSnapshot, où lespec.dataSource(ouspec.dataSourceRef) le nom est leVolumeSnapshotnom.ExempleL'exemple suivant crée un PVC faisant référence à
VolumeSnapshotnommé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
Récupérer des données de volume à l'aide d'instantanés
Le répertoire des instantanés est masqué par défaut afin d'assurer une compatibilité maximale des volumes provisionnés à l'aide de ontap-nas et ontap-nas-economy conducteurs. Activer .snapshot répertoire permettant de récupérer directement les données à partir des instantanés.
Utilisez la commande ONTAP snapshot restore pour restaurer un volume à un état enregistré dans un instantané précédent.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
|
|
Lorsque vous restaurez une copie instantanée, la configuration de volume existante est écrasée. Les modifications apportées aux données du volume après la création de la copie instantanée sont perdues. |
Restauration de volume sur place à partir d'un instantané
Trident permet une restauration volumétrique rapide et in situ à partir d'une image instantanée grâce à TridentActionSnapshotRestore (TASR) CR. Cette demande de modification (CR) fonctionne comme une action impérative Kubernetes et ne persiste pas une fois l'opération terminée.
Trident prend en charge la restauration des instantanés sur le ontap-san , ontap-san-economy , ontap-nas , ontap-nas-flexgroup , azure-netapp-files , gcp-cvs , google-cloud-netapp-volumes , et solidfire-san conducteurs.
Vous devez disposer d'un PVC relié et d'un instantané du volume disponible.
-
Vérifiez que le statut du PVC est lié.
kubectl get pvc -
Vérifiez que l'instantané du volume est prêt à être utilisé.
kubectl get vs
-
Créer le TASR CR. Cet exemple crée un CR pour PVC
pvc1et instantané de volumepvc1-snapshot.Le TASR CR doit se trouver dans un espace de noms où existent le PVC et le VS. cat tasr-pvc1-snapshot.yamlapiVersion: trident.netapp.io/v1 kind: TridentActionSnapshotRestore metadata: name: trident-snap namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot -
Appliquez la demande de restauration (CR) pour restaurer à partir de l'instantané. Cet exemple effectue une restauration à partir d'un instantané.
pvc1.kubectl create -f tasr-pvc1-snapshot.yamltridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Trident restaure les données à partir de l'instantané. Vous pouvez vérifier l'état de la restauration de l'instantané :
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: ""
|
|
|
Supprimer un PV avec ses instantanés associés
Lors de la suppression d'un volume persistant avec des instantanés associés, le volume Trident correspondant est mis à jour à l'état « Suppression en cours ». Supprimez les instantanés de volume pour supprimer le volume Trident .
Déployer un contrôleur d'instantané de volume
Si votre distribution Kubernetes n'inclut pas le contrôleur de snapshots et les CRD, vous pouvez les déployer comme suit.
-
Créer des CRD d'instantané de 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 -
Créez le contrôleur d'instantané.
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.yamlSi nécessaire, ouvrez deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamlet mise à journamespaceà votre espace de noms.