Rechercher

5.4. Instantanés de volumes CSI

download PDF

Ce document décrit comment utiliser les instantanés de volume avec les pilotes CSI (Container Storage Interface) pris en charge pour aider à protéger contre la perte de données dans OpenShift Container Platform. Il est conseillé de se familiariser avec les volumes persistants.

5.4.1. Vue d'ensemble des instantanés de volume CSI

Un site snapshot représente l'état d'un volume de stockage dans un cluster à un moment donné. Les instantanés de volume peuvent être utilisés pour approvisionner un nouveau volume.

OpenShift Container Platform prend en charge par défaut les instantanés de volume de l'interface de stockage des conteneurs (CSI). Cependant, un pilote CSI spécifique est nécessaire.

Avec les instantanés de volume CSI, un administrateur de cluster peut :

  • Déployer un pilote CSI tiers qui prend en charge les instantanés.
  • Créer une nouvelle revendication de volume persistant (PVC) à partir d'un instantané de volume existant.
  • Prendre un instantané d'un PVC existant.
  • Restaurer un instantané en tant que PVC différent.
  • Supprimer un instantané de volume existant.

Avec les instantanés de volume CSI, un développeur d'application peut :

  • Utilisez les instantanés de volume comme éléments de base pour développer des solutions de sauvegarde de stockage au niveau de l'application ou de la grappe.
  • Revenir rapidement à une version de développement antérieure.
  • Utiliser le stockage plus efficacement en évitant de faire une copie complète à chaque fois.

Les points suivants doivent être pris en compte lors de l'utilisation d'instantanés de volume :

  • La prise en charge n'est disponible que pour les pilotes CSI. In-tree et FlexVolumes ne sont pas pris en charge.
  • OpenShift Container Platform n'est livré qu'avec certains pilotes CSI. Pour les pilotes CSI qui ne sont pas fournis par un opérateur de pilote OpenShift Container Platform, il est recommandé d'utiliser les pilotes CSI fournis par la communauté ou les fournisseurs de stockage. Suivez les instructions d'installation fournies par le fournisseur de pilotes CSI.
  • Les pilotes CSI peuvent ou non avoir implémenté la fonctionnalité d'instantané de volume. Les pilotes CSI qui prennent en charge les instantanés de volume utiliseront probablement le sidecar csi-external-snapshotter. Voir la documentation fournie par le pilote CSI pour plus de détails.

5.4.2. Contrôleur d'instantanés CSI et sidecar

OpenShift Container Platform fournit un contrôleur d'instantané qui est déployé dans le plan de contrôle. En outre, votre fournisseur de pilote CSI fournit le sidecar d'instantané CSI sous la forme d'un conteneur d'aide qui est installé lors de l'installation du pilote CSI.

Le contrôleur d'instantanés CSI et le sidecar fournissent des instantanés de volume par le biais de l'API OpenShift Container Platform. Ces composants externes s'exécutent dans le cluster.

Le contrôleur externe est déployé par le CSI Snapshot Controller Operator.

5.4.2.1. Contrôleur externe

Le contrôleur d'instantanés CSI lie les objets VolumeSnapshot et VolumeSnapshotContent. Le contrôleur gère le provisionnement dynamique en créant et en supprimant les objets VolumeSnapshotContent.

5.4.2.2. Sidecar externe

Le fournisseur de votre pilote CSI fournit le sidecar csi-external-snapshotter. Il s'agit d'un conteneur d'aide distinct qui est déployé avec le pilote CSI. Le sidecar gère les instantanés en déclenchant les opérations CreateSnapshot et DeleteSnapshot. Suivez les instructions d'installation fournies par votre fournisseur.

5.4.3. À propos de l'opérateur du contrôleur CSI Snapshot

Le CSI Snapshot Controller Operator s'exécute dans l'espace de noms openshift-cluster-storage-operator. Il est installé par défaut par l'opérateur de version de cluster (CVO) dans tous les clusters.

L'opérateur du contrôleur d'instantanés CSI installe le contrôleur d'instantanés CSI, qui s'exécute dans l'espace de noms openshift-cluster-storage-operator.

5.4.3.1. Instantané de volume CRDs

