Optimiser les performances et les coûts de stockage avec les pools de stockage Hyperdisk


Cette page explique comment vos clusters Google Kubernetes Engine (GKE) peuvent mettre en commun et partager la capacité de stockage, le débit et les IOPS sur plusieurs disques à l'aide des pools de stockage Hyperdisk GKE.

Présentation

Les pools de stockage regroupent logiquement les appareils de stockage physiques, ce qui vous permet de segmenter vos ressources. Vous pouvez provisionner des Hyperdisks Google Cloud dans ces pools de stockage, ce qui crée essentiellement des pools de stockage Hyperdisk. Les pools de stockage Hyperdisk offrent une capacité, un débit et des IOPS préprovisionnés que vos disques de cluster GKE peuvent partager.

Vous pouvez utiliser des pools de stockage Hyperdisk pour gérer vos ressources de stockage plus efficacement et à moindre coût. Vous pouvez ainsi profiter des technologies d'efficacité telles que la déduplication et le provisionnement allégé.

Dans ce guide, vous allez utiliser la zone us-east4-c pour créer le pool de stockage Hyperdisk équilibré et d'autres ressources.

Considérations liées à la planification

Tenez compte des exigences et limites suivantes avant de provisionner et d'utiliser votre pool de stockage Hyperdisk.

Créer et gérer des pools de stockage

Les exigences et limites suivantes s'appliquent :

Provisionner des disques de démarrage dans des pools de stockage

Les exigences et limites suivantes s'appliquent:

  • Assurez-vous que les emplacements de nœuds du cluster et les emplacements de nœuds du pool de nœuds correspondent exactement aux zones du pool de stockage. Cette restriction ne s'applique pas si le provisionnement automatique des nœuds est activé. Le provisionnement automatique des nœuds peut créer automatiquement des pools de nœuds dans les zones appropriées, si nécessaire.
  • Assurez-vous que le type de machine qui exécute votre pod est compatible avec l'association d'un type de disque Hyperdisk avec équilibrage. Hyperdisk Throughput n'est pas compatible en tant que disque de démarrage. Consultez la documentation compatible avec les types de machines Hyperdisk.
  • Vous ne pouvez provisionner des disques de démarrage dans des pools de stockage que sur des pools de nœuds créés ou mis à jour manuellement.
  • Lorsque des nœuds sont créés automatiquement à l'aide du provisionnement automatique des nœuds, les disques de démarrage de ces nœuds ne peuvent pas être placés dans un pool de stockage.

Provisionner un disque associé dans des pools de stockage

Les exigences et limites suivantes s'appliquent:

  • La version GKE minimale requise pour le provisionnement de disques connectés dans des pools de stockage est la version 1.29.2-gke.1035000 ou ultérieure.
  • Assurez-vous que le pilote CSI de disque persistant Compute Engine est activé. Le pilote de disque persistant Compute Engine est activé par défaut sur les nouveaux clusters Autopilot et Standard et ne peut pas être désactivé ni modifié dans les clusters Autopilot. Pour activer le pilote, consultez la section Activer le pilote CSI de disque persistant Compute Engine sur un cluster existant.
  • Assurez-vous que le pool de stockage se trouve dans au moins un des emplacements de nœud du cluster et des emplacements de nœud du pool de nœuds.
  • Vous ne pouvez provisionner que des disques associés à Hyperdisk Throughput et Hyperdisk avec équilibrage dans des pools de stockage. Le type du disque connecté doit correspondre au type du pool de stockage. Pour en savoir plus, consultez la page Types de pools de stockage Hyperdisk.
  • Assurez-vous que le type de machine qui exécute votre pod est compatible avec l'association du type de disque que vous utilisez à partir du pool de stockage. Pour en savoir plus, consultez la section Compatibilité avec les types de machines Hyperdisk.

Quota

Lorsque vous créez un pool de stockage Hyperdisk, vous pouvez le configurer avec le provisionnement standard ou avancé pour la capacité et les performances. Si vous souhaitez augmenter le quota en termes de capacité, de débit ou d'IOPS, demandez un quota plus élevé pour le filtre de quota approprié.

Pour en savoir plus, consultez les pages Afficher les quotas de votre projet et Demander un quota plus élevé.

