Faire évoluer votre stockage Managed Lustre sur GKE

Ce document explique comment augmenter dynamiquement la capacité de stockage des volumes Lustre gérés pour vos charges de travail avec état dans Google Kubernetes Engine (GKE) sans perturber vos applications.

Par exemple, si vos jobs d'entraînement d'IA/ML de longue durée ont des besoins de stockage dynamiques et imprévisibles, activez l'expansion de volume Managed Lustre pour augmenter la capacité de stockage de votre PersistentVolume (PV) Managed Lustre existant.

Ce document s'adresse aux administrateurs et opérateurs de plate-forme, aux administrateurs DevOps et de stockage, ainsi qu'aux ingénieurs en machine learning (ML) qui gèrent le stockage des charges de travail avec état sur GKE.

Lorsque vous augmentez la taille d'un volume, vos coûts augmentent en fonction de la nouvelle capacité, conformément à la tarification standard deGoogle Cloud Managed Lustre.

Avant de commencer

Préparez votre environnement.

Conditions requises

Assurez-vous de remplir les conditions suivantes :

  • Vous devez disposer d'un cluster GKE version 1.35.0-gke.2331000 ou ultérieure.
  • Vous devez activer le pilote CSI Lustre géré sur un cluster existant. Le pilote est désactivé par défaut dans les clusters Standard et Autopilot.

Limites

  • Vous ne pouvez qu'augmenter la taille d'un volume existant, et non la réduire.
  • Vous ne pouvez pas utiliser l'expansion de volume avec le mode d'accès ReadOnlyMany.
  • Lorsque vous redimensionnez des volumes Lustre, respectez les limites de capacité minimale et maximale, ainsi que les tailles de pas définies par le niveau de performances de votre volume. Pour en savoir plus, consultez Considérations sur les performances.
  • Spécifiez la taille des volumes Lustre en Gio, sous forme de multiples de 1 000. Kubernetes traduit les unités telles que Ti en valeurs binaires (par exemple, 18 Ti sont interprétés comme 18 432 GiB), ce qui entraîne le rejet de la requête par l'API Lustre.

Activer l'expansion de volume pour une StorageClass

  1. Vérifiez si votre StorageClass est compatible avec l'expansion de volume :

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    

    Remplacez STORAGECLASS_NAME par le nom de votre StorageClass.

    Si la commande ne renvoie rien ou renvoie false, vous devez mettre à jour explicitement la configuration StorageClass pour autoriser l'expansion.

  2. Ouvrez la configuration StorageClass pour la modifier :

    kubectl edit storageclass STORAGECLASS_NAME
    
  3. Dans l'éditeur, ajoutez le champ allowVolumeExpansion: true à la configuration de votre StorageClass :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: lustre-sc
    provisioner: lustre.csi.storage.gke.io
    ...
    allowVolumeExpansion: true

Développer un PersistentVolumeClaim

Pour lancer l'expansion du volume, modifiez votre PersistentVolumeClaim (PVC) afin de demander une augmentation de la taille du volume.

  1. Identifiez la nouvelle taille valide pour l'expansion, comme décrit dans Déterminer les tailles d'expansion valides.
  2. Ouvrez la configuration du PVC pour la modifier :

    kubectl edit pvc PVC_NAME
    

    Remplacez PVC_NAME par le nom de votre PVC.

  3. Dans l'éditeur, mettez à jour le champ spec.resources.requests.storage avec la taille d'expansion valide. Par exemple, pour étendre un volume de 9000Gi à 18000Gi, modifiez le champ storage comme suit :

    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 18000Gi # Changed from 9000Gi
    

Vérifier l'expansion du volume

  1. Surveillez la progression de l'expansion en examinant les événements du PVC :

    kubectl describe pvc PVC_NAME
    

    Les événements suivants dans la sortie du PVC indiquent la progression ou le résultat actuel de la demande d'expansion de volume :

    • ExternalExpanding : indique que Kubernetes attend que le external-resizer développe le PVC.
    • Resizing : indique que l'opération de redimensionnement est en cours. Cette opération peut prendre jusqu'à 90 minutes pour les augmentations de capacité plus importantes.
    • VolumeResizeSuccessful : confirme que le volume a bien été étendu.
    • VolumeResizeFailed : indique qu'une erreur s'est produite. Le message d'événement contient des informations provenant de l'API Google Cloud Managed Lustre. Cet état peut être temporaire et se résoudre de lui-même.
  2. Une fois l'expansion terminée, vérifiez la configuration mise à jour du PVC :

    kubectl get pvc PVC_NAME -o yaml
    
  3. Assurez-vous que le champ status.capacity reflète la nouvelle taille incrémentée.

