Travailler avec des instantanés
Les copies Snapshot de volume Kubernetes de volumes persistants (PVS) permettent d'effectuer des copies instantanées de volumes. Vous pouvez créer un snapshot d'un volume créé à l'aide de Trident, importer un snapshot créé en dehors de Trident, créer un volume à partir d'un snapshot existant et restaurer des données de volume à partir de snapshots.
Présentation
Le snapshot de volume est pris en charge par ontap-nas
, ontap-nas-flexgroup
, ontap-san
, ontap-san-economy
, solidfire-san
, gcp-cvs
, et azure-netapp-files
pilotes.
Vous devez disposer d'un contrôleur de snapshot externe et de définitions de ressources personnalisées (CRD) pour pouvoir utiliser les snapshots. Cela relève de la responsabilité de l'orchestrateur Kubernetes (par exemple : Kubeadm, GKE, OpenShift).
Si votre distribution Kubernetes n'inclut pas le contrôleur de snapshot et les CRD, reportez-vous à la Déployer un contrôleur de snapshot 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 snapshot caché intégré. |
Créer un snapshot de volume
-
Créer un
VolumeSnapshotClass
. Pour plus d'informations, reportez-vous à la section "VolumeSnapshotClass".-
Le
driver
signale au conducteur Trident CSI. -
deletionPolicy
peut êtreDelete
ouRetain
. Lorsqu'il est réglé surRetain
, le snapshot physique sous-jacent sur le cluster de stockage est conservé même lorsqueVolumeSnapshot
l'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 snapshot d'une demande de volume persistant existante.
Exemples-
Dans cet exemple, nous allons créer un snapshot d'un volume persistant 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 de snapshot de volume pour une demande de volume persistant nommée
pvc1
et le nom du snapshot est défini surpvc1-snap
. Un instantané VolumeSnapshot est similaire à une demande de volume persistant et est associé à uneVolumeSnapshotContent
objet qui représente le snapshot 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
VolumeSnapshotContent
objet pour lepvc1-snap
VolumeSnapshot en le décrivant. LeSnapshot Content Name
Identifie l'objet VolumeSnapshotContent qui sert ce snapshot. LeReady To Use
Paramètre indique que l'instantané peut être utilisé pour créer une nouvelle demande de volume persistant.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 une demande de volume persistant à partir d'un snapshot de volume
Vous pouvez utiliser dataSource
Pour créer une demande de volume persistant à l'aide d'un VolumeSnapshot nommé <pvc-name>
comme source des données. Une fois la demande de volume persistant créée, elle peut être connectée à un pod et utilisée comme n'importe quel autre PVC.
La demande de volume sera créée dans le même back-end que le volume source. Reportez-vous à la section "Base de connaissances : la création d'une demande de volume persistant à partir d'un Snapshot de volume persistant Trident ne peut pas être créée dans un autre back-end". |
L'exemple suivant crée la demande de volume persistant à 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 prend en charge la "Processus Snapshot préprovisionné Kubernetes"permettant à l'administrateur du cluster de créer un VolumeSnapshotContent
objet et d'importer des snapshots créés en dehors de Trident.
Trident doit avoir créé ou importé le volume parent du snapshot.
-
Cluster admin: Créez un
VolumeSnapshotContent
objet qui fait référence au snapshot back-end. Ceci lance le flux de travail de snapshot dans Trident.-
Spécifiez le nom du snapshot back-end dans
annotations
commetrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">
. -
Spécifiez
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>
danssnapshotHandle
. il s'agit de la seule information fournie à Trident par le snapshotter externe dans l' `ListSnapshots`appel.Le <volumeSnapshotContentName>
Impossible de toujours faire correspondre le nom du snapshot back-end en raison des contraintes de dénomination CR.ExempleL'exemple suivant crée un
VolumeSnapshotContent
objet qui fait référence au snapshot back-endsnap-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: Créez le
VolumeSnapshot
CR qui fait référence auVolumeSnapshotContent
objet. Cette opération demande l'accès àVolumeSnapshot
dans un espace de noms donné.ExempleL'exemple suivant crée un
VolumeSnapshot
CR nomméeimport-snap
qui fait référence auVolumeSnapshotContent
nommé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 snapshotter externe reconnaît le nouveau créé
VolumeSnapshotContent
et exécute l'ListSnapshots`appel. Trident crée le `TridentSnapshot
.-
Le snapshotter externe définit le
VolumeSnapshotContent
àreadyToUse
et leVolumeSnapshot
àtrue
. -
Retour Trident
readyToUse=true
.
-
-
Tout utilisateur : Créer un
PersistentVolumeClaim
pour référencer le nouveauVolumeSnapshot
, oùspec.dataSource
(ouspec.dataSourceRef
) nom est leVolumeSnapshot
nom.ExempleL'exemple suivant crée un PVC faisant référence à
VolumeSnapshot
nommé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
Restaurez les données de volume à l'aide de snapshots
Le répertoire des snapshots est masqué par défaut pour faciliter la compatibilité maximale des volumes provisionnés à l'aide de ontap-nas
et ontap-nas-economy
pilotes. Activez le .snapshot
répertoire permettant de restaurer directement les données à partir de snapshots.
Utilisez l'interface de ligne de commandes ONTAP de restauration de snapshot de volume pour restaurer un volume à un état enregistré dans un snapshot précédent.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
Lorsque vous restaurez une copie Snapshot, la configuration de volume existante est écrasée. Les modifications apportées aux données de volume après la création de la copie Snapshot sont perdues. |
Supprimez un volume persistant avec les snapshots associés
Lors de la suppression d'un volume persistant avec les snapshots associés, le volume Trident correspondant est mis à jour et passe à un état « Suppression ». Supprimez les snapshots de volume pour supprimer le volume Trident.
Déployer un contrôleur de snapshot de volume
Si votre distribution Kubernetes n'inclut pas le contrôleur de snapshot et les CRD, vous pouvez les déployer comme suit.
-
Création de CRD de snapshot 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éer le contrôleur de 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
Si nécessaire, ouvrir deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
et mettre à journamespace
à votre espace de noms.