Lors de l'installation d'OpenShift Container Platform, l'opérateur du contrôleur d'instantanés CSI crée les définitions de ressources personnalisées (CRD) d'instantanés suivantes dans le groupe API snapshot.storage.k8s.io/v1:

VolumeSnapshotContent

Un instantané pris d'un volume dans le cluster qui a été provisionné par un administrateur de cluster.

Comme l'objet PersistentVolume, le CRD VolumeSnapshotContent est une ressource de cluster qui pointe vers un instantané réel dans le back-end de stockage.

Pour les instantanés préprovisionnés manuellement, un administrateur de cluster crée un certain nombre de CRD VolumeSnapshotContent. Ceux-ci contiennent les détails de l'instantané du volume réel dans le système de stockage.

Le CRD VolumeSnapshotContent n'est pas un espace de noms et doit être utilisé par un administrateur de cluster.

VolumeSnapshot

Comme l'objet PersistentVolumeClaim, le CRD VolumeSnapshot définit une demande d'instantané de la part du développeur. L'opérateur du contrôleur d'instantanés CSI exécute le contrôleur d'instantanés CSI, qui gère la liaison d'un CRD VolumeSnapshot avec un CRD VolumeSnapshotContent approprié. La liaison est une correspondance biunivoque.

Le CRD VolumeSnapshot est un espace de noms. Un développeur utilise le CRD comme une demande distincte pour un instantané.

VolumeSnapshotClass

Permet à un administrateur de cluster de spécifier différents attributs appartenant à un objet VolumeSnapshot. Ces attributs peuvent différer entre les instantanés pris du même volume sur le système de stockage, auquel cas ils ne seraient pas exprimés par l'utilisation de la même classe de stockage d'une revendication de volume persistant.

Le CRD VolumeSnapshotClass définit les paramètres que le sidecar csi-external-snapshotter doit utiliser lors de la création d'un instantané. Cela permet au back-end de stockage de savoir quel type d'instantané créer dynamiquement si plusieurs options sont prises en charge.

Les snapshots provisionnés dynamiquement utilisent le CRD VolumeSnapshotClass pour spécifier les paramètres spécifiques au fournisseur de stockage à utiliser lors de la création d'un snapshot.

Le CRD VolumeSnapshotContentClass n'a pas d'espace nominatif et est utilisé par un administrateur de cluster pour activer des options de configuration globales pour leur back-end de stockage.

5.4.4. Provisionnement d'instantanés de volumes

Il y a deux façons d'approvisionner les instantanés : dynamiquement et manuellement.

5.4.4.1. Provisionnement dynamique

Au lieu d'utiliser un instantané préexistant, vous pouvez demander qu'un instantané soit pris dynamiquement à partir d'une demande de volume persistant. Les paramètres sont spécifiés à l'aide d'un CRD VolumeSnapshotClass.

5.4.4.2. Approvisionnement manuel

En tant qu'administrateur de grappe, vous pouvez préapprovisionner manuellement un certain nombre d'objets VolumeSnapshotContent. Ces objets contiennent les détails de l'instantané du volume réel mis à la disposition des utilisateurs de la grappe.

5.4.5. Création d'un instantané de volume

Lorsque vous créez un objet VolumeSnapshot, OpenShift Container Platform crée un instantané de volume.

Conditions préalables

  • Connecté à un cluster OpenShift Container Platform en cours d'exécution.
  • Un PVC créé à l'aide d'un pilote CSI qui prend en charge les objets VolumeSnapshot.
  • Une classe de stockage pour provisionner le back-end de stockage.
  • Aucun pod n'utilise la revendication de volume persistant (PVC) dont vous souhaitez prendre un instantané.

    Note

    Ne créez pas d'instantané de volume d'un PVC si un pod l'utilise. Cela pourrait entraîner une corruption des données car le PVC n'est pas mis en pause (quiesced). Veillez à arrêter d'abord un module en cours d'exécution pour garantir la cohérence des instantanés.

Procédure

