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).

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.

Errore 400: impossibile collegare RePD a una VM ottimizzata

L'utilizzo dei dischi permanenti della regione è limitato con le macchine ottimizzate per la memoria o le macchine ottimizzate per il calcolo.

Valuta la possibilità di utilizzare una classe di archiviazione dei dischi permanenti non regionale se l'utilizzo di un disco permanente regionale non è un requisito obbligatorio. Se l'utilizzo di un disco permanente a livello di area geografica è un requisito obbligatorio, valuta la possibilità di utilizzare strategie di pianificazione come incompatibilità e tolleranze per assicurarti che i pod che richiedono dischi permanenti a livello di area geografica vengano pianificati in un pool di nodi che non sono macchine ottimizzate.

Risolvere i 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 contenitore per ciò che non è montato come volume (ovvero il file system overlay), che spesso include directory come /tmp.
  • Volumi emptyDir basati su disco, a meno che il nodo non utilizzi un'unità SSD locale.

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

Se sui tuoi nodi vengono visualizzati messaggi simili ai seguenti, potrebbero essere sintomi di un basso rendimento del disco:

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 la sezione Confronto dei 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 di dimensioni inferiori a 200 GB. Valuta la possibilità di aumentare le dimensioni dei dischi o di passare a unità SSD, in particolare per i cluster utilizzati in produzione.
  • Valuta la possibilità di attivare l'SSD locale per l'archiviazione temporanea nei tuoi pool di nodi. Questa operazione è particolarmente efficace se hai container che utilizzano spesso i volumi emptyDir.

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

Un problema che può causare il mancato montaggio di PersistentVolume è un pod configurato con l'impostazione fsGroup. In genere, i montaggi vengono riprovati automaticamente e l'errore di montaggio si risolve da solo. Tuttavia, se PersistentVolume ha un numero elevato di file, kubelet tenterà di modificare la proprietà di ogni file sul 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 riguarda l'impostazione fsGroup, viene visualizzata 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 si monta entro pochi minuti, prova a svolgere i seguenti passaggi per risolvere il problema:

Operazioni sul disco lente causano errori di creazione dei pod

Per ulteriori informazioni, consulta il problema containerd 4604.

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

Nei log dik8s_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, ti consigliamo 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 e versioni successive. Le versioni di GKE con questa correzione sono 1.20.15-gke.2100 e versioni successive, 1.21.9-gke.2000 e versioni successive, 1.21.10-gke.100 e versioni successive, 1.22.6-gke.2000 e versioni successive, 1.22.7-gke.100 e versioni successive, 1.23.3-gke.1700 e versioni successive e 1.23.4-gke.100 e versioni successive

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

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

  • Se un oggetto PersistentVolume viene modificato direttamente, sia i valori PersistentVolume che PersistentVolumeClaim vengono aggiornati a un nuovo valore, ma le dimensioni del file system non vengono applicate al contenitore e vengono ancora utilizzate le dimensioni del volume precedente.

  • Se un oggetto PersistentVolume viene modificato direttamente, seguiti da aggiornamenti all'oggetto PersistentVolumeClaim in cui il campo status.capacity viene aggiornato a una nuova dimensione, possono verificarsi modifiche all'oggetto PersistentVolume, ma non a questo oggetto o al file system del container.

Per risolvere il problema, svolgi i seguenti passaggi:

  1. Mantieni invariato l'oggetto PersistentVolume modificato.
  2. Modifica l'oggetto PersistentVolumeClaim e imposta spec.resources.requests.storage su un valore superiore a quello utilizzato in PersistentVolume.
  3. Verifica se il volume permanente viene ridimensionato in base al nuovo valore.

Dopo queste modifiche, il file system di PersistentVolume, PersistentVolumeClaim e del contenitore dovrebbe essere ridimensionato 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 vedere 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 3ª generazione, devi omettere il flag count 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 simili errori relativi alle risorse Compute Engine quando provi a eseguire il provisioning dei dischi Hyperdisk bilanciati come dischi di avvio o collegati del tuo nodo in un pool di archiviazione Hyperdisk.

Questo accade quando stai tentando di creare un cluster o un pool di nodi GKE in una zona in cui le risorse stanno per esaurirsi, ad esempio:

  • Nella zona potrebbero non essere disponibili abbastanza dischi Hyperdisk bilanciati.
  • La zona potrebbe non avere una 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 pool di archiviazione bilanciati Hyperdisk.
  2. Elimina il pool di archiviazione esistente e ricrealo nella nuova zona. Questo accade perché i pool di archiviazione sono risorse a livello di zona.
  3. Crea il cluster o il pool di nodi nella nuova zona.

Passaggi successivi

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.