Utilisez les filtres de quota suivants pour les pools de stockage Hyperdisk Balanced:

  • HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region : pour augmenter la capacité avec le provisionnement de capacité Advanced.
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region: pour augmenter les IOPS avec le provisionnement de performances Advanced.
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region: pour augmenter le débit avec le provisionnement de performances Advanced.
  • HDB-TOTAL-GB-per-project-region : pour augmenter la capacité avec le provisionnement de capacité standard.
  • HDB-TOTAL-IOPS-per-project-region: pour augmenter les IOPS avec le provisionnement de performances Standard.
  • HDB-TOTAL-THROUGHPUT-per-project-region: pour augmenter le débit avec le provisionnement de performances Standard.

Utilisez les filtres de quota suivants pour les pools de stockage Hyperdisk Throughput :

  • HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region: pour augmenter la capacité avec le provisionnement de capacité Advanced.
  • HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region : pour augmenter le débit avec le provisionnement des performances Advanced.
  • HDT-TOTAL-GB-per-project-region: pour augmenter la capacité avec le provisionnement de capacité Standard.
  • HDT-TOTAL-THROUGHPUT-per-project-region : pour augmenter le débit avec le provisionnement de performances standard.

Par exemple, si vous souhaitez augmenter la capacité totale des pools de stockage Hyperdisk Balanced avec un provisionnement de capacité Advanced, par projet et par région, demandez un quota plus élevé pour le filtre suivant:

hdb-storage-pool-total-advanced-capacity-per-project-region.

Tarifs

Pour en savoir plus sur les tarifs, consultez la page Tarifs des pools de stockage Hyperdisk.

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 initialisez 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 un pool de stockage Hyperdisk

Créez un pool de stockage Hyperdisk avant de provisionner des disques de démarrage ou des disques associés dans ce pool de stockage. Pour en savoir plus, consultez la page Créer des pools de stockage Hyperdisk.

Assurez-vous de créer des pools de stockage dans l'une des zones compatibles.

Par exemple, utilisez la commande suivante pour créer un pool de stockage Hyperdisk Balanced avec une capacité et des performances avancées, et provisionner une capacité de 10 To, 10 000 IOPS/s et un débit de 1 024 Mbit/s dans la zone us-east4-c :

export PROJECT_ID=PROJECT_ID
export ZONE=us-east4-c
gcloud compute storage-pools create pool-$ZONE \
    --provisioned-capacity=10tb --storage-pool-type=hyperdisk-balanced \
    --zone=$ZONE --project=$PROJECT_ID --capacity-provisioning-type=advanced \
    --performance-provisioning-type=advanced --provisioned-iops=10000 \
    --provisioned-throughput=1024

Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.

Inspecter les zones de pool de stockage

  • Pour les clusters Autopilot et les clusters Standard avec le provisionnement automatique des nœuds activé, vous pouvez créer un pool de stockage dans n'importe quelle zone de la région du cluster. Si aucun pool de nœuds n'existe dans la zone dans laquelle vous avez créé le pool de stockage, les pods restent à l'état Pending jusqu'à ce que l'autoscaler de cluster GKE puisse provisionner un nouveau pool de nœuds dans cette zone.

  • Pour les clusters standards sans provisionnement automatique des nœuds, créez des pools de stockage dans les zones de nœuds par défaut de votre cluster, car les pools de stockage sont des ressources zonales. Vous pouvez définir les zones de nœud de votre cluster à l'aide de l'indicateur --node-locations.

    • Pour les clusters zonaux, si vous ne spécifiez pas la valeur --node-locations, tous les nœuds sont créés dans la zone principale du cluster.
    • Pour les clusters régionaux, si vous ne spécifiez pas de --node-locations, GKE répartit vos nœuds de calcul dans trois zones de la région choisies de manière aléatoire.

Pour inspecter les zones de nœuds par défaut d'un cluster, exécutez la commande suivante:

gcloud container clusters describe CLUSTER_NAME  | yq '.locations'

Remplacez CLUSTER_NAME par le nom du cluster que vous souhaitez créer lors du provisionnement d'un disque de démarrage ou d'un disque associé.

Provisionner un disque de démarrage GKE dans un pool de stockage Hyperdisk

