Utiliser l'expansion de volume


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 :

  1. 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
    
  2. 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
    
  3. 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.

  1. Enregistrez le StatefulSet existant dans un fichier :

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. 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
    
  3. Modifiez la nouvelle taille de stockage du volume dans le fichier sts-backup.yaml enregistré localement, en particulier la valeur de spec.volumeClaimTemplates.spec.resources.requests.storage.

  4. Recréez le StatefulSet dans le cluster :

    kubectl apply -f sts-backup.yaml
    

Étapes suivantes