Si vous rencontrez des problèmes lors de l'expansion, consultez la section Dépannage.

Déterminer les tailles d'expansion valides

Pour déterminer la nouvelle taille de votre volume, commencez par identifier son niveau de performances et la taille de pas correspondante.

Identifier le niveau de performances du volume

Vous pouvez trouver le niveau de performances de votre volume à l'aide de l'une des options suivantes :

StorageClass

Exécutez la commande suivante et recherchez la valeur perUnitStorageThroughput (par exemple, 1000). Cette valeur indique le niveau de performances en Mo/s par TiB.

kubectl get sc STORAGECLASS_NAME -o yaml

Remplacez STORAGECLASS_NAME par le nom de votre StorageClass.

Instance Lustre

Pour identifier le niveau de performances de votre volume, vérifiez directement les propriétés de l'instance Managed Lustre sous-jacente :

  1. Recherchez le nom du PV associé à votre PVC :

    kubectl get pvc PVC_NAME
    

    Remplacez PVC_NAME par le nom de votre PVC.

    Le résultat renvoyé ressemble à ceci : Notez le nom de la PV dans la colonne VOLUME (par exemple, pv-lustre).

    NAME         STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    pvc-lustre   Bound    pv-lustre   9000Gi     RWX            lustre-rwx     <unset>                 26m
    
  2. Recherchez l'emplacement et le nom de l'instance du volume dans le champ volumeHandle :

    kubectl get pv PV_NAME -o yaml
    

    Remplacez PV_NAME par le nom du PV obtenu à l'étape précédente.

    La valeur volumeHandle est au format PROJECT_ID/LOCATION/INSTANCE_NAME. Notez les valeurs INSTANCE_NAME et LOCATION pour l'étape suivante.

  3. Vérifiez les propriétés du niveau de performances en décrivant l'instance Managed Lustre :

    gcloud lustre instances describe INSTANCE_NAME --location=LOCATION
    

    Remplacez INSTANCE_NAME et LOCATION par les valeurs de l'étape précédente.

    Dans le résultat, recherchez le champ perUnitStorageThroughput. Cette valeur indique le niveau de performances en Mo/s par Tio.

Limites de capacité et tailles de pas

Une fois que vous avez identifié le niveau de performances, consultez le tableau suivant pour connaître les limites de capacité associées et la taille de pas requise.

Niveau (perUnitStorageThroughput) Capacité minimale Capacité maximale Taille de pas
1 000 MBps par Tio 9 000 Gio 954 000 Gio (~1 Pio) 9 000 Gio
500 MBps par Tio 18 000 Gio 1 908 000 Gio (~2 Pio) 18 000 Gio
250 MBps par Tio 36 000 Gio 3 816 000 Gio (~4 Pio) 36 000 Gio
125 MBps par Tio 72 000 Gio 7 632 000 Gio (~8 Pio) 72 000 Gio

Les volumes doivent être augmentés en fonction de la taille de pas attribuée à leur niveau. Toute augmentation de la capacité doit être un multiple de cette taille de pas spécifique. Par exemple, si votre volume de niveau 1 000 MBps a une capacité de 9 000 Gio, vous pouvez l'augmenter à 18 000 Gio, 27 000 Gio et d'autres multiples.

Dépannage

Cette section fournit des solutions aux problèmes courants que vous pouvez rencontrer lorsque vous développez des volumes Lustre.

L'élargissement échoue et affiche une erreur "Argument incorrect"

Problème constaté

  • Le PVC passe à l'état Resizing, mais échoue ensuite.
  • Lorsque vous exécutez la commande kubectl describe pvc PVC_NAME, une erreur semblable à VolumeResizeFailed: rpc error: code = InvalidArgument desc = ... s'affiche.

Cause

Cette erreur signifie généralement que la taille de stockage demandée n'est pas valide pour le niveau de performances du volume Lustre pour l'une des raisons suivantes :

  • La taille demandée n'est pas un multiple de la taille d'incrément requise pour le niveau.
  • La taille demandée est inférieure à la capacité minimale ou supérieure à la capacité maximale pour le niveau.