Vous pouvez provisionner un disque de démarrage GKE dans un pool de stockage Hyperdisk lorsque vous effectuez l'une des opérations suivantes:

  • Lors de la création d'un cluster GKE
  • Lors de la création d'un pool de nœuds
  • Lors de la mise à jour d'un pool de nœuds existant

Lors de la création d'un cluster

Pour créer un cluster GKE avec des disques de démarrage provisionnés dans un pool de stockage, exécutez la commande suivante:

gcloud container clusters create CLUSTER_NAME \
    --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
    --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
    --zone=ZONE

Remplacez les éléments suivants :

  • CLUSTER_NAME: indiquez un nom unique pour le cluster que vous créez.
  • DISK_TYPE: définissez cette valeur sur hyperdisk-balanced.. Si aucune valeur n'est spécifiée, le type de disque est défini par défaut sur "Hyperdisk équilibré".
  • STORAGE_POOL,[...] : liste des chemins d'accès aux ressources du pool de stockage (par exemple, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) où les disques de démarrage du cluster seront provisionnés, séparés par une virgule. Assurez-vous que les zones des chemins d'accès aux ressources du pool de stockage correspondent aux zones de --node-locations.
  • ZONE,[...] : liste des zones, séparées par une virgule, dans lesquelles l'empreinte de votre nœud doit être répliquée. Pour les clusters régionaux, vous pouvez spécifier des régions à la place. Toutes les zones doivent se trouver dans la même région que le cluster, spécifiée par les options -location, --zone ou --region.
  • MACHINE_TYPE: type de machine compatible que vous souhaitez utiliser pour vos nœuds.
  • ZONE: zone dans laquelle vous souhaitez créer votre cluster. Utilisez l'option —region pour créer un cluster régional.

Lorsque vous créez un pool de nœuds

Pour créer un pool de nœuds GKE avec des disques de démarrage provisionnés dans un pool de stockage, exécutez la commande suivante:

gcloud container node-pools create NODE_POOL_NAME \
    --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
    --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
    --zone=ZONE --cluster=CLUSTER_NAME

Remplacez les éléments suivants :

  • NODE_POOL_NAME: indiquez un nom unique pour le pool de nœuds que vous créez.
  • DISK_TYPE: définissez cette valeur sur hyperdisk-balanced.. Si aucune valeur n'est spécifiée, le type de disque est défini par défaut sur "Hyperdisk équilibré".
  • STORAGE_POOL,[...] : liste des chemins d'accès aux ressources du pool de stockage (par exemple, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) où les disques de démarrage du cluster seront provisionnés, séparés par une virgule. Assurez-vous que les zones des chemins d'accès aux ressources du pool de stockage correspondent aux valeurs de --node-locations.
  • ZONE,[...] : liste des zones, séparées par une virgule, dans lesquelles l'empreinte de votre nœud doit être répliquée. Toutes les zones doivent se trouver dans la même région que le cluster, spécifiée par les indicateurs -location, --zone ou --region.
  • MACHINE_TYPE: type de machine compatible que vous souhaitez utiliser pour vos nœuds.
  • ZONE : zone dans laquelle vous souhaitez créer le pool de nœuds.
  • CLUSTER_NAME: cluster existant dans lequel vous créez le pool de nœuds.

Lorsque vous mettez à jour un pool de nœuds

Vous pouvez utiliser une commande update pour ajouter ou remplacer des pools de stockage dans un pool de nœuds. Cette commande ne peut pas être utilisée pour supprimer des pools de stockage d'un pool de nœuds.

Pour mettre à jour un pool de nœuds GKE afin que ses disques de démarrage soient provisionnés dans un pool de stockage, exécutez la commande suivante.

gcloud container node-pools update NODE_POOL_NAME \
  --storage-pools=STORAGE_POOL,[...] \
  --zone=ZONE --cluster=CLUSTER_NAME
  • NODE_POOL_NAME : nom d'un pool de nœuds existant que vous souhaitez mettre à jour pour utiliser un pool de stockage.
  • STORAGE_POOL,[...]: liste des chemins d'accès aux ressources de pool de stockage existants, séparés par une virgule (par exemple, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c). Assurez-vous que les zones des chemins d'accès aux ressources du pool de stockage correspondent à la zone du pool de nœuds que vous mettez à jour.
  • ZONE: zone où se trouve le pool de nœuds.
  • CLUSTER_NAME : nom du cluster GKE auquel appartient ce pool de nœuds.

