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 une copie Snapshot d'un volume créé à l'aide d'Astra Trident, importer un snapshot créé hors d'Astra Trident, créer un nouveau volume à partir d'un snapshot existant et restaurer les 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éez un
VolumeSnapshotClass
. pour plus d'informations, reportez-vous à "VolumeSnapshotClass"la section .-
Le indique le
driver
conducteur de l'Astra Trident CSI. -
deletionPolicy
peut êtreDelete
ouRetain
. Lorsqu'il est défini surRetain
, le snapshot physique sous-jacent du cluster de stockage est conservé même lorsque l' `VolumeSnapshot`objet est 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 de l'instantané est défini surpvc1-snap
. Un VolumeSnapshot est similaire à une demande de volume persistant et est associé à unVolumeSnapshotContent
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
VolumeSnapshotContent
l'objet dupvc1-snap
VolumeSnapshot en le décrivant. Le systèmeSnapshot 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>
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 "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 en utilisant 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
ASTRA Trident prend en charge "Processus Snapshot préprovisionné Kubernetes"pour permettre à l'administrateur du cluster de créer un VolumeSnapshotContent
objet et d'importer des snapshots créés en dehors d'Astra Trident.
ASTRA 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. Cela lance le workflow de snapshot dans Astra 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 à Astra Trident par le snapshotter externe dans l' `ListSnapshots`appel.Le système <volumeSnapshotContentName>
ne peut pas toujours correspondre au nom du snapshot back-end en raison des contraintes de dénomination CR.ExempleL'exemple suivant crée un
VolumeSnapshotContent
objet qui référence le 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 la
VolumeSnapshot
CR qui fait référence à l'VolumeSnapshotContent`objet. Cette opération demande l'accès à pour utiliser `VolumeSnapshot
dans un espace de noms donné.ExempleL'exemple suivant crée une
VolumeSnapshot
demande de modification nommée qui fait référence à l'VolumeSnapshotContent
nomméeimport-snap
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. ASTRA Trident crée le `TridentSnapshot
.-
Le snapshotter externe définit le
VolumeSnapshotContent
surreadyToUse
et leVolumeSnapshot
surtrue
. -
Trident renvoie
readyToUse=true
.
-
-
Tout utilisateur : Créez un
PersistentVolumeClaim
pour référencer le nouveauVolumeSnapshot
, où lespec.dataSource
nom (ouspec.dataSourceRef
) est leVolumeSnapshot
nom.ExempleL'exemple suivant crée un PVC faisant référence au
VolumeSnapshot
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 des ontap-nas
pilotes et ontap-nas-economy
. Activez le .snapshot
répertoire pour 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 Astra 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, ouvrez deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
et mettez à journamespace
votre espace de noms.