Skip to main content
Une version plus récente de ce produit est disponible.
La version française est une traduction automatique. La version anglaise prévaut sur la française en cas de divergence.

Travailler avec des snapshots

Les snapshots de volumes persistants (PV) Kubernetes permettent de créer des copies à un instant précis des volumes. Vous pouvez créer un snapshot d'un volume créé avec Trident, importer un snapshot créé en dehors de Trident, créer un nouveau volume à partir d'un snapshot existant, et récupérer des données de volume à partir de snapshots.

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, azure-netapp-files et google-cloud-netapp-volumes pilotes.

Avant de commencer

Vous devez disposer d'un contrôleur de snapshots externe et de Custom Resource Definitions (CRDs) 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 à Déployer un contrôleur d'instantané de volume.

Remarque Ne créez pas de contrôleur de snapshots si vous créez des snapshots de volumes à la demande dans un environnement GKE. GKE utilise un contrôleur de snapshots intégré et masqué.

Créer un instantané de volume

Étapes
  1. Créez un VolumeSnapshotClass. Pour plus d'informations, consultez "VolumeSnapshotClass".

    • Le driver pointe vers le pilote Trident CSI.

    • deletionPolicy peut être Delete ou Retain. Lorsqu'il est défini sur Retain, l'instantané physique sous-jacent sur le cluster de stockage est conservé même lorsque l'objet VolumeSnapshot est supprimé.

      Exemple
      cat snap-sc.yaml
      apiVersion: snapshot.storage.k8s.io/v1
      kind: VolumeSnapshotClass
      metadata:
        name: csi-snapclass
      driver: csi.trident.netapp.io
      deletionPolicy: Delete
  2. 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 d'instantané de volume pour un PVC nommé pvc1 et le nom de l'instantané est défini sur pvc1-snap. Un VolumeSnapshot est analogue à un PVC et est associé à un VolumeSnapshotContent objet qui représente 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 l' VolumeSnapshotContent`objet pour le `pvc1-snap VolumeSnapshot en le décrivant. Le Snapshot Content Name identifie l'objet VolumeSnapshotContent qui sert cet instantané. Le Ready To Use 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 en utilisant un VolumeSnapshot nommé <pvc-name> comme source des données. Après la création du PVC, il peut être attaché à un pod et utilisé comme n'importe quel autre PVC.

L'exemple suivant crée le PVC 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

Trident prend en charge la "Processus de snapshot pré-provisionné Kubernetes" pour permettre à l'administrateur du cluster de créer un VolumeSnapshotContent objet et d'importer des instantanés créés en dehors de Trident.

Avant de commencer

Trident doit avoir créé ou importé le volume parent de la capture.

Étapes
  1. Administrateur du cluster : Créez un VolumeSnapshotContent objet qui référence l’instantané du backend. Cela lance le workflow d’instantané dans Trident.

    • Spécifiez le nom de l’instantané du backend dans annotations comme trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">.

    • Spécifiez <name-of-parent-volume-in-trident>/<volume-snapshot-content-name> dans snapshotHandle. Il s'agit de la seule information fournie à Trident par le générateur de snapshots externe dans l'appel ListSnapshots.

      Remarque Le <volumeSnapshotContentName> ne peut pas toujours correspondre au nom de l’instantané du backend en raison des contraintes de dénomination des CR.
      Exemple

      L'exemple suivant crée un VolumeSnapshotContent objet qui référence l'instantané du backend snap-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
  2. Administrateur du cluster : Créez la VolumeSnapshot CR qui référence l' `VolumeSnapshotContent`objet. Cela demande l’autorisation d’utiliser l' `VolumeSnapshot`dans un espace de noms donné.

    Exemple

    L'exemple suivant crée un VolumeSnapshot CR nommé import-snap qui référence le VolumeSnapshotContent 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
  3. Traitement interne (aucune action requise) : Le gestionnaire de snapshots externe reconnaît le nouvellement créé VolumeSnapshotContent et exécute l'appel ListSnapshots. Trident crée le TridentSnapshot.

    • Le dispositif de capture d'écran externe définit le VolumeSnapshotContent sur readyToUse et le VolumeSnapshot sur true.

    • Trident retourne readyToUse=true.

  4. Tout utilisateur : Créez un PersistentVolumeClaim pour référencer le nouveau VolumeSnapshot, où le spec.dataSource (ou spec.dataSourceRef) nom est le VolumeSnapshot nom.

    Exemple

    L'exemple suivant crée un PVC faisant référence au 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

Récupérer les données du volume à l'aide de snapshots

Le répertoire des instantanés est masqué par défaut afin d'assurer une compatibilité maximale des volumes provisionnés à l'aide des ontap-nas et ontap-nas-economy pilotes. Activez le répertoire .snapshot pour récupérer directement les données à partir des instantanés.

Utilisez la commande ONTAP volume 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
Remarque Lorsque vous restaurez une copie instantanée, la configuration du volume existant 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 sur place du volume à partir d'un instantané

Trident permet une restauration rapide et directe des volumes à partir d'un instantané grâce à la TridentActionSnapshotRestore (TASR) CR. Cette CR fonctionne comme une action Kubernetes impérative et n'est pas conservée après la fin de l'opération.

Trident prend en charge la restauration d'instantanés sur les ontap-san, ontap-san-economy, ontap-nas, ontap-nas-flexgroup, azure-netapp-files, google-cloud-netapp-volumes et solidfire-san pilotes.

Avant de commencer

Vous devez disposer d'une PVC reliée et d'un instantané de volume disponible.

  • Vérifiez que le statut du PVC est bound.

    kubectl get pvc
  • Vérifiez que l'instantané du volume est prêt à être utilisé.

    kubectl get vs
Étapes
  1. Créez la TASR CR. Cet exemple crée une CR pour PVC pvc1 et volume snapshot pvc1-snapshot.

    Remarque Le TASR CR doit se trouver dans un espace de noms où le PVC et le VS existent.
    cat tasr-pvc1-snapshot.yaml
    apiVersion: trident.netapp.io/v1
    kind: TridentActionSnapshotRestore
    metadata:
      name: trident-snap
      namespace: trident
    spec:
      pvcName: pvc1
      volumeSnapshotName: pvc1-snapshot
  2. Appliquez la CR pour restaurer à partir de l'instantané. Cet exemple restaure à partir de l'instantané pvc1.

    kubectl create -f tasr-pvc1-snapshot.yaml
    tridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Résultats

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: ""
Remarque
  • Dans la plupart des cas, Trident ne relancera pas automatiquement l'opération en cas d'échec. Vous devrez effectuer l'opération à nouveau.

  • Les utilisateurs de Kubernetes ne disposant pas d'un accès administrateur peuvent devoir obtenir l'autorisation de l'administrateur pour créer un TASR CR dans l'espace de noms de leur application.

Supprimez un PV avec les instantanés associés

Lors de la suppression d'un volume persistant avec des snapshots associés, le volume Trident correspondant passe à l'état « Suppression en cours ». Supprimez les snapshots du volume pour supprimer le volume Trident.

Déployer un contrôleur d'instantané de volume

Si votre distribution Kubernetes n'inclut pas le snapshot controller et les CRDs, vous pouvez les déployer comme suit.

Étapes
  1. 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
  2. Créez 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
    Remarque Si nécessaire, ouvrez deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml et mettez à jour namespace pour votre espace de noms.