GKE met à jour le pool de nœuds en fonction de la stratégie de mise à niveau du pool de nœuds.

Provisionner un disque associé à GKE dans un pool de stockage Hyperdisk

Dans cette section :

  • Vous créez un cluster GKE avec des disques associés provisionnés dans un pool de stockage.
  • Créez une ressource StorageClass pour provisionner de manière dynamique un PersistentVolume (PV) lorsqu'un pod le demande via un PersistentVolumeClaim (PVC). Pour qu'un PV puisse utiliser les ressources partagées du pool de stockage, vous devez spécifier le pool de stockage à l'aide du paramètre storage-pools dans votre StorageClass. La StorageClass est ensuite utilisée dans une PVC pour provisionner le volume Hyperdisk Balanced qui sera utilisé par le pod.
  • Créez un PVC pour demander un PV (un espace de stockage Hyperdisk) pour un pod à partir de votre cluster GKE. Cela vous permet de bénéficier des ressources partagées du pool de stockage.
  • Créez un déploiement qui utilise un PVC pour vous assurer que votre application a accès au stockage persistant même après le redémarrage et la reprogrammation du pod.

Créer un cluster GKE

Avant de commencer, consultez les considérations à prendre en compte pour provisionner un disque connecté.

Autopilot

Pour créer un cluster Autopilot à l'aide de la gcloud CLI, consultez la section Créer un cluster Autopilot.

Exemple :

gcloud container clusters create-auto CLUSTER_NAME --region=REGION

Remplacez les éléments suivants :

  • CLUSTER_NAME : indiquez un nom unique pour le cluster que vous créez.
  • REGION : région dans laquelle vous créez le cluster.

Pour sélectionner un type de machine compatible, vous devez spécifier le nodeSelector cloud.google.com/compute-class: Performance lors de la création d'un déploiement. Pour obtenir la liste des séries de machines Compute Engine disponibles avec la classe de calcul Performance, consultez la page Séries de machines compatibles.

Standard

Pour créer un cluster zonal standard à l'aide de la gcloud CLI, consultez Créer un cluster zonal.

Pour créer un cluster régional standard à l'aide de gcloud CLI, consultez la page Créer un cluster régional.

Exemple :

gcloud container clusters create CLUSTER_NAME --zone=ZONE --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"

Remplacez les éléments suivants :

  • CLUSTER_NAME: indiquez un nom unique pour le cluster que vous créez.
  • ZONE : zone dans laquelle vous créez le cluster. Utilisez l'option —region pour créer un cluster régional.
  • PROJECT_ID : ID de projet de votre compte Google Cloud.
  • MACHINE_TYPE: type de machine compatible que vous souhaitez utiliser pour vos nœuds.
  • DISK_TYPE : définissez cette valeur sur hyperdisk-balanced.. Si vous laissez ce champ vide, le type de disque est défini par défaut sur "Hyperdisk équilibré".

Créer un objet StorageClass

Dans Kubernetes, pour indiquer que vous souhaitez que votre PV soit créé dans un pool de stockage, utilisez une StorageClass. Pour en savoir plus, consultez StorageClasses.

Pour créer une ressource StorageClass avec le niveau de débit ou d'IOPS souhaité :

  • Utilisez pd.csi.storage.gke.io dans le champ approvisionneur.
  • Spécifiez le type de stockage Hyperdisk Balanced.
  • Spécifiez le paramètre storage-pools avec une valeur sous la forme d'une liste de pools de stockage spécifiques que vous souhaitez utiliser. Chaque pool de stockage de la liste doit être spécifié au format suivant : projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
  • Vous pouvez également spécifier les paramètres de performances provisioned-throughput-on-create et provisioned-iops-on-create..

Chaque type de volume Hyperdisk possède des valeurs par défaut, qui déterminent les performances en fonction de la taille du disque initial provisionnée. Lors de la création d'une StorageClass, vous pouvez éventuellement spécifier les paramètres suivants en fonction de votre type de volume Hyperdisk. Si vous omettez ces paramètres, GKE utilise les valeurs par défaut des types de disques basés sur la capacité.

