Dans Google Kubernetes Engine (GKE) version 1.24 ou ultérieure, vous pouvez utiliser la fonctionnalité d'expansion de volume Kubernetes pour modifier la capacité d'un volume persistant après sa création.
Pour en savoir plus sur l'expansion de volume, consultez la documentation Kubernetes Open Source.
Prérequis
Pour utiliser l'expansion de volume, vous devez remplir les conditions préalables suivantes :
- Si le volume que vous souhaitez redimensionner est géré par un pilote CSI :
- Assurez-vous que la version du cluster GKE est 1.16 ou ultérieure. Si le cluster comporte des pools de nœuds Windows, assurez-vous que la version du cluster GKE est 1.18 ou ultérieure. Si vous utilisez le pilote CSI GKE Filestore géré, la version du cluster doit être 1.21 ou ultérieure.
- Consultez la documentation de votre fournisseur de stockage pour vérifier que votre pilote CSI est compatible avec l'expansion de volume. Le pilote CSI de disque persistant Compute Engine et le pilote CSI Filestore sont compatibles avec l'expansion de volume.
- Si le volume que vous souhaitez redimensionner est géré par un plug-in de volume "in-tree" :
- Assurez-vous que la version du cluster GKE est 1.11 ou ultérieure. Bien que les versions de cluster GKE 1.11-1.14 soient compatibles avec l'expansion des volumes gérés par des plug-ins "in-tree", elles nécessitent l'arrêt et la recréation de tous les pods utilisant le volume.
- Consultez la documentation de votre fournisseur de stockage pour vérifier que votre plug-in de volume "in-tree" est compatible avec l'expansion de volume (c'est le cas du plug-in du disque persistant Compute Engine).
Utiliser l'expansion de volume
Pour utiliser l'expansion de volume, procédez comme suit :
Ajoutez le champ
allowVolumeExpansion: true
à votre StorageClass, si celle-ci ne le contient pas déjà. Exemple :apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: my.driver ... allowVolumeExpansion: true
Demandez une modification de la capacité du volume en modifiant le champ
spec.resources.requests.storage
de votre PersistentVolumeClaim.kubectl edit pvc pvc-name
Par exemple, vous pouvez modifier la PVC suivante, qui possède un disque de 30 gibioctets (Gio), de sorte qu'elle ait un disque de 40 Gio.
Avant la modification :
# pvc-demo.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-demo spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi
Après la modification :
# pvc-demo.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-demo spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi
Pour vérifier la modification, affichez la PVC. Pour afficher la PVC, exécutez la commande suivante :
kubectl get pvc pvc-name -o yaml
À terme, le nouveau volume devrait s'afficher dans le champ
status.capacity
. Exemple :... spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi storageClassName: standard volumeMode: Filesystem volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c status: accessModes: - ReadWriteOnce capacity: storage: 40Gi ...
Si la capacité d'un PersistentVolume est modifiée directement, cela peut entraîner l'erreur du système de fichiers de conteneur. Pour résoudre ces problèmes, consultez la section Résoudre les problèmes liés aux modifications d'expansion de volume.
Gérer les extensions de volume dans les StatefulSets
Si vous devez augmenter la taille des volumes utilisés par les pods dans un StatefulSet dans Kubernetes, vous devez ajuster le champ spec.resources.requests.storage
des PersistentVolumeClaims (PVC) associés aux pods. Toute tentative de modification du champ volumeClaimTemplates
directement dans l'objet StatefulSet génère une erreur.
En outre, si vous augmentez le nombre d'instances répliquées de l'objet StatefulSet, des PVC de la taille d'origine sont tout de même créées. Pour modifier définitivement la taille des volumes provisionnés pour les pods gérés par le StatefulSet, vous devez supprimer et recréer l'objet StatefulSet avec la taille mise à jour spécifiée dans le champ volumeClaimTemplates
.
Gardez à l'esprit que ce processus entraînera la suppression des anciens pods et des PVC correspondantes. Selon ReclaimPolicy
, le stockage sous-jacent peut également être supprimé.
Vous pouvez effectuer les étapes suivantes pour maintenir les pods d'origine opérationnels tout en ajustant le StatefulSet afin de provisionner les futures instances dupliquées avec la nouvelle taille de volume.
Enregistrez le StatefulSet existant dans un fichier :
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
Supprimez l'objet StatefulSet du cluster tout en conservant les pods s'exécutant en tant que pods autonomes :
kubectl delete sts statefulset-name --cascade=orphan
Modifiez la nouvelle taille de stockage du volume dans le fichier
sts-backup.yaml
enregistré localement, en particulier la valeur despec.volumeClaimTemplates.spec.resources.requests.storage
.Recréez le StatefulSet dans le cluster :
kubectl apply -f sts-backup.yaml
Étapes suivantes
- En savoir plus sur les volumes.
- Découvrez comment redimensionner des volumes persistants à l'aide de Kubernetes.