Faire évoluer les performances du stockage avec Hyperdisk


Le pilote CSI de disque persistant Compute Engine est le principal moyen d'accéder au stockage Hyperdisk avec les clusters GKE.

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.

Conditions requises

Pour utiliser des volumes Hyperdisk dans GKE, vos clusters doivent répondre aux exigences suivantes :

  • Utilisez des clusters Linux exécutant la version 1.26 ou une version ultérieure de GKE. Si vous utilisez une version disponible, assurez-vous que le canal dispose de la version minimale de GKE requise pour ce pilote ou d'une version 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é ou modifié avec l'utilisation d'Autopilot. Si vous devez ajouter ou supprimer manuellement de votre cluster le pilote CSI de disque persistant Compute Engine, consultez la page Activer le pilote CSI de disque persistant Compute Engine sur un cluster existant.

Créer un volume Hyperdisk pour GKE

Cette section explique comment créer un volume Hyperdisk reposant sur le pilote CSI Compute Engine dans GKE.

Créer une StorageClass

Les champs Type du stockage sur disque persistant suivants sont fournis par le pilote CSI de disque persistant Compute Engine pour la prise en charge d'Hyperdisk :

  • hyperdisk-balanced
  • hyperdisk-throughput
  • hyperdisk-extreme

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 de l'approvisionneur et spécifiez l'un des types de stockage Hyperdisk.

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 de la 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ètres 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.

Les exemples suivants montrent comment créer une StorageClass pour chaque type de volume Hyperdisk :

Volume Hyperdisk équilibré

  1. Enregistrez le fichier manifeste suivant dans un fichier nommé hdb-example-class.yaml :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
    
  2. Créez la StorageClass :

    kubectl create -f hdb-example-class.yaml
    

Hyperdisk Throughput

  1. Enregistrez le fichier manifeste suivant dans un fichier nommé hdt-example-class.yaml :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: throughput-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-throughput
      provisioned-throughput-on-create: "50Mi"
    
  2. Créez la StorageClass :

    kubectl create -f hdt-example-class.yaml
    

Hyperdisk Extreme

  1. Enregistrez le fichier manifeste suivant dans un fichier nommé hdx-example-class.yaml :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: extreme-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-extreme
      provisioned-iops-on-create: "50000"
    
  2. Créez la StorageClass :

    kubectl create -f hdx-example-class.yaml
    

Pour trouver le nom des StorageClasses disponibles dans votre cluster, exécutez la commande suivante :

kubectl get sc

Créer une PersistentVolumeClaim

Vous pouvez créer une PersistentVolumeClaim qui fait référence à la StorageClass du pilote CSI de disque persistant Compute Engine.

Volume Hyperdisk équilibré

Dans cet exemple, vous spécifiez une capacité de stockage ciblée de 20 Gio pour le volume Hyperdisk Balanced.

  1. Enregistrez le fichier manifeste suivant de la PersistentVolumeClaim dans un fichier nommé pvc-example.yaml :

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: balanced-storage
      resources:
        requests:
          storage: 20Gi
    
  2. Appliquez la PersistentVolumeClaim qui fait référence à la StorageClass que vous avez créée à partir de l'exemple précédent :

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Throughput

Dans cet exemple, vous spécifiez une capacité de stockage ciblée de 2 Tio pour le volume Hyperdisk Throughput.

  1. Enregistrez le fichier manifeste de PersistentVolumeClaim suivant dans un fichier nommé pvc-example.yaml :

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: throughput-storage
      resources:
        requests:
          storage: 2Ti
    
  2. Appliquez la PersistentVolumeClaim qui fait référence à la StorageClass que vous avez créée à partir de l'exemple précédent :

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Extreme

Dans cet exemple, vous spécifiez une capacité de stockage minimale de 64 Gio pour le volume Hyperdisk Extreme.

  1. Enregistrez le fichier manifeste de PersistentVolumeClaim suivant dans un fichier nommé pvc-example.yaml :

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: extreme-storage
      resources:
        requests:
          storage: 64Gi
    
  2. Appliquez la PersistentVolumeClaim qui fait référence à la StorageClass que vous avez créée à partir de l'exemple précédent :

    kubectl apply -f pvc-example.yaml
    

Créer un objet Deployment pour consommer le volume Hyperdisk