Paramètre Type de volume Hyperdisk Utilisation
provisioned-throughput-on-create Hyperdisk Balanced, Hyperdisk Throughput Exprimez la valeur du débit en Mio/s à l'aide du qualificatif "Mi". Par exemple, si le débit requis est de 250 Mio/s, spécifiez "250Mi" lors de la création de la StorageClass.
provisioned-iops-on-create Hyperdisk Balanced, Hyperdisk IOPS La valeur des IOPS doit être exprimée sans qualificatif. Par exemple, si vous avez besoin de 7 000 IOPS, spécifiez "7000" lors de la création de la StorageClass.

Pour obtenir des conseils sur les valeurs autorisées pour le débit ou les IOPS, consultez la section Planifier le niveau de performances de vos volumes Hyperdisk.

Utilisez le fichier manifeste suivant pour créer et appliquer une StorageClass nommée storage-pools-sc afin de provisionner de manière dynamique un PV dans le pool de stockage projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c:

kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: storage-pools-sc
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: hyperdisk-balanced
  provisioned-throughput-on-create: "140Mi"
  provisioned-iops-on-create: "3000"
  storage-pools: projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
EOF

En utilisant le volumeBindingMode: WaitForFirstConsumer dans cette ressource StorageClass, la liaison et le provisionnement d'un PVC sont retardés jusqu'à ce qu'un pod utilisant le PVC soit créé. Cette approche garantit que le PV n'est pas provisionné prématurément et qu'il existe une correspondance de zone entre le PV et le pod qui l'utilise. Si leurs zones ne correspondent pas, le pod reste à l'état Pending.

Créer un PersistentVolumeClaim (PVC)

Créez un PVC faisant référence à la ressource StorageClass storage-pools-sc que vous avez créée.

Utilisez le fichier manifeste suivant pour créer un PVC nommé my-pvc, avec une capacité de stockage cible de 2 048 Gio pour le volume Hyperdisk Balanced :

kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: storage-pools-sc
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2048Gi
EOF

Créer un déploiement qui utilise le PVC

Bonne pratique:

Lorsque vous utilisez des pods avec des objets PersistentVolume, utilisez un contrôleur de charge de travail tel qu'un déploiement ou un StatefulSet.

Pour vous assurer que les pods peuvent être planifiés sur un pool de nœuds avec une série de machines compatible avec Hyperdisk Balanced, configurez un déploiement avec le sélecteur de nœud cloud.google.com/machine-family. Pour en savoir plus, consultez la section Compatibilité avec les types de machines pour les hyperdisques. Vous utilisez la série de machines c3 dans l'exemple de déploiement suivant.

Créez et appliquez le fichier manifeste suivant pour configurer un pod afin de déployer un serveur Web Postgres à l'aide du PVC créé dans la section précédente:

Autopilot

Sur les clusters Autopilot, spécifiez le nodeSelector cloud.google.com/compute-class: Performance pour provisionner un volume Hyperdisk Balanced. Pour en savoir plus, consultez la page Demander un nœud dédié pour un pod.

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      nodeSelector:
        cloud.google.com/machine-family: c3
        cloud.google.com/compute-class: Performance
      containers:
      - name: postgres
        image: postgres:14-alpine
        args: [ "sleep", "3600" ]
        volumeMounts:
        - name: sdk-volume
          mountPath: /usr/share/data/
      volumes:
      - name: sdk-volume
        persistentVolumeClaim:
          claimName: my-pvc
EOF

Standard

Sur les clusters standards sans provisionnement automatique des nœuds activé, assurez-vous qu'un pool de nœuds avec la série de machines spécifiée est opérationnel avant de créer le déploiement. Sinon, la planification du pod échoue.

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      nodeSelector:
        cloud.google.com/machine-family: c3
      containers:
      - name: postgres
        image: postgres:14-alpine
        args: [ "sleep", "3600" ]
        volumeMounts:
        - name: sdk-volume
          mountPath: /usr/share/data/
      volumes:
      - name: sdk-volume
        persistentVolumeClaim:
          claimName: my-pvc
EOF

