In Google Kubernetes Engine (GKE) 1.24 o versioni successive, puoi utilizzare la funzionalità di espansione del volume Kubernetes per modificare la capacità di un volume permanente dopo la sua creazione.
Per ulteriori informazioni sull'espansione dei volumi, consulta la documentazione di Kubernetes open source.
Prerequisiti
L'espansione del volume presenta i seguenti prerequisiti:
- Se il volume di cui vuoi modificare 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.
- 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 dei volumi.
- Se il volume di cui vuoi modificare le dimensioni è gestito da un plug-in del volume all'interno dell'albero:
- 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 di archiviazione per verificare che il plug-in del volume in-tree supporti l'espansione del volume (come nel caso del plug-in in-tree del disco permanente Compute Engine).
- Non puoi utilizzare l'espansione del volume quando utilizzi la
ReadOnlyMany
modalità di accesso.
Utilizzo dell'espansione del volume
Per utilizzare l'espansione del volume:
Aggiungi
allowVolumeExpansion: true
a StorageClass, se questo campo non è già presente. Ad esempio:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: my.driver ... allowVolumeExpansion: true
Richiedi una modifica della capacità del volume modificando il campo
spec.resources.requests.storage
del tuo PersistentVolumeClaim.kubectl edit pvc pvc-name
Ad esempio, puoi modificare il seguente PVC in modo che abbia un disco da 30 gibibyte (GiB) anziché 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
Verifica la modifica visualizzando il PVC. Per visualizzare la PVC, esegui il comando seguente:
kubectl get pvc pvc-name -o yaml
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 volume permanente viene modificata direttamente, il file system del contenitore potrebbe non essere corretto. Per risolvere questi problemi, consulta Risolvere i problemi relativi alle modifiche di espansione del volume.
Gestione delle espansioni dei volumi nei 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
degli oggetti 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 creati PVC delle dimensioni originali. Per modificare in modo permanente le dimensioni dei volumi di cui è stato eseguito il provisioning per i pod gestiti dal StatefulSet, devi eliminare e ricreare l'oggetto StatefulSet con le dimensioni aggiornate specificate nel campo volumeClaimTemplates
.
Puoi eseguire i seguenti passaggi per mantenere attivi e in esecuzione i pod originali e modificare lo StatefulSet per eseguire il provisioning delle repliche future con le nuove dimensioni del volume.
Salva il StatefulSet esistente in un file:
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
Per ogni PersistentVolumeClaim nel StatefulSet, apri l'oggetto
PersistentVolumeClaim
in un editor di testo:kubectl edit pvc PVC_NAME
Aggiorna il campo
spec.resources.requests.storage
con le nuove dimensioni del volume, come nell'esempio seguente:apiVersion: v1 kind: PersistentVolumeClaim metadata: # lines omitted for clarity spec: resources: requests: storage: 14Gi # lines omitted for clarity
Per maggiori dettagli, vedi Espandere le rivendicazioni dei volumi permanenti.
Salva le modifiche e chiudi l'editor di testo. Attendi che Kubernetes aggiorni il PersistentVolumeClaim con le modifiche.
Rimuovi l'oggetto StatefulSet dal cluster mantenendo i pod in esecuzione come pod autonomi:
kubectl delete sts statefulset-name --cascade=orphan
Modifica le dimensioni dello spazio di archiviazione del nuovo volume nel file
sts-backup.yaml
salvato localmente, in particolare il valore dispec.volumeClaimTemplates.spec.resources.requests.storage
Ricrea il StatefulSet nel cluster:
kubectl apply -f sts-backup.yaml
Passaggi successivi
- Scopri di più sui volumi.
- Scopri di più su come ridimensionare i volumi permanenti utilizzando Kubernetes.