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

À partir de la version 20.01 d’Astra Trident, vous pouvez créer des snapshots de volumes persistants à la couche Kubernetes. Vous pouvez utiliser ces snapshots pour conserver des copies instantanées de volumes créés par Astra Trident et planifier la création de volumes supplémentaires (clones). Le snapshot de volume est pris en charge par ontap-nas, ontap-san, ontap-san-economy, solidfire-san, gcp-cvs, et azure-netapp-files pilotes.

Remarque Cette fonctionnalité est disponible à partir de Kubernetes 1.17 (version bêta) et est disponible dans la version 1.20. Pour comprendre les changements impliqués dans le passage de la version bêta à GA, voir "le blog de release". Avec la graduation à GA, le v1 La version d’API est introduite et rétrocompatible avec v1beta1 snapshots.
Ce dont vous avez besoin
  • La création de snapshots de volumes nécessite la création d’un contrôleur d’instantanés externe et de définitions de ressources personnalisées (CRD). Il en va de la responsabilité de l’orchestrateur Kubernetes utilisé (par exemple : Kubeadm, GKE, OpenShift).

Si votre distribution Kubernetes n’inclut pas le contrôleur de snapshot et les CRD, vous pouvez les déployer comme suit.

  1. Création de CRD de snapshot de volume.

    Pour Kubernetes 1.20 et versions ultérieures, utilisez les CRD v1 snapshot avec les composants de snapshot de v5.0 ou supérieurs. Pour Kubernetes 1.19, utilisez v1beta1 avec les composants de snapshot v3.0.3.

    composants de v5.0
    cat snapshot-setup.sh
    #!/bin/bash
    # Create volume snapshot CRDs
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
    composants v3.0.3
    cat snapshot-setup.sh
    #!/bin/bash
    # Create volume snapshot CRDs
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
  2. Créer le contrôleur snapshot dans l’espace de noms souhaité. Modifiez les manifestes YAML ci-dessous pour modifier l’espace de noms.

    Pour Kubernetes 1.20 et versions ultérieures, utilisez v5.0 ou une version ultérieure. Pour Kubernetes version 1.19, utilisez la v3.0.3

    Remarque Ne créez pas de contrôleur de snapshot si vous configurez des snapshots de volume à la demande dans un environnement GKE. GKE utilise un snapshot-contrôleur intégré et masqué.
    contrôleur v5.0
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
    contrôleur v3.0.3
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
Astuce CSI Snapshotter fournit un "validation du crochet" pour aider les utilisateurs à valider les snapshots v1beta1 existants et à confirmer qu’ils sont des objets de ressource valides. Le crochet Web de validation étiquette automatiquement les objets de snapshot non valides et empêche la création d’objets futurs non valides. Le hook validant est déployé par Kubernetes orchestrator. Voir les instructions de déploiement manuel du crochet de validation "ici". Rechercher des exemples de manifestes d’instantanés non valides "ici".

L’exemple détaillé ci-dessous décrit les constructions requises pour travailler avec des snapshots et montre comment créer et utiliser des snapshots.

Étape 1 : configurer un VolumeSnapshotClass

Avant de créer un snapshot de volume, configurez un lien :../trident-Reference/objects.html[VolumeSnapshotClass^].

cat snap-sc.yaml
#Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.19, use apiVersion v1beta1.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: csi-snapclass
driver: csi.trident.netapp.io
deletionPolicy: Delete

Le driver Indique le conducteur CSI d’Astra Trident. 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é.

Étape 2 : création d’un snapshot d’un volume persistant existant

cat snap.yaml
#Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.19, use apiVersion v1beta1.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: pvc1-snap
spec:
  volumeSnapshotClassName: csi-snapclass
  source:
    persistentVolumeClaimName: pvc1

La copie Snapshot est en cours de création pour une demande de volume persistant nommée pvc1, et le nom du snapshot est défini sur pvc1-snap.

kubectl create -f snap.yaml
volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created

kubectl get volumesnapshots
NAME                   AGE
pvc1-snap              50s

Cela a créé un VolumeSnapshot objet. Un instantané VolumeSnapshot est similaire à une demande de volume persistant et est associé à une VolumeSnapshotContent objet qui représente le snapshot réel.

Il est possible d’identifier le VolumeSnapshotContent objet pour le pvc1-snap VolumeSnapshot en le décrivant.

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

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.

Étape 3 : création de demandes de volume persistant à partir de copies Snapshot VolumeCas

Pour cela, reportez-vous à l’exemple suivant de création d’une demande de volume persistant à l’aide d’un snapshot :

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

dataSource La montre que la demande de volume persistant doit être créée à l’aide d’un Snapshot VolumeSnapshot nommé pvc1-snap comme source des données. Cela demande à Astra Trident de créer un volume persistant à partir du snapshot. 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.

Remarque 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 ». Pour supprimer le volume Astra Trident, il est nécessaire de supprimer les snapshots du volume.

Trouvez plus d’informations