Vérifiez que le déploiement a bien été créé :

  kubectl get deployment

Le provisionnement des instances Hyperdisk peut prendre quelques minutes et afficher un état READY.

Vérifier si le disque associé est provisionné

  1. Vérifiez si le PVC nommé my-pvc a bien été associé à un PV:

    kubectl get pvc my-pvc
    

    Le résultat ressemble à ce qui suit :

    
    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    my-pvc        Bound    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6   2Ti        RWO            storage-pools-sc   2m24s
    
  2. Vérifiez si le volume a été provisionné comme spécifié dans votre StorageClass et votre PVC :

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    Le résultat ressemble à ce qui suit :

    NAME                                      STATUS  PROVISIONED_IOPS  PROVISIONED_THROUGHPUT  SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  READY   3000              140                     2048
    

Créer et restaurer des disques associés dans des pools de stockage

Il n'est pas possible de déplacer des disques dans ou hors d'un pool de stockage. Pour déplacer un disque dans un pool de stockage ou en dehors, recréez-le à partir d'un instantané. Pour en savoir plus, consultez la page Modifier le type de disque.

Dans cette section :

Créer un fichier de test

Pour créer et valider un fichier de test, procédez comme suit:

  1. Obtenez le nom de pod du déploiement Postgres:

    kubectl get pods -l app=postgres
    

    Le résultat ressemble à ce qui suit :

    NAME                         READY   STATUS    RESTARTS   AGE
    postgres-78fc84c9ff-77vx6   1/1     Running   0          44s
    
  2. Créez un fichier de test hello.txt dans le pod :

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
    
  3. Vérifiez que le fichier de test est créé:

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

Créer un instantané de volume et supprimer un fichier de test

Pour créer et vérifier un instantané :

  1. Créez un VolumeSnapshotClass qui spécifie comment l'instantané de vos volumes doit être pris et géré :

    kubectl apply -f - <<EOF
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: my-snapshotclass
    driver: pd.csi.storage.gke.io
    deletionPolicy: Delete
    EOF
    
  2. Créez un VolumeSnapshot et prenez l'instantané du volume associé au PersistentVolumeClaim my-pvc :

    kubectl apply -f - <<EOF
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: my-snapshot
    spec:
      volumeSnapshotClassName: my-snapshotclass
      source:
        persistentVolumeClaimName: my-pvc
    EOF
    
  3. Vérifiez que le contenu de l'instantané de volume est créé :

    kubectl get volumesnapshotcontents
    

    Le résultat ressemble à ce qui suit :

    NAME                                               READYTOUSE   RESTORESIZE     DELETIONPOLICY   DRIVER                  VOLUMESNAPSHOTCLASS   VOLUMESNAPSHOT   VOLUMESNAPSHOTNAMESPACE   AGE
    snapcontent-e778fde2-5f1c-4a42-a43d-7f9d41d093da   false        2199023255552   Delete           pd.csi.storage.gke.io   my-snapshotclass      my-snapshot      default                   33s
    
  4. Vérifiez que l'instantané est prêt à être utilisé:

    kubectl get volumesnapshot \
      -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
    

    Le résultat ressemble à ce qui suit :

    NAME          READY
    my-snapshot   true
    
  5. Supprimez le fichier de test d'origine hello.txt créé dans le pod postgres-78fc84c9ff-77vx6:

    kubectl exec postgres-78fc84c9ff-77vx6 \
        -- sh -c 'rm /usr/share/data/hello.txt'
    

Restaurer l'instantané de volume

