Risoluzione dei problemi di archiviazione in GKE


Questa pagina mostra come risolvere i problemi relativi allo spazio di archiviazione nei cluster Google Kubernetes Engine (GKE).

Errore 400: impossibile collegare RePD a una VM ottimizzata

L'utilizzo dei dischi permanenti regionali è limitato alle macchine ottimizzate per la memoria o per il calcolo.

Se l'utilizzo di un disco permanente regionale non è un requisito rigido, valuta la possibilità di utilizzare una classe di archiviazione di dischi permanenti non regionali. Se l'utilizzo di un disco permanente a livello di regione è un requisito rigido, valuta strategie di pianificazione come incompatibilità e tolleranze per garantire che i pod che necessitano di dischi permanenti a livello di regione vengano pianificati su un pool di nodi che non sono macchine ottimizzate.

Risoluzione dei problemi relativi alle prestazioni del disco

Le prestazioni del disco di avvio sono importanti perché il disco di avvio per i nodi GKE non viene utilizzato solo per il sistema operativo, ma anche per quanto segue:

  • Immagini Docker.
  • Il file system del container per ciò che non è montato come volume (ovvero il file system di overlay), che spesso include directory come /tmp.
  • Volumi emptyDir supportati da disco, a meno che il nodo non utilizzi SSD locali.

Le prestazioni del disco sono condivise per tutti i dischi dello stesso tipo di disco su un nodo. Ad esempio, se hai un disco di avvio da 100 GB pd-standard e un PersistentVolume da 100 GB pd-standard con molta attività, le prestazioni del disco di avvio sono quelle di un disco da 200 GB. Inoltre, se c'è molta attività sul PersistentVolume, ciò influisce anche sulle prestazioni del disco di avvio.

Se sui nodi vengono visualizzati messaggi simili ai seguenti, potrebbero essere sintomi di prestazioni del disco scarse:

INFO: task dockerd:2314 blocked for more than 300 seconds.
fs: disk usage and inodes count on following dirs took 13.572074343s
PLEG is not healthy: pleg was last seen active 6m46.842473987s ago; threshold is 3m0s

Per risolvere questi problemi, consulta quanto segue:

  • Assicurati di aver consultato i confronti tra i tipi di dischi di archiviazione e di aver scelto un tipo di disco permanente adatto alle tue esigenze.
  • Questo problema si verifica spesso per i nodi che utilizzano dischi permanenti standard con una dimensione inferiore a 200 GB. Valuta la possibilità di aumentare le dimensioni dei dischi o di passare alle unità SSD, soprattutto per i cluster utilizzati in produzione.
  • Valuta la possibilità di attivare l'SSD locale per l'archiviazione temporanea sui tuoi node pool. Ciò è particolarmente efficace se hai container che utilizzano spesso volumi emptyDir.

Il montaggio di un volume non risponde più a causa dell'impostazione fsGroup

Un problema che può causare il mancato montaggio di PersistentVolume è un pod configurato con l'impostazione fsGroup. Normalmente, i montaggi vengono ritentati automaticamente e l'errore di montaggio si risolve da solo. Tuttavia, se PersistentVolume contiene un numero elevato di file, kubelet tenterà di modificare la proprietà di ogni file nel file system, il che può aumentare la latenza di montaggio del volume.

Unable to attach or mount volumes for pod; skipping pod ... timed out waiting for the condition

Per verificare se un errore di montaggio non riuscito è dovuto all'impostazione fsGroup, puoi controllare i log del pod. Se il problema è correlato all'impostazione fsGroup, vedrai la seguente voce di log:

Setting volume ownership for /var/lib/kubelet/pods/POD_UUID and fsGroup set. If the volume has a lot of files then setting volume ownership could be slow, see https://github.com/kubernetes/kubernetes/issues/69699

Se PersistentVolume non viene montato entro pochi minuti, prova a seguire questi passaggi per risolvere il problema:

Operazioni lente sul disco causano errori di creazione dei pod

Per ulteriori informazioni, consulta il problema n. 4604 di containerd.

Versioni nodo GKE interessate:1.18, 1.19, da 1.20.0 a 1.20.15-gke.2100, da 1.21.0 a 1.21.9-gke.2000, da 1.21.10 a 1.21.10-gke.100, da 1.22.0 a 1.22.6-gke.2000, da 1.22.7 a 1.22.7-gke.100, da 1.23.0 a 1.23.3-gke.700, da 1.23.4 a 1.23.4-gke.100

Nei log di k8s_node container-runtime potrebbero essere visualizzati i seguenti errori di esempio:

Error: failed to reserve container name "container-name-abcd-ef12345678-91011_default_12131415-1234-5678-1234-12345789012_0": name "container-name-abcd-ef12345678-91011_default_12131415-1234-5678-1234-12345789012_0" is reserved for "1234567812345678123456781234567812345678123456781234567812345678"

Attenuazione

  1. Se i pod non funzionano, valuta la possibilità di utilizzare restartPolicy:Always o restartPolicy:OnFailure in PodSpec.
  2. Aumenta le IOPS del disco di avvio (ad esempio, esegui l'upgrade del tipo di disco o aumenta le dimensioni del disco).

Correggi

Questo problema è stato risolto in containerd 1.6.0+. Le versioni di GKE con questa correzione sono 1.20.15-gke.2100+, 1.21.9-gke.2000+, 1.21.10-gke.100+, 1.22.6-gke.2000+, 1.22.7-gke.100+, 1.23.3-gke.1700+ e 1.23.4-gke.100+.

Le modifiche all'espansione del volume non vengono applicate nel file system del container

Quando esegui l'espansione del volume, assicurati sempre di aggiornare PersistentVolumeClaim. La modifica diretta di un PersistentVolume può comportare l'espansione del volume. Ciò potrebbe portare a uno dei seguenti scenari:

  • Se un oggetto PersistentVolume viene modificato direttamente, i valori di PersistentVolume e PersistentVolumeClaim vengono aggiornati a un nuovo valore, ma le dimensioni del file system non vengono riflesse nel container e continuano a utilizzare le dimensioni del volume precedenti.

  • Se un oggetto PersistentVolume viene modificato direttamente, seguito da aggiornamenti all'oggetto PersistentVolumeClaim in cui il campo status.capacity viene aggiornato a una nuova dimensione, ciò può comportare modifiche all'oggetto PersistentVolume, ma non all'oggetto PersistentVolumeClaim o al file system del container.

Per risolvere il problema, completa i seguenti passaggi:

  1. Mantieni l'oggetto PersistentVolume modificato così com'era.
  2. Modifica l'oggetto PersistentVolumeClaim e imposta spec.resources.requests.storage su un valore superiore a quello utilizzato in PersistentVolume.
  3. Verifica se PersistentVolume è stato ridimensionato al nuovo valore.

Dopo queste modifiche, le dimensioni di PersistentVolume, PersistentVolumeClaim e del file system del container dovrebbero essere ridimensionate automaticamente da kubelet.

Verifica se le modifiche sono riportate nel pod.

kubectl exec POD_NAME  -- /bin/bash -c "df -h"

Sostituisci POD_NAME con il pod collegato a PersistentVolumeClaim.

Il tipo di macchina selezionato deve avere SSD locali

Quando crei un cluster o un pool di nodi che utilizza l'SSD locale, potresti riscontrare il seguente errore:

The selected machine type (c3-standard-22-lssd) has a fixed number of local SSD(s): 4. The EphemeralStorageLocalSsdConfig's count field should be left unset or set to 4, but was set to 1.

Nel messaggio di errore, potresti visualizzare LocalNvmeSsdBlockConfig anziché EphemeralStorageLocalSsdConfig, a seconda di quale hai specificato.

Questo errore si verifica quando il numero di dischi SSD locali specificato non corrisponde al numero di dischi SSD locali inclusi nel tipo di macchina.

Per risolvere il problema, specifica un numero di dischi SSD locali che corrisponda al tipo di macchina che vuoi. Per le serie di macchine di terza generazione, devi omettere il flag count dell'SSD locale e il valore corretto verrà configurato automaticamente.

Pool di archiviazione Hyperdisk: la creazione del cluster o pool di nodi non riesce

Potresti riscontrare l'errore ZONE_RESOURCE_POOL_EXHAUSTED o errori simili delle risorse Compute Engine quando provi a eseguire il provisioning di dischi Hyperdisk bilanciato come dischi di avvio o collegati del nodo in un pool di archiviazione Hyperdisk.

Ciò si verifica quando tenti di creare un cluster GKE o un pool di nodi in una zona con risorse in esaurimento, ad esempio:

  • La zona potrebbe non avere a disposizione un numero sufficiente di dischi Hyperdisk bilanciato.
  • La zona potrebbe non avere capacità sufficiente per creare i nodi del tipo di macchina specificato, ad esempio c3-standard-4.

Per risolvere il problema:

  1. Seleziona una nuova zona all'interno della stessa regione con capacità sufficiente per il tipo di macchina scelto e in cui sono disponibili i pool di archiviazione Hyperdisk bilanciato.
  2. Elimina il pool di archiviazione esistente e ricrealo nella nuova zona. Questo perché i pool di archiviazione sono risorse di zona.
  3. Crea il cluster o pool di nodi nella nuova zona.

Passaggi successivi