5.4. Instantanés de volumes CSI
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 CRDVolumeSnapshotContent
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 CRDVolumeSnapshot
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 CRDVolumeSnapshot
avec un CRDVolumeSnapshotContent
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 sidecarcsi-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é.
NoteNe 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 :
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 champProvisioner
de la classe de stockage responsable du PVC qui fait l'objet d'un instantané.
NoteSelon 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.Créez l'objet que vous avez sauvegardé à l'étape précédente en entrant la commande suivante :
$ oc create -f volumesnapshotclass.yaml
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é.
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é :
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.
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.
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 surfalse
, 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.
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 objetVolumeSnapshotContent
existe et l'instantané a été créé.-
Pour vérifier que l'instantané est prêt, confirmez que l'objet
VolumeSnapshot
estreadyToUse: 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
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'objetVolumeSnapshotContent
. Si la valeurRetain
est définie, l'instantané sous-jacent et l'objetVolumeSnapshotContent
sont conservés.
Si la valeurRetain
est définie et que l'objetVolumeSnapshot
est supprimé sans supprimer l'objetVolumeSnapshotContent
correspondant, le contenu est conservé. L'instantané lui-même est également conservé dans le back-end de stockage.
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
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>
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 :ImportantNe 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
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
Créez un PVC en entrant la commande suivante :
$ oc create -f pvc-restore.yaml
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.