Lorsque vous utilisez des pods avec des objets PersistentVolume, nous vous recommandons d'utiliser un contrôleur de charge de travail (tel que Deployment ou StatefulSet).

  1. L'exemple suivant crée un fichier manifeste qui configure un pod pour déployer un serveur Web Nginx à l'aide de la PersistentVolumeClaim créée dans la section précédente. Enregistrez l'exemple de fichier manifeste suivant sous le nom hyperdisk-example-deployment.yaml :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-deployment
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /var/lib/www/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: podpvc
              readOnly: false
    
  2. Pour créer un objet Deployment basé sur le fichier manifeste hyperdisk-example-deployment.yaml, exécutez la commande suivante :

    kubectl apply -f hyperdisk-example-deployment.yaml
    
  3. Vérifiez que le déploiement a bien été créé :

    kubectl get deployment
    

    Le provisionnement des instances Hyperdisk peut prendre quelques minutes. Une fois le déploiement terminé, il renvoie l'état READY.

  4. Vous pouvez vérifier la progression en surveillant l'état de votre PersistentVolumeClaim avec la commande suivante :

    kubectl get pvc
    

Provisionner un volume Hyperdisk à partir d'un instantané

Pour créer un volume Hyperdisk à partir d'un instantané de disque persistant existant, utilisez la console Google Cloud, Google Cloud CLI ou l'API Compute Engine. Pour savoir comment créer un instantané de disque persistant, consultez la page Créer et utiliser des instantanés de volume.

Console

  1. Accédez à la page Disques dans la console Google Cloud.

    Accéder à la page Disques

  2. Cliquez sur Créer un disque.

  3. Sous Type de disque, choisissez l'une des options suivantes pour le type de disque :

    • Volume Hyperdisk équilibré
    • Hyperdisk Extreme
    • Hyperdisk Throughput
  4. Sous Type de source du disque, cliquez sur Instantané.

  5. Sélectionnez le nom de l'instantané à restaurer.

  6. Sélectionnez la taille du nouveau disque en Gio. Ce nombre doit être supérieur ou égal au disque source d'origine de l'instantané.

  7. Définissez le débit provisionné ou les IOPS provisionnées que vous souhaitez pour le disque, si ces valeurs diffèrent des valeurs par défaut.

  8. Cliquez sur Créer pour créer le volume Hyperdisk.

gcloud

Exécutez la commande gcloud compute disks create pour créer le volume Hyperdisk à partir d'un instantané.

Volume Hyperdisk équilibré

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-balanced

Remplacez les éléments suivants :

  • DISK_NAME : le nom du nouveau disque.
  • SIZE : taille du nouveau disque, exprimée en gibioctets (Gio) ou en tébioctets (Tio). Pour prendre connaissance des limites de capacité actualisées, consultez la documentation Compute Engine.
  • SNAPSHOT_NAME : nom de l'instantané qui va être restauré.
  • THROUGHPUT_LIMIT : facultatif. Pour les disques Hyperdisk Balanced, il s'agit d'un entier représentant le débit que le disque peut gérer, mesuré en Mio/s. Pour prendre connaissance des limites actualisées, consultez la documentation Compute Engine.
  • IOPS_LIMIT : facultatif. Pour les disques Hyperdisk Balanced, il s'agit du nombre d'IOPS que le disque peut gérer. Pour prendre connaissance des limites de performances actualisées, consultez la documentation Compute Engine.

Hyperdisk Throughput

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --type=hyperdisk-throughput

Remplacez les éléments suivants :

  • DISK_NAME : le nom du nouveau disque.
  • SIZE : la taille, en gibioctets (Gio ou Go) ou en tébioctets (Tio ou To), du nouveau disque. Pour prendre connaissance des limites de capacité actualisées, consultez la documentation Compute Engine.
  • SNAPSHOT_NAME : nom de l'instantané qui va être restauré.
  • THROUGHPUT_LIMIT (facultatif) : pour les disques Hyperdisk Throughput, il s'agit d'un entier représentant le débit que le disque peut gérer, mesuré en Mio/s. Pour prendre connaissance des limites de performances actualisées, consultez la documentation Compute Engine.

Hyperdisk Extreme

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-iops

Remplacez les éléments suivants :

  • DISK_NAME : le nom du nouveau disque.
  • SIZE : la taille, en gibioctets (Gio ou Go) ou en tébioctets (Tio ou To), du nouveau disque. Pour prendre connaissance des limites de capacité actualisées, consultez la documentation Compute Engine.
  • SNAPSHOT_NAME : nom de l'instantané qui va être restauré.
  • IOPS_LIMIT : Facultatif : pour les disques Hyperdisk Extreme, il s'agit du nombre d'opérations d'E/S par seconde que le disque peut gérer. Pour prendre connaissance des limites de performances actualisées, consultez la documentation Compute Engine.

Créer un instantané pour un volume Hyperdisk

Pour créer un instantané à partir d'un volume Hyperdisk, suivez la même procédure que pour créer un instantané à partir d'un volume de disque persistant :

Mettre à jour le débit ou les IOPS provisionnés d'un volume Hyperdisk existant

Cette section explique comment modifier les performances provisionnées des volumes Hyperdisk.

Débit

La mise à jour du débit provisionné n'est acceptée que pour les volumes Hyperdisk Balanced et Hyperdisk Throughput.