Pour créer dynamiquement un instantané de volume :

  1. Créer un fichier avec l'objet VolumeSnapshotClass décrit par le YAML suivant :

    volumesnapshotclass.yaml

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: csi-hostpath-snap
    driver: hostpath.csi.k8s.io 1
    deletionPolicy: Delete

    1
    Le nom du pilote CSI utilisé pour créer des instantanés de cet objet VolumeSnapshotClass. Ce nom doit être identique au champ Provisioner de la classe de stockage responsable du PVC qui fait l'objet d'un instantané.
    Note

    Selon le pilote que vous avez utilisé pour configurer le stockage persistant, des paramètres supplémentaires peuvent être nécessaires. Vous pouvez également utiliser un objet VolumeSnapshotClass existant.

  2. Créez l'objet que vous avez sauvegardé à l'étape précédente en entrant la commande suivante :

    $ oc create -f volumesnapshotclass.yaml
  3. Créer un objet VolumeSnapshot:

    volumesnapshot-dynamic.yaml

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: mysnap
    spec:
      volumeSnapshotClassName: csi-hostpath-snap 1
      source:
        persistentVolumeClaimName: myclaim 2

    1
    La demande d'une classe particulière par l'instantané de volume. Si le paramètre volumeSnapshotClassName est absent et qu'il existe une classe d'instantané de volume par défaut, un instantané est créé avec le nom de la classe d'instantané de volume par défaut. Mais si le champ est absent et qu'il n'existe pas de classe d'instantané de volume par défaut, aucun instantané n'est créé.
    2
    Le nom de l'objet PersistentVolumeClaim lié à un volume persistant. Il définit ce dont vous voulez créer un instantané. Requis pour le provisionnement dynamique d'un instantané.
  4. Créez l'objet que vous avez sauvegardé à l'étape précédente en entrant la commande suivante :

    $ oc create -f volumesnapshot-dynamic.yaml

Pour approvisionner manuellement un instantané :

  1. Fournissez une valeur pour le paramètre volumeSnapshotContentName en tant que source de l'instantané, en plus de définir la classe d'instantané de volume comme indiqué ci-dessus.

    volumesnapshot-manual.yaml

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: snapshot-demo
    spec:
      source:
        volumeSnapshotContentName: mycontent 1

    1
    Le paramètre volumeSnapshotContentName est requis pour les instantanés préprovisionnés.
  2. Créez l'objet que vous avez sauvegardé à l'étape précédente en entrant la commande suivante :

    $ oc create -f volumesnapshot-manual.yaml

Vérification

Une fois que l'instantané a été créé dans le cluster, des détails supplémentaires sur l'instantané sont disponibles.

  1. Pour afficher les détails de l'instantané de volume qui a été créé, entrez la commande suivante :

    $ oc describe volumesnapshot mysnap

    L'exemple suivant affiche les détails de l'instantané du volume mysnap:

    volumesnapshot.yaml

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: mysnap
    spec:
      source:
        persistentVolumeClaimName: myclaim
      volumeSnapshotClassName: csi-hostpath-snap
    status:
      boundVolumeSnapshotContentName: snapcontent-1af4989e-a365-4286-96f8-d5dcd65d78d6 1
      creationTime: "2020-01-29T12:24:30Z" 2
      readyToUse: true 3
      restoreSize: 500Mi

    1
    Le pointeur sur le contenu de stockage réel qui a été créé par le contrôleur.
    2
    L'heure à laquelle l'instantané a été créé. L'instantané contient le contenu du volume qui était disponible à l'heure indiquée.
    3
    Si la valeur est définie sur true, l'instantané peut être utilisé pour restaurer un nouveau PVC.
    Si la valeur est définie sur false, l'instantané a été créé. Toutefois, le back-end de stockage doit effectuer des tâches supplémentaires pour rendre l'instantané utilisable afin qu'il puisse être restauré en tant que nouveau volume. Par exemple, les données de l'Amazon Elastic Block Store peuvent être déplacées vers un autre emplacement moins coûteux, ce qui peut prendre plusieurs minutes.
  2. Pour vérifier que l'instantané de volume a été créé, entrez la commande suivante :

    $ oc get volumesnapshotcontent

    Le pointeur vers le contenu réel est affiché. Si le champ boundVolumeSnapshotContentName est rempli, un objet VolumeSnapshotContent existe et l'instantané a été créé.

  3. Pour vérifier que l'instantané est prêt, confirmez que l'objet VolumeSnapshot est readyToUse: true.

