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 netapp-aruldeepa

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.

Avant de commencer

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 .

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 snapshots intégré et caché.

Créer un instantané de volume

Étapes
  1. Créer un VolumeSnapshotClass Pour plus d'informations, veuillez consulter"Classe d'instantané de volume" .

    • Le driver indique le pilote Trident CSI.

    • deletionPolicy`peut être `Delete ou Retain . Lorsqu'il est réglé sur Retain , l'instantané physique sous-jacent sur le cluster de stockage est conservé même lorsque le 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 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é 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 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 VolumeSnapshotContent l'objet pour le pvc1-snap VolumeSnapshot en le décrivant. Le Snapshot Content Name identifie l'objet VolumeSnapshotContent qui sert de support à cet instantané. Le Ready To Use Ce 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.

Avertissement 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.

Avant de commencer

Trident doit avoir créé ou importé le volume parent de l'instantané.

Étapes
  1. Administrateur du cluster : Créer un VolumeSnapshotContent objet 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 annotations comme trident.netapp.io/internalSnapshotName: <"backend-snapshot-name"> .

    • Spécifier <name-of-parent-volume-in-trident>/<volume-snapshot-content-name> dans snapshotHandle Il s'agit de la seule information fournie à Trident par le dispositif de capture d'instantanés externe. ListSnapshots appel.

      Remarque 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.
      Exemple

      L'exemple suivant crée un VolumeSnapshotContent objet qui référence un 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 le VolumeSnapshot CR qui fait référence à la VolumeSnapshotContent objet. Cette demande d'accès à l'utilisation du VolumeSnapshot dans un espace de noms donné.

    Exemple

    L'exemple suivant crée un VolumeSnapshot CR nommé import-snap qui fait référence à 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 snapshot nouvellement créé VolumeSnapshotContent et dirige le ListSnapshots appel. Trident crée le TridentSnapshot .

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

    • Trident revient readyToUse=true .

  4. Tout utilisateur : Créez un PersistentVolumeClaim pour faire référence au nouveau VolumeSnapshot , où le spec.dataSource (ou spec.dataSourceRef ) le 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

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

Avant de commencer

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
Étapes
  1. Créer le TASR CR. Cet exemple crée un CR pour PVC pvc1 et instantané de volume pvc1-snapshot .

    Remarque Le TASR CR doit se trouver dans un espace de noms où existent le PVC et le VS.
    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 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.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 réessaiera pas automatiquement l'opération en cas d'échec. Vous devrez répéter l'opération.

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

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.

É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 d'instantané.

    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 mise à jour namespace à votre espace de noms.