Pour mettre à jour le niveau de débit provisionné pour votre volume Hyperdisk, suivez les instructions fournies pour la console Google Cloud, la gcloud CLI ou l'API Compute Engine sur la page Modifier les performances provisionnées d'un volume Hyperdisk.

Vous pouvez modifier le niveau de débit provisionné (jusqu'à une fois toutes les 4 heures) pour un volume Hyperdisk après la création du volume. La prise en compte des nouveaux niveaux de débit peut prendre jusqu'à 15 minutes. Lors de la modification des performances, les contrats de niveau de service et les SLO applicables aux performances ne sont pas effectifs. Vous pouvez modifier le niveau de débit d'un volume existant à tout moment, que le disque soit associé à une instance en cours d'exécution ou non.

Le nouveau niveau de débit que vous spécifiez doit respecter les valeurs acceptées pour les volumes Hyperdisk.

IOPS

La mise à jour des IOPS provisionnées n'est acceptée que pour les volumes Hyperdisk Balanced et Hyperdisk Extreme.

Pour mettre à jour le niveau d'IOPS provisionné pour votre volume Hyperdisk, suivez les instructions fournies pour la console Google Cloud, la gcloud CLI ou l'API Compute Engine sur la page Modifier les performances provisionnées d'un volume Hyperdisk.

Vous pouvez modifier le niveau d'IOPS provisionné (jusqu'à une fois toutes les 4 heures) pour un volume Hyperdisk IOPS après la création du volume. La prise en compte des nouveaux niveaux d'IOPS peut prendre jusqu'à 15 minutes. Lors de la modification des performances, les contrats de niveau de service et les SLO applicables aux performances ne sont pas effectifs. Vous pouvez modifier le niveau d'IOPS d'un volume existant à tout moment, que le disque soit associé à une instance en cours d'exécution ou non.

Le nouveau niveau d'IOPS que vous spécifiez doit respecter les valeurs acceptées pour les volumes Hyperdisk.

Pour mettre à jour le niveau d'IOPS provisionné pour un volume Hyperdisk, vous devez identifier le nom du disque persistant sous-jacent à vos ressources PersistentVolumeClaim et PersistentVolume :

  1. Accédez au navigateur d'objets dans la console Google Cloud.

    Accéder au navigateur d'objets

  2. Recherchez l'entrée correspondant à votre objet PersistentVolumeClaim.

  3. Cliquez sur le lien Volume.

  4. Ouvrez l'onglet YAML du PersistentVolume associé. Recherchez la valeur CSI volumeHandle dans cet onglet.

  5. Notez le dernier élément de ce descripteur (il doit avoir une valeur telle que "pvc-XXXXX") : c'est le nom de votre PersistentVolumeClaim. Vous devez également prendre note du projet et de la zone.

Surveiller le débit ou les IOPS sur un volume Hyperdisk

Pour surveiller les performances provisionnées de votre volume Hyperdisk, consultez la section Analyser les IOPS et le débit provisionnés dans la documentation de Compute Engine.

Dépannage

Cette section fournit des conseils de dépannage pour résoudre les problèmes liés aux volumes Hyperdisk sur GKE.

Impossible de modifier les performances ou la capacité : ratio hors plage

L'erreur suivante se produit lorsque vous tentez de modifier le niveau de performances ou les capacités provisionnées, mais que les valeurs que vous avez choisies se situent en dehors de la plage acceptable pour le volume :

  • Requested provisioned throughput cannot be higher than <value>.
  • Requested provisioned throughput cannot be lower than <value>.
  • Requested provisioned throughput is too high for the requested disk size.
  • Requested provisioned throughput is too low for the requested disk size.
  • Requested disk size is too high for current provisioned throughput.

Le débit provisionné pour les volumes Hyperdisk Throughput doit répondre aux exigences suivantes :

  • Au minimum 10 Mio/s par Tio de capacité, mais pas plus de 90 Mio/s par Tio de capacité
  • Jusqu'à 600 Mio/s par volume

Pour résoudre ce problème, corrigez le débit ou la capacité demandés afin que la valeur soit comprise dans la plage autorisée, puis relancez la commande.

Impossible de modifier les performances : débit limité

L'erreur suivante se produit lorsque vous tentez de modifier le niveau de performances provisionné, mais que ce niveau a déjà été modifié au cours des quatre dernières heures :

Cannot update provisioned throughput due to being rate limited.
Cannot update provisioned iops due to being rate limited.

Les performances provisionnées pour des volumes Hyperdisk Throughput et Hyperdisk IOPS peuvent être mises à jour une fois toutes les quatre heures. Pour résoudre ce problème, attendez que la période d'attente du volume soit écoulée, puis exécutez à nouveau la commande.

Étapes suivantes