Solution

  1. Consultez Limites de capacité et tailles de pas pour connaître les tailles de pas et les limites de capacité valides pour le niveau de performances de votre volume.
  2. Modifiez à nouveau la PVC pour demander une taille de stockage valide qui respecte la taille de pas et les limites de capacité.

L'expansion échoue et affiche une "erreur interne"

Problème constaté

  • Le redimensionnement du PVC échoue.
  • Lorsque vous exécutez la commande kubectl describe pvc PVC_NAME, un événement VolumeResizeFailed peut s'afficher avec un message d'erreur contenant code = Internal.

Cause

Cette erreur indique un problème avec le service Managed Lustre sous-jacent.

Solution

  1. Réessayez l'expansion en appliquant à nouveau le fichier manifeste du PVC avec la nouvelle taille demandée. Cela peut résoudre les problèmes temporaires de backend.
  2. Si la nouvelle tentative échoue, contactez Cloud Customer Care.

L'expansion est bloquée à l'état "Redimensionnement"

Problème constaté

  • Le PVC reste à l'état Resizing pendant une période prolongée (plus de 30 minutes pour les expansions plus petites ou plus de 90 minutes pour les expansions plus importantes).
  • Un événement VolumeResizeFailed peut s'afficher avec un message d'erreur DEADLINE_EXCEEDED.

Cause

Ce problème peut se produire en cas d'augmentation importante de la capacité, qui peut prendre jusqu'à 90 minutes. Le composant csi-external-resizer peut expirer en attendant la réponse de l'API Google Cloud Managed Lustre, même si l'opération d'expansion sous-jacente est toujours en cours.

Solution

  • csi-external-resizer réessaie automatiquement l'opération après un délai de répit. Continuez à surveiller les événements PVC pour un événement VolumeResizeSuccessful.
  • Si le PVC reste à l'état Resizing pendant plus de 90 minutes, contactez l'assistance Cloud Customer Care.

L'expansion ne démarre pas ou est bloquée dans l'état ExternalExpanding

Problème constaté

  • Vous mettez à jour le champ spec.resources.requests.storage de votre PVC, mais son état ne passe pas à Resizing.
  • Lorsque vous exécutez la commande kubectl describe pvc PVC_NAME, le journal des événements n'affiche que l'état ExternalExpanding et ne passe pas à l'état Resizing :
Events:
  Type    Reason             Age                From             Message
  ----    ------             ----               ----             -------
  Normal  ExternalExpanding  21m (x2 over 58m)  volume_expand    waiting for an external controller to expand this PVC

Cause

Cela indique généralement l'un des problèmes suivants :

  • La StorageClass associée au PVC n'autorise pas l'expansion de volume.
  • Le conteneur side-car csi-external-resizer, qui est le composant chargé de lancer l'expansion, rencontre un problème.

Solution

  1. Vérifiez la configuration StorageClass et assurez-vous que le champ allowVolumeExpansion: true est défini :

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    
  2. Si allowVolumeExpansion est manquant ou défini sur false, mettez à jour la StorageClass pour autoriser l'expansion de volume.

  3. Si la StorageClass est correctement configurée, le problème est probablement lié aux composants du plan de contrôle GKE qui gèrent l'opération de redimensionnement. Contactez l'assistance Cloud Customer Care pour obtenir de l'aide.

L'expansion échoue en raison d'un problème de quota ou de capacité

Problème constaté

  • Le redimensionnement du PVC échoue et un événement VolumeResizeFailed s'affiche sur le PVC.
  • Lorsque vous exécutez la commande kubectl describe pvc PVC_NAME, le message d'événement du backend Managed Lustre indique un problème de quota ou de capacité.

Cause

La demande d'extension valide ne peut pas être traitée, car elle dépasse la capacité ou le quota global disponible pour le service Managed Lustre dans votre projet ou votre région.

Solution

  • Modifiez à nouveau votre PVC et demandez une augmentation de stockage plus petite.
  • Contactez l'administrateur Google Cloud de votre organisation pour demander une augmentation des quotas de service Lustre globaux ou de la capacité de votre projet.

Effectuer un nettoyage

Pour éviter que les ressources utilisées dans ce document soient facturées sur votre compte Google Cloud , supprimez le PVC. Cette opération supprime également le PV associé et l'instance Managed Lustre sous-jacente si reclaimPolicy est défini sur Delete.

kubectl delete pvc PVC_NAME

Remplacez PVC_NAME par le nom de votre PVC.

Étapes suivantes