5.4.6. Suppression d'un instantané de volume

Vous pouvez configurer la façon dont OpenShift Container Platform supprime les instantanés de volume.

Procédure

  1. Spécifiez la politique de suppression dont vous avez besoin dans l'objet VolumeSnapshotClass, comme indiqué dans l'exemple suivant :

    volumesnapshotclass.yaml

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: csi-hostpath-snap
    driver: hostpath.csi.k8s.io
    deletionPolicy: Delete 1

    1
    Lors de la suppression de l'instantané de volume, si la valeur Delete est définie, l'instantané sous-jacent est supprimé en même temps que l'objet VolumeSnapshotContent. Si la valeur Retain est définie, l'instantané sous-jacent et l'objet VolumeSnapshotContent sont conservés.
    Si la valeur Retain est définie et que l'objet VolumeSnapshot est supprimé sans supprimer l'objet VolumeSnapshotContent correspondant, le contenu est conservé. L'instantané lui-même est également conservé dans le back-end de stockage.
  2. Supprimez l'instantané du volume en entrant la commande suivante :

    oc delete volumesnapshot <volumesnapshot_name>

    Exemple de sortie

    volumesnapshot.snapshot.storage.k8s.io "mysnapshot" deleted

  3. Si la politique de suppression est définie sur Retain, supprimez le contenu de l'instantané du volume en entrant la commande suivante :

    oc delete volumesnapshotcontent <volumesnapshotcontent_name> $ oc delete volumesnapshotcontent <volumesnapshotcontent_name>
  4. Facultatif : si l'objet VolumeSnapshot n'est pas supprimé avec succès, entrez la commande suivante pour supprimer tous les finaliseurs de la ressource restante afin que l'opération de suppression puisse se poursuivre :

    Important

    Ne supprimez les finaliseurs que si vous êtes certain qu'il n'existe aucune référence existante à l'objet VolumeSnapshot, que ce soit à partir de réclamations de volume persistantes ou de contenus d'instantanés de volume. Même avec l'option --force, l'opération de suppression ne supprime pas les objets instantanés tant que tous les finaliseurs n'ont pas été supprimés.

    $ oc patch -n $PROJECT volumesnapshot/$NAME --type=merge -p '{"metadata": {"finalizers":null}}'

    Exemple de sortie

    volumesnapshotclass.snapshot.storage.k8s.io "csi-ocs-rbd-snapclass" deleted

    Les finaliseurs sont supprimés et l'instantané du volume est supprimé.

5.4.7. Restauration d'un instantané de volume

Le contenu du CRD VolumeSnapshot peut être utilisé pour restaurer le volume existant dans un état antérieur.

After your VolumeSnapshot CRD is bound and the readyToUse value is set to true, you can use that resource to provision a new volume that is pre-populated with data from the snapshot. .Prerequisites * Logged in to a running OpenShift Container Platform cluster. * A persistent volume claim (PVC) created using a Container Storage Interface (CSI) driver that supports volume snapshots. * A storage class to provision the storage back end. * A volume snapshot has been created and is ready to use.

Procédure

  1. Spécifiez une source de données VolumeSnapshot sur un PVC comme indiqué ci-dessous :

    pvc-restore.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: myclaim-restore
    spec:
      storageClassName: csi-hostpath-sc
      dataSource:
        name: mysnap 1
        kind: VolumeSnapshot 2
        apiGroup: snapshot.storage.k8s.io 3
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi

    1
    Nom de l'objet VolumeSnapshot représentant l'instantané à utiliser comme source.
    2
    Doit être réglé sur la valeur VolumeSnapshot.
    3
    Doit être réglé sur la valeur snapshot.storage.k8s.io.
  2. Créez un PVC en entrant la commande suivante :

    $ oc create -f pvc-restore.yaml
  3. Vérifiez que le PVC restauré a été créé en entrant la commande suivante :

    $ oc get pvc

    Un nouveau PVC tel que myclaim-restore s'affiche.

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.