Skip to main content
La version française est une traduction automatique. La version anglaise prévaut sur la française en cas de divergence.

Travailler avec des instantanés

Contributeurs

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.

Avant de commencer

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.

Remarque 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

Étapes
  1. Créer un VolumeSnapshotClass. Pour plus d'informations, reportez-vous à la section "VolumeSnapshotClass".

    • Le driver Pointe vers le pilote Astra Trident CSI.

    • deletionPolicy peut être Delete ou Retain. Lorsqu'il est réglé sur Retain, le snapshot physique sous-jacent sur le cluster de stockage est conservé même lorsque VolumeSnapshot l'objet a été 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 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 sur pvc1-snap. Un instantané VolumeSnapshot est similaire à une demande de volume persistant et est associé à une VolumeSnapshotContent 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 le pvc1-snap VolumeSnapshot en le décrivant. Le Snapshot Content Name Identifie l'objet VolumeSnapshotContent qui sert ce snapshot. Le Ready 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.

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

ASTRA Trident prend en charge le "Processus Snapshot préprovisionné Kubernetes" pour permettre à l'administrateur du cluster de créer un VolumeSnapshotContent Objet et importation de snapshots créés en dehors d'Astra Trident.

Avant de commencer

ASTRA Trident doit avoir créé ou importé le volume parent du snapshot.

Étapes
  1. Cluster admin: Créer 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 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 des seules informations fournies à Astra Trident par le Snapshot externe du ListSnapshots appel.

      Remarque Le <volumeSnapshotContentName> Impossible de toujours faire correspondre le nom du snapshot back-end en raison des contraintes de dénomination CR.
      Exemple

      L'exemple suivant crée un VolumeSnapshotContent objet qui fait référence au snapshot back-end 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>
  2. Cluster admin: Créez le VolumeSnapshot CR qui fait référence au VolumeSnapshotContent objet. Cette opération demande l'accès à VolumeSnapshot dans un espace de noms donné.

    Exemple

    L'exemple suivant crée un VolumeSnapshot CR nommée import-snap qui fait référence au 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 snapshotter externe reconnaît le nouveau créé VolumeSnapshotContent et exécute le ListSnapshots appel. ASTRA Trident crée le TridentSnapshot.

    • Le snapshotter externe définit le VolumeSnapshotContent à readyToUse et le VolumeSnapshot à true.

    • Retour Trident readyToUse=true.

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

    Exemple

    L'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
Remarque 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.

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