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 di Kubernetes open source.

Prerequisiti

L'espansione del volume presenta i seguenti prerequisiti:

  • Se il volume di cui vuoi ridimensionare le dimensioni è 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 Filestore GKE gestito, la versione del cluster deve essere 1.21 o successiva.
    • Consulta 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 per Filestore supportano l'espansione del volume.
  • Se il volume che vuoi ridimensionare è gestito da un plug-in del volume in-tree:
    • Assicurati che la versione del cluster GKE sia 1.11 o successiva. Sebbene le versioni del cluster GKE 1.11-1.14 supportino l'espansione dei volumi gestiti dai plug-in in-tree, richiedono che tutti i pod che utilizzano il volume vengano terminati e ricreati per completare l'espansione del volume.
    • Controlla la documentazione del fornitore dello spazio di archiviazione per verificare che il plug-in del volume in-tree supporti l'espansione del volume (il plug-in in-tree del disco permanente Compute Engine lo fa).
  • Non puoi utilizzare l'espansione del volume quando utilizzi la modalità di accesso ReadOnlyMany.

Utilizzo dell'espansione del volume

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

  1. Aggiungi allowVolumeExpansion: true a StorageClass, se StorageClass non ha già il campo. Ad esempio:

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

     kubectl edit pvc pvc-name
    

    Ad esempio, potresti modificare il seguente PVC in modo che abbia un disco da 40 GiB anziché da 30 GiB.

    Prima di modificare:

     # 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, il file system del contenitore potrebbe non essere corretto. Per risolvere questi problemi, consulta la sezione Risolvere i problemi relativi alle modifiche all'espansione del volume.

Gestione delle espansioni dei volumi in StatefulSet

Se devi aumentare le dimensioni dei volumi utilizzati dai pod all'interno di un StatefulSet in Kubernetes, devi modificare il campo spec.resources.requests.storage dei PersistentVolumeClaim (PVC) associati ai pod. Il tentativo di modificare il campo volumeClaimTemplates direttamente nell'oggetto StatefulSet causerà 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 da StatefulSet, devi eliminare e ricreare l'oggetto StatefulSet con le dimensioni aggiornate specificate nel campo volumeClaimTemplates.

Puoi eseguire i seguenti passaggi per mantenere i pod originali attivi durante la regolazione di StatefulSet per eseguire il provisioning delle repliche future con la nuova dimensione del volume.

  1. Salva l'esistente StatefulSet in un file:

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. Per ogni PersistentVolumeClaim in StatefulSet, apri l'oggetto PersistentVolumeClaim in un editor di testo:

    kubectl edit pvc PVC_NAME
    
  3. Aggiorna il campo spec.resources.requests.storage con le nuove dimensioni del volume, come nel seguente esempio:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    # lines omitted for clarity
    spec:
      resources:
        requests:
          storage: 14Gi
    # lines omitted for clarity
    

    Per maggiori dettagli, vedi Espansione delle rivendicazioni di volumi permanenti.

  4. Salva le modifiche e chiudi l'editor di testo. Attendi che Kubernetes aggiorni PersistentVolumeClaim con le modifiche.

  5. Rimuovi l'oggetto StatefulSet dal cluster mantenendo i pod in esecuzione come pod autonomi:

    kubectl delete sts statefulset-name --cascade=orphan
    
  6. Modifica le dimensioni di archiviazione del nuovo volume nel file sts-backup.yaml salvato localmente, in particolare il valore di spec.volumeClaimTemplates.spec.resources.requests.storage

  7. Ricrea StatefulSet nel cluster:

    kubectl apply -f sts-backup.yaml
    

Passaggi successivi