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
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
Vérifiez si votre StorageClass est compatible avec l'expansion de volume :
kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'Remplacez
STORAGECLASS_NAMEpar 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.Ouvrez la configuration StorageClass pour la modifier :
kubectl edit storageclass STORAGECLASS_NAMEDans 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.
- Identifiez la nouvelle taille valide pour l'expansion, comme décrit dans Déterminer les tailles d'expansion valides.
Ouvrez la configuration du PVC pour la modifier :
kubectl edit pvc PVC_NAMERemplacez
PVC_NAMEpar le nom de votre PVC.Dans l'éditeur, mettez à jour le champ
spec.resources.requests.storageavec la taille d'expansion valide. Par exemple, pour étendre un volume de9000Già18000Gi, modifiez le champstoragecomme suit :spec: accessModes: - ReadWriteOnce resources: requests: storage: 18000Gi # Changed from 9000Gi
Vérifier l'expansion du volume
Surveillez la progression de l'expansion en examinant les événements du PVC :
kubectl describe pvc PVC_NAMELes é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 leexternal-resizerdé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.
Une fois l'expansion terminée, vérifiez la configuration mise à jour du PVC :
kubectl get pvc PVC_NAME -o yamlAssurez-vous que le champ
status.capacityreflè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 :
Recherchez le nom du PV associé à votre PVC :
kubectl get pvc PVC_NAMERemplacez
PVC_NAMEpar 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> 26mRecherchez l'emplacement et le nom de l'instance du volume dans le champ
volumeHandle:kubectl get pv PV_NAME -o yamlRemplacez
PV_NAMEpar le nom du PV obtenu à l'étape précédente.La valeur
volumeHandleest au formatPROJECT_ID/LOCATION/INSTANCE_NAME. Notez les valeursINSTANCE_NAMEetLOCATIONpour l'étape suivante.Vérifiez les propriétés du niveau de performances en décrivant l'instance Managed Lustre :
gcloud lustre instances describe INSTANCE_NAME --location=LOCATIONRemplacez
INSTANCE_NAMEetLOCATIONpar 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
- 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.
- 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énementVolumeResizeFailedpeut s'afficher avec un message d'erreur contenantcode = Internal.
Cause
Cette erreur indique un problème avec le service Managed Lustre sous-jacent.
Solution
- 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.
- 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
Resizingpendant 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
VolumeResizeFailedpeut s'afficher avec un message d'erreurDEADLINE_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-resizerréessaie automatiquement l'opération après un délai de répit. Continuez à surveiller les événements PVC pour un événementVolumeResizeSuccessful.- Si le PVC reste à l'état
Resizingpendant 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.storagede 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'étatExternalExpandinget ne passe pas à l'étatResizing:
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
Vérifiez la configuration StorageClass et assurez-vous que le champ
allowVolumeExpansion: trueest défini :kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'Si
allowVolumeExpansionest manquant ou défini surfalse, mettez à jour la StorageClass pour autoriser l'expansion de volume.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
VolumeResizeFaileds'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
- En savoir plus sur le stockage pour les clusters GKE
- Consultez la documentation sur les volumes persistants et le provisionnement GKE.