Utilizzo dell'espansione del volume


In Google Kubernetes Engine (GKE) versione 1.24 o successive, puoi utilizzare la funzionalità di espansione del volume di Kubernetes per modificare la capacità di un volume permanente dopo la sua creazione.

Per ulteriori informazioni sull'espansione del volume, consulta la documentazione open source.

Prerequisiti

L'espansione del volume ha i seguenti prerequisiti:

  • Se il volume che vuoi ridimensionare è gestito da un driver CSI:
    • Assicurati che la versione del cluster GKE sia 1.16 o successiva. Se il cluster ha pool di nodi Windows, assicurati che la versione del cluster GKE sia 1.18 o successiva. Se utilizzi il driver CSI GKE Filestore gestito, la versione del cluster deve essere 1.21 o successiva.
    • Controlla la documentazione del fornitore di spazio di archiviazione per verificare che il driver CSI supporti l'espansione del volume. Il driver CSI per il disco permanente di Compute Engine e il driver CSI Filestore supportano l'espansione del volume.
  • Se il volume che vuoi ridimensionare è gestito da un plug-in di volume integrato:
    • Assicurati che la versione del cluster GKE sia 1.11 o successiva. Anche se le versioni dei cluster GKE 1.11-1.14 supportano l'espansione di volumi gestiti da plug-in in-tree, richiedono di terminare e ricreare tutti i pod che utilizzano il volume per completare l'espansione del volume.
    • Controlla la documentazione del fornitore dello spazio di archiviazione per verificare che il plug-in di volume in-tree supporti l'espansione del volume, mentre il plug-in Persistent Disk di Compute Engine sì.

Utilizzo dell'espansione del volume

Per utilizzare l'espansione del volume, esegui le seguenti attività:

  1. Aggiungi allowVolumeExpansion: true al tuo oggetto StorageClass, se questo non ha già questo campo. Ad esempio:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    provisioner: my.driver
    ...
    allowVolumeExpansion: true
    
  2. Richiedi una variazione della capacità del volume modificando il campo spec.resources.requests.storage dell'oggetto PersistentVolumeClaim.

     kubectl edit pvc pvc-name
    

    Ad esempio, puoi modificare il seguente PVC da un disco da 30 gigabyte (GiB) a un disco da 40 GiB.

    Prima della modifica:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 30Gi
    

    Dopo la modifica:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 40Gi
    
  3. Verifica la modifica visualizzando il PVC. Per visualizzare la PVC, esegui questo comando:

    kubectl get pvc pvc-name -o yaml
    

    Alla fine dovresti vedere il nuovo volume nel campo status.capacity. Ad esempio:

    ...
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 40Gi
      storageClassName: standard
      volumeMode: Filesystem
      volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c
    status:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 40Gi
    ...
    

Se la capacità di un PersistentVolume viene modificata direttamente, questo potrebbe causare un errore nel file system del container. Per risolvere questi problemi, consulta la pagina Risolvere i problemi relativi alle modifiche all'espansione del volume.

Gestione delle espansioni di volume negli StatefulSet

Se devi aumentare le dimensioni dei volumi utilizzati dai pod all'interno di uno StatefulSet in Kubernetes, devi modificare il campo spec.resources.requests.storage degli oggetti PersistentVolumeClaim (PVC) associati ai pod. Se provi a modificare il campo volumeClaimTemplates direttamente nell'oggetto StatefulSet, si verificherà un errore.

Inoltre, se aumenti il numero di repliche dello StatefulSet, verranno comunque create PVC delle dimensioni originali. Per modificare definitivamente le dimensioni dei volumi di cui è stato eseguito il provisioning per i pod gestiti dallo StatefulSet, devi eliminare e ricreare l'oggetto StatefulSet con la dimensione aggiornata specificata nel campo volumeClaimTemplates. Tieni presente che questo processo comporterà l'eliminazione dei pod precedenti e delle PVC corrispondenti. A seconda dell'ReclaimPolicy, potrebbe essere eliminato anche lo spazio di archiviazione sottostante.

Puoi eseguire i passaggi riportati di seguito per mantenere i pod originali in esecuzione e regolare lo StatefulSet per il provisioning delle repliche future con la nuova dimensione del volume.

  1. Salva lo StatefulSet esistente in un file:

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. Rimuovi l'oggetto StatefulSet dal cluster mantenendo i pod in esecuzione come pod autonomi:

    kubectl delete sts statefulset-name --cascade=orphan
    
  3. Modifica la nuova dimensione dell'archiviazione del volume nel file sts-backup.yaml salvato localmente, in particolare il valore spec.volumeClaimTemplates.spec.resources.requests.storage

  4. Ricrea lo StatefulSet nel cluster:

    kubectl apply -f sts-backup.yaml
    

Passaggi successivi