Ce document explique comment créer un instantané de volume, puis l'utiliser pour le restaurer. Les instructions fournies ici s'appliquent aux clusters qui utilisent le pilote CSI vCenter.
Avant de commencer
Consultez la section Utiliser le pilote de l'interface de stockage de conteneurs vSphere.
Vérifiez que votre cluster dispose d'une StorageClass nommée standard-rwo
et que le pilote CSI vSphere est installé.
Votre version vSphere, ESXi et vCenter Server, doit être la version 7.0 Update 3 ou ultérieure. Pour en savoir plus, consultez la section Résoudre les problèmes de stockage.
Vue d'ensemble de la procédure
Voici les principales étapes de l'exercice présenté dans ce document:
- Créez une PersistentVolumeClaim.
- Créez une PersitentVolumeClaim qui demande la classe de stockage
standard-rwo
. Le cluster provisionne alors de manière dynamique un PersistentVolume et l'associe à votre PersistentVolumeClaim.
- Créez un déploiement.
- Créer un déploiement comportant un pod Le pod spécifie un volume basé sur votre PersistentVolumeClaim. Le conteneur du pod installe le volume à l'emplacement
/hello/
.
- Écrire un fichier sur le volume du pod
- Créez un fichier nommé
hello.txt
dans le volume du pod. Le contenu du fichier est "Hello World!".
- Créer un VolumeSnapshot
- Créer un VolumeSnapshot qui capture l'état du volume du pod
- Fichier corrompu.
- Modifiez le fichier
hello.txt
pour qu'il ressemble à un fichier corrompu. Le contenu du fichier s'appelle désormais "Hello W-corrupted-file-orld!".
- Utilisez l'instantané pour restaurer le volume.
- Créez une deuxième PersistentVolumeClaim qui utilise votre VolumeSnapshot comme source de données. Modifiez votre déploiement afin que son volume soit associé à la nouvelle PersistentVolumeClaim. Vérifiez ensuite que le fichier
hello.txt
a bien été restauré.
Créer une PersistentVolumeClaim
Voici le fichier manifeste d'une PersistentVolumeClaim:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: standard-rwo
Dans le fichier manifeste précédent, vous pouvez voir que storageClassName
est défini sur standard-rwo
. Il s'agit de la classe de stockage associée au pilote CSI vSphere.
Enregistrez le fichier manifeste dans un fichier nommé my-pvc.yaml
. Créez et affichez une PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc
Dans la sortie, vous pouvez voir que la PersistentVolumeClaim est liée à un PersistentVolume provisionné dynamiquement. Par exemple, le résultat suivant montre que l'objet PersistentVolumeClaim nommé my-pvc
est lié à un PersistentVolume nommé pvc-467d211c-26e4-4d69-aaa5-42219aee6fd5
:
my-pvc Bound pvc-467d211c-26e4-4d69-aaa5-42219aee6fd5 … standard-rwo 100s
Créer un déploiement
Voici le fichier manifeste d'un déploiement :
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: google/cloud-sdk:slim args: [ "sleep", "3600" ] volumeMounts: - name: my-volume mountPath: /hello/ volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc
Dans le contexte de cet exercice, voici les points importants à comprendre à propos du fichier manifeste de déploiement précédent:
Le pod demande le stockage en spécifiant l'objet PersistentVolumeClaim,
my-pvc
, que vous avez créé précédemment.Le pod comporte un conteneur qui installe le volume sur
/hello/
.
Enregistrez le fichier manifeste dans un fichier nommé my-deployment.yaml
et créez le déploiement:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-deployment.yaml
Le déploiement comporte un pod. Obtenez le nom du pod:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Notez le nom du pod. Par exemple, dans le résultat suivant, le nom du pod est my-deployment-7575c4f5bf-r59nt
:
my-deployment-7575c4f5bf-r59nt 1/1 Running 0 65s
Créer un fichier dans le volume du pod et l'afficher.
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'echo "Hello World!" > /hello/hello.txt' kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'cat /hello/hello.txt'
La sortie affiche le contenu du fichier /hello/hello.txt
:
Hello World!
Créer un instantané
Voici le fichier manifeste d'un VolumeSnapshot:
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: csi-vsphere-snapshot-class source: persistentVolumeClaimName: my-pvc
Enregistrez le fichier manifeste dans un fichier nommé my-snapshot.yaml
et créez le VolumeSnapshot:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-snapshot.yaml
Fichier corrompu dans le volume
Modifiez le contenu de hello.txt
pour qu'il semble corrompu:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'echo "Hello W-corrupted-file-orld!" > /hello/hello.txt' kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'cat /hello/hello.txt'
Dans la sortie, vous pouvez voir que le fichier a été modifié:
Hello W-corrupted-file-orld!
Restaurer
Voici le fichier manifeste d'une deuxième PersistentVolumeClaim:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc-2 spec: storageClassName: standard-rwo dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 5Gi
Dans le fichier manifeste précédent, vous pouvez voir que la source de données de la nouvelle demande PersistentVolume est le VolumeSnapshot que vous avez créé précédemment.
Enregistrez le fichier manifeste dans un fichier nommé my-pvc-2.yaml
. Créez et affichez une PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc-2.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc-2
Ouvrez le déploiement pour le modifier:
kubectl --kubeconfig CLUSTER_KUBECONFIG edit deployment my-deployment
Remplacez my-pvc
par my-pvc-2
, puis fermez l'éditeur:
… volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc-2
Le déploiement supprime le pod et crée un nouveau pod qui utilise la nouvelle PersistentVolumeClaim.
Patientez quelques minutes, puis obtenez le nouveau nom du pod:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Vérifiez que le volume des pods a été restauré:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec NEW_POD_NAME \ -- sh -c 'cat /hello/hello.txt'
Le résultat indique que le volume a été restauré:
Hello World!
Dépannage
Pour obtenir des conseils de dépannage, consultez la section Résoudre les problèmes de stockage.