Cette page explique comment sauvegarder et restaurer l'espace de stockage Filestore sous-jacent associé à vos clusters GKE à l'aide d'instantanés de volume Kubernetes.
La création d'un instantané de volume Kubernetes équivaut à créer une sauvegarde Filestore. Pour plus d'informations, consultez la page À propos des instantanés de volume Kubernetes.
Conditions requises
Pour utiliser des instantanés de volume sur GKE, vous devez répondre aux exigences suivantes :
Vous devez déployer le pilote CSI Filestore, qui est compatible avec les niveaux de service Filestore suivants :
- HDD de base avec GKE version 1.21 ou ultérieure
- SSD de base avec GKE version 1.21 ou ultérieure
- Entreprise avec GKE version 1.25 ou ultérieure
Utilisez les versions 1.17 ou ultérieures du plan de contrôle. Pour utiliser le pilote CSI Filestore dans un
VolumeSnapshot
, utilisez GKE version 1.21 ou ultérieure.
- 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: pd.csi.storage.gke.io
oufilestore.csi.storage.gke.io
. Si lePersistentVolume
est provisionné de manière dynamique par le pilote CSI, comme décrit dans les sections suivantes, il est géré par le pilote CSI.
Limites
Les volumes d'instantanés sont soumis aux mêmes restrictions de taille que les volumes standards. Par exemple, la taille des instantanés Filestore doit être supérieure ou égale à 1 Tio pour le niveau HDD de base.
Le pilote CSI Filestore n'est pas compatible avec les workflows de provisionnement ou de sauvegarde dynamiques pour les niveaux de service Filestore suivants :
- Zonal avec une bande de capacité plus élevée (anciennement SSD grande capacité)
- Zonal avec bande de capacité inférieure
Vous ne pouvez sauvegarder qu'un seul partage à la fois par instance. En ce qui concerne les pools de stockage, les requêtes de sauvegarde provenant de deux partages différents de deux instances Filestore différentes s'exécutent simultanément.
Les sauvegardes à partage unique ne peuvent être restaurées que sur des volumes à partage unique. Le pilote CSI Filestore vous permet uniquement de restaurer un volume à partage unique dans une nouvelle instance Filestore.
- La nouvelle instance doit utiliser le même niveau de service que la sauvegarde.
- La nouvelle instance doit avoir la même capacité minimale que la sauvegarde.
Les opérations Filestore
backup restore
sur la source ou sur une instance Filestore existante ne sont pas compatibles. Pour obtenir la liste complète des limites des fonctionnalités, consultez la page Limites des fonctionnalités de sauvegarde Filestore.Les sauvegardes avec multipartage ne sont pas compatibles.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialize gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
Créer et utiliser un instantané de volume
Les exemples de ce document vous montrent comment effectuer les opérations suivantes :
- Créer un
PersistentVolumeClaim
et unDeployment
- Ajouter un fichier au
PersistentVolume
utilisé parDeployment
- Créer un objet
VolumeSnapshotClass
pour configurer l'instantané - Créer un instantané de volume du
PersistentVolume
. - Supprimer le fichier de test
- Restaurer le fichier
PersistentVolume
dans l'instantané que vous avez créé - Vérifiez que la restauration a fonctionné
Pour utiliser un instantané de volume, procédez comme suit :
- Créez un objet
VolumeSnapshotClass
pour spécifier le pilote CSI et la règle de suppression de votre instantané. - Créez un objet
VolumeSnapshot
pour demander un instantané d'unPersistentVolumeClaim
existant. - Référencez le
VolumeSnapshot
dans unPersistentVolumeClaim
pour restaurer un volume sur cet instantané, ou créez un volume à l'aide de l'instantané.
Créer un PersistentVolumeClaim
et un Deployment
Pour créer l'objet
PersistentVolumeClaim
, enregistrez le manifeste suivant sous le nommy-pvc.yaml
:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1Ti
Cet exemple crée un PVC Filestore de niveau Enterprise. Pour en savoir plus, consultez la page Accéder aux instances Filestore avec le pilote CSI Filestore.
Pour
spec.storageClassName
, vous pouvez spécifier n'importe quelle classe de stockage utilisant un pilote CSI compatible.Appliquez le fichier manifeste :
kubectl apply -f my-pvc.yaml
Pour créer un
Deployment
, enregistrez le fichier manifeste suivant sous le nommy-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app 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: sdk-volume mountPath: /usr/share/hello/ volumes: - name: sdk-volume persistentVolumeClaim: claimName: my-pvc
Appliquez le fichier manifeste :
kubectl apply -f my-deployment.yaml
Vérifiez l'état du
Deployment
.kubectl get deployment hello-app
La préparation du
Deployment
peut prendre un certain temps. Vous pouvez exécuter la commande ci-dessus jusqu'à obtenir un résultat semblable à celui-ci :NAME READY UP-TO-DATE AVAILABLE AGE hello-app 1/1 1 1 2m55s
Ajouter un fichier de test au volume
Référencez les
Pods
dans leDeployment
:kubectl get pods -l app=hello-app
Le résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE hello-app-6d7b457c7d-vl4jr 1/1 Running 0 2m56s
Créez un fichier de test dans un
Pod
:kubectl exec POD_NAME \ -- sh -c 'echo "Hello World!" > /usr/share/hello/hello.txt'
Remplacez
POD_NAME
par le nom duPod
.Vérifiez la présence du fichier.
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'
Le résultat ressemble à ce qui suit :
Hello World!
Créer un objet VolumeSnapshotClass
.
Créez un objet VolumeSnapshotClass
pour spécifier le pilote CSI et deletionPolicy
pour votre instantané de volume. Vous pouvez référencer des objets VolumeSnapshotClass
lorsque vous créez des objets VolumeSnapshot
.
Enregistrez le fichier manifeste suivant sous le nom
volumesnapshotclass.yaml
.Filestore
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass driver: filestore.csi.storage.gke.io parameters: type: backup deletionPolicy: Delete
Dans cet exemple :
- Le champ
driver
est utilisé par le pilote CSI pour provisionner l'instantané. Dans cet exemple,filestore.csi.storage.gke.io
utilise le pilote CSI Filestore. - Le champ
deletionPolicy
indique à GKE ce qu'il faut faire avec l'objetVolumeSnapshotContent
et l'instantané sous-jacent lorsque l'objetVolumeSnapshot
lié est supprimé. Spécifiez la valeurDelete
pour supprimer l'objetVolumeSnapshotContent
et l'instantané sous-jacent. Spécifiez la valeurRetain
si vous souhaitez conserver l'objetVolumeSnapshotContent
et l'instantané sous-jacent.
- Le champ
Appliquez le fichier manifeste :
kubectl apply -f volumesnapshotclass.yaml
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
, GKE le crée et le lie automatiquement avec 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: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvc
Appliquez le fichier manifeste :
kubectl apply -f volumesnapshot.yaml
Après avoir créé un instantané
Volume
, GKE crée un objetVolumeSnapshotContent
correspondant dans le cluster. 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 GKE a créé l'objet
VolumeSnapshotContents
:kubectl get volumesnapshotcontents
Le résultat ressemble à ce qui suit :
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Une fois le contenu de l'instantané Volume
créé, le pilote CSI que vous avez spécifié dans le VolumeSnapshotClass
crée un instantané sur le système de stockage correspondant. Dès que GKE a créé l'instantané sur le système de stockage et l'a lié à un objet VolumeSnapshot
du cluster, l'instantané devient utilisable. 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
my-snapshot true
Supprimer le fichier de test
Supprimez le fichier de test que vous avez créé :
kubectl exec POD_NAME \ -- sh -c 'rm /usr/share/hello/hello.txt'
Vérifiez que le fichier n'existe plus :
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'
Le résultat ressemble à ce qui suit :
cat: /usr/share/hello/hello.txt: No such file or directory
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
. Le même processus est utilisé, que VolumeSnapshotContents
fasse référence à une image disque ou à un instantané.
Dans cet exemple, vous référencez le VolumeSnapshot
que vous avez créé dans une nouvelle PersistentVolumeClaim
et vous mettez à jour le Deployment
pour qu'il utilise la nouvelle revendication.
Vérifiez si vous utilisez un instantané de disque ou d'image, qui diffèrent comme suit :
- Instantanés de disque : prenez des instantanés fréquemment et restaurez-les rarement.
- Instantanés d'images : prenez rarement des instantanés et restaurez-les fréquemment. La création d'instantanés d'images peut également être plus lente que celle des instantanés de disque.
Pour en savoir plus, consultez la page Limites de fréquence des instantanés. L'identification du type d'instantané vous permettra de résoudre les problèmes que vous rencontrez.
Inspectez le
VolumeSnapshot
:kubectl describe volumesnapshot SNAPSHOT_NAME
Le champ
volumeSnapshotClassName
spécifie la classe de l'instantané.kubectl describe volumesnapshotclass SNAPSHOT_CLASS_NAME
Le paramètre
snapshot-type
spécifiesnapshots
ouimages
. S'il n'est pas spécifié, la valeur par défaut estsnapshots
.S'il n'y a aucune classe d'instantané (par exemple, si l'instantané a été créé statiquement), inspectez
VolumeSnapshotContents
.sh kubectl describe volumesnapshotcontents SNAPSHOT_CONTENTS_NAME
Le format d'un gestionnaire d'instantanés dans la sortie vous indique le type d'instantané, comme suit : *projects/PROJECT_NAME/global/snapshots/SNAPSHOT_NAME
: instantané de disqueprojects/PROJECT_NAME/global/images/IMAGE_NAME
: instantané d'image
Enregistrez le manifeste suivant sous le nom
pvc-restore.yaml
:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1Ti
Appliquez le fichier manifeste :
kubectl apply -f pvc-restore.yaml
Mettez à jour le fichier
my-deployment.yaml
pour qu'il utilise le nouveau fichierPersistentVolumeClaim
:... volumes: - name: my-volume persistentVolumeClaim: claimName: pvc-restore
Appliquez le fichier manifeste mis à jour :
kubectl apply -f my-deployment.yaml
Vérifier que l'instantané a bien été restauré
Obtenez le nom du nouveau
Pod
créé par GKE pour leDeployment
mis à jour :kubectl get pods -l app=hello-app
Vérifiez que le fichier de test existe :
kubectl exec NEW_POD_NAME \
-- sh -c 'cat /usr/share/hello/hello.txt'
Remplacez NEW_POD_NAME
par le nom du nouveau Pod
créé par GKE.
Le résultat ressemble à ce qui suit :
Hello World!
Effectuer un nettoyage
Pour éviter que les ressources utilisées sur cette page soient facturées sur votre compte Google Cloud, procédez comme suit :
Supprimez le sous-réseau
VolumeSnapshot
:kubectl delete volumesnapshot my-snapshot
Supprimez le sous-réseau
VolumeSnapshotClass
:kubectl delete volumesnapshotclass my-snapshotclass
Supprimez le sous-réseau
Deployment
:kubectl delete deployments hello-app
Supprimer les objets
PersistentVolumeClaim
:kubectl delete pvc my-pvc pvc-restore
Étapes suivantes
- Consultez la documentation Kubernetes sur les instantanés de volume.
- Apprenez-en davantage sur l'expansion de volume.
- Découvrez comment installer manuellement un pilote CSI.
- Apprenez-en plus sur le stockage de fichiers (Filestore) pour GKE.