Vous pouvez utiliser la fonctionnalité d'instantané de volume Kubernetes pour les volumes persistants et provisionnement dynamique dans vos clusters GKE.
Les instantanés de volume permettent de créer une copie d'un volume à un moment précis. Cette copie peut servir à revenir à un état antérieur ou à provisionner un nouveau volume.
Vous pouvez provisionner et associer des instantanés de volume à l'aide des composants suivants:
- VolumeSnapshotClass (classe d'instantané de volume)
- VolumeSnapshot (instantané de volume)
- VolumeSnapshotContent (contenu de l'instantané de volume)
Conditions requises
Pour utiliser des instantanés de volume sur GKE sur AWS, vous devez disposer des éléments suivants :
Un volume utilisant un pilote Container Storage Interface (CSI) compatible avec les instantanés. Les pilotes EBS (Elastic Block Store) que GKE sur AWS utilise par défaut avec les instantanés de compatibilité.
Pour obtenir la liste de tous les pilotes CSI compatibles avec les instantanés, consultez la colonne "Other features" (autres fonctionnalités) dans la page Drivers (pilotes) de la documentation Kubernetes.
Vous devez disposer d'un objet
PersistentVolumeClaim
pour utiliser un instantané. LePersistentVolume
que vous utilisez pour une source d'instantané doit être géré par un pilote CSI. Vous pouvez contrôler que vous utilisez un pilote CSI en vérifiant que la spécificationPersistentVolume
présente une sectioncsi
avecdriver: ebs.csi.aws.com
. Si votre cluster provisionne de manière dynamique les PersistentVolumes par le pilote CSI, comme décrit dans les sections suivantes, il est géré par le pilote CSI.
Avant de commencer
Créer et utiliser un instantané de volume
Les exemples de ce document vous montrent comment effectuer les opérations suivantes :
- Créez des exemples
PersistentVolumeClaim
etPod
. - Créer un objet VolumeSnapshot
- Restaurer l'instantané de volume
- Vérifiez que la restauration a fonctionné
Pour utiliser un instantané de volume, procédez comme suit :
- Créez un objet
VolumeSnapshot
pour demander un instantané d'un objet PersistentVolumeClaim existant. - Référencez l'objet
VolumeSnapshot
dans unPersistentVolumeClaim
pour restaurer un volume sur cet instantané, ou créez un volume à l'aide de l'instantané.
Créer des exemples PersistentVolumeClaim
et Pod
Pour créer l'objet
PersistentVolumeClaim
, enregistrez le manifeste suivant sous le nomexample-pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc spec: storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Pour
spec.storageClassName
, vous pouvez spécifier n'importe quelle classe de stockage utilisant un pilote CSI compatible. Cet exemple utilise la classe de stockagestandard-rwo
par défaut.Appliquer le fichier manifeste :
kubectl apply -f example-pvc.yaml
Créez un pod qui écrit la date et l'heure actuelles sur le volume. Pour créer un déploiement, enregistrez le fichier manifeste suivant sous le nom
snapshot-shell.yaml
:apiVersion: v1 kind: Pod metadata: name: snapshot-shell spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "echo $(date -u) >> /data/out.txt"] volumeMounts: - name: snapshot-volume mountPath: /data restartPolicy: Never volumes: - name: snapshot-volume persistentVolumeClaim: claimName: example-pvc
Appliquer le fichier manifeste :
kubectl apply -f snapshot-shell.yaml
Vérifiez l'état du pod:
kubectl get pod snapshot-shell
L'exécution et le traitement du pod peuvent prendre un certain temps. Vous pouvez exécuter la commande ci-dessus jusqu'à obtenir un résultat semblable à celui-ci :
NAME READY STATUS RESTARTS AGE snapshot-shell 0/1 Completed 0 24s
Créer un objet VolumeSnapshot
Un objet VolumeSnapshot
est une requête d'instantané d'un objet PersistentVolumeClaim
existant. Lorsque vous créez un objet VolumeSnapshot
, votre cluster le crée et le lie automatiquement à l'aide d'un objet VolumeSnapshotContent
, qui est une ressource de votre cluster comme un objet PersistentVolume
.
Enregistrez le fichier manifeste suivant sous le nom
volumesnapshot.yaml
.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: example-snapshot spec: source: persistentVolumeClaimName: example-pvc
Appliquer le fichier manifeste :
kubectl apply -f volumesnapshot.yaml
Après avoir créé un instantané de volume, votre cluster crée un objet
VolumeSnapshotContent
correspondant. Cet objet stocke l'instantané et les liaisons avec les objetsVolumeSnapshot
. Il n'est pas possible d'interagir directement avec les objetsVolumeSnapshotContents
.Vérifiez que votre cluster a créé l'objet
VolumeSnapshotContents
:kubectl get volumesnapshotcontents
Le résultat ressemble à ce qui suit :
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Vérifier que l'instantané de volume est prêt
Une fois le contenu de l'instantané de volume créé, le pilote CSI que vous avez spécifié dans le VolumeSnapshotClass
crée un instantané sur le système de stockage correspondant. Une fois que votre cluster a créé un instantané sur le système de stockage et l'a lié à un objet VolumeSnapshot
, il est prêt à être utilisé. Vous pouvez vérifier son état à l'aide de la commande suivante :
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Si l'instantané est prêt à être utilisé, le résultat ressemble à ce qui suit :
NAME READY
example-snapshot true
Restaurer l'instantané de volume
Vous pouvez référencer un VolumeSnapshot
dans un PersistentVolumeClaim
pour provisionner un nouveau volume avec les données d'un volume existant ou restaurer un volume à un état capturé dans l'instantané.
Pour référencer un VolumeSnapshot
dans une PersistentVolumeClaim
, ajoutez le champ dataSource
à votre PersistentVolumeClaim
.
Dans cet exemple, vous référencez le VolumeSnapshot
que vous avez créé dans un nouveau PersistentVolumeClaim
et créez un pod qui installe le PersistentVolumeClaim
.
Enregistrez le manifeste suivant sous le nom
pvc-restore.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: example-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Appliquer le fichier manifeste :
kubectl apply -f pvc-restore.yaml
Démarrez un pod temporaire qui installe le PVC dans le pod et imprime le contenu de
out.txt
dans les journaux.Enregistrez le manifeste suivant sous le nom
restore-log.yaml
:apiVersion: v1 kind: Pod metadata: name: restore-verify spec: volumes: - name: restore-data persistentVolumeClaim: claimName: pvc-restore containers: - name: shell-container image: ubuntu:bionic volumeMounts: - mountPath: "/data" name: restore-data command: [ "/bin/sh" ] args: ["-c", "cat /data/out.txt", "exit", "1"] restartPolicy: Never
Appliquer le fichier manifeste :
kubectl apply -f restore-log.yaml
Vérifier que l'instantané a bien été restauré
Le pod que vous avez créé à l'étape précédente lit à partir de l'instantané. Pour afficher les données de l'instantané, utilisez la commande kubectl logs
.
kubectl logs restore-verify
Le résultat doit inclure un horodatage de l'instantané.
Effectuer un nettoyage
Pour éviter que les ressources utilisées sur cette page soient facturées, procédez comme suit :
Supprimez le sous-réseau
VolumeSnapshot
:kubectl delete volumesnapshot example-snapshot
Supprimez le pod temporaire:
kubectl delete -f restore-log.yaml
Supprimez le pod :
kubectl delete -f snapshot-shell.yaml
Supprimer les objets
PersistentVolumeClaim
:kubectl delete pvc example-pvc pvc-restore
Étapes suivantes
- Consultez la documentation Kubernetes sur les instantanés de volume.
- Installer des pilotes CSI supplémentaires