Pour restaurer l'instantané de volume et les données, procédez comme suit:

  1. Créez un PVC qui restaure les données d'un instantané et garantit que le nouveau volume est provisionné dans le même pool de stockage (storage-pools-sc) que le volume d'origine. Appliquez le fichier manifeste suivant :

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-restore
    spec:
      dataSource:
        name: my-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      storageClassName: storage-pools-sc
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 2048Gi
    EOF
    
  2. Mettez à jour le déploiement existant nommé postgres afin qu'il utilise le PVC nouvellement restauré que vous venez de créer. Appliquez le fichier manifeste suivant :

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: postgres
    spec:
      selector:
        matchLabels:
          app: postgres
      template:
        metadata:
          labels:
            app: postgres
        spec:
          nodeSelector:
            cloud.google.com/machine-family: c3
          containers:
          - name: postgres
            image: google/cloud-sdk:slim
            args: [ "sleep", "3600" ]
            volumeMounts:
            - name: sdk-volume
              mountPath: /usr/share/data/
          volumes:
          - name: sdk-volume
            persistentVolumeClaim:
              claimName: pvc-restore
    EOF
    
  3. Obtenez le nom du pod que vous venez de créer et qui fait partie du déploiement postgres:

    kubectl get pods -l app=postgres
    

    Le résultat ressemble à ce qui suit :

    NAME                         READY   STATUS        RESTARTS   AGE
    postgres-59f89cfd8c-42qtj   1/1     Running       0          40s
    
  4. Vérifiez que le fichier hello.txt, qui avait été supprimé précédemment, existe désormais dans le nouveau pod (postgres-59f89cfd8c-42qtj) après avoir restauré le volume à partir de l'instantané :

    kubectl exec postgres-59f89cfd8c-42qtj \
     -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

    Cela valide que le processus d'instantané et de restauration a bien été effectué et que les données de l'instantané ont été restaurées sur le nouveau PV accessible au pod.

  5. Vérifiez que le volume créé à partir de l'instantané se trouve dans votre pool de stockage:

    kubectl get pvc pvc-restore
    

    Le résultat ressemble à ce qui suit :

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    pvc-restore   Bound    pvc-b287c387-bc51-4100-a00e-b5241d411c82   2Ti        RWO            storage-pools-sc   2m24s
    
  6. Vérifiez si le nouveau volume est provisionné comme indiqué dans votre StorageClass et votre PVC :

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    Le résultat ressemble à ce qui suit, où vous pouvez voir le nouveau volume pvc-b287c387-bc51-4100-a00e-b5241d411c82 provisionné dans le même pool de stockage.

    
    NAME                                      STATUS  PROVISIONED_IOPS  PROVISIONED_THROUGHPUT  SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  READY   3000              140                     2048
    pvc-b287c387-bc51-4100-a00e-b5241d411c82  READY   3000              140                     2048
    

    Cela garantit que le volume restauré bénéficie des ressources et des fonctionnalités partagées du pool.

Migrer des volumes existants vers un pool de stockage

Utilisez un instantané et une restauration pour migrer des volumes situés en dehors d'un pool de stockage vers un pool de stockage.

Assurez-vous que les conditions suivantes sont remplies :

  • Votre nouvelle ressource PVC pvc-restore fait référence à une ressource StorageClass qui spécifie le paramètre storage-pools, pointant vers le pool de stockage dans lequel vous souhaitez déplacer le volume.
  • Le PV source dont vous créez une image doit être associé à un PVC avec une StorageClass qui ne spécifie pas le paramètre storage-pools.

Après avoir effectué la restauration à partir d'un instantané sur un nouveau volume, vous pouvez supprimer le PVC et le PV sources.

Effectuer un nettoyage

Pour éviter que des frais ne soient facturés sur votre compte Google Cloud, supprimez les ressources de stockage que vous avez créées dans ce guide. Commencez par supprimer tous les disques du pool de stockage, puis supprimez le pool de stockage.

Supprimer le disque de démarrage

Lorsque vous supprimez un nœud (en procédant à un scaling à la baisse du pool de nœuds) ou un pool de nœuds entier, les disques de démarrage associés sont automatiquement supprimés. Vous pouvez également supprimer le cluster pour supprimer automatiquement les disques de démarrage de tous les pools de nœuds qu'il contient.

Pour en savoir plus, consultez les pages suivantes :

Supprimer le disque associé

Pour supprimer le disque associé provisionné dans un pool de stockage Hyperdisk :

  1. Supprimez le pod qui utilise le PVC :

    kubectl delete deployments postgres
    
  2. Supprimez le PVC qui utilise la StorageClass du pool de stockage Hyperdisk.

    kubectl delete pvc my-pvc
    

    Confirmez que le PVC pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 a été supprimé:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

Supprimer le pool de stockage Hyperdisk

Supprimez le pool de stockage Hyperdisk à l'aide de la commande suivante:

gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project

Étape suivante