Risoluzione dei problemi di archiviazione in GKE


Questa pagina mostra come risolvere i problemi relativi ai volumi di cui è stato eseguito il deployment nei cluster Google Kubernetes Engine (GKE).

Errore 400: impossibile collegare RePD a una VM ottimizzata

L'utilizzo dei dischi permanenti a livello di regione è limitato all'utilizzo con macchine ottimizzate per la memoria o per il calcolo.

Valuta la possibilità di utilizzare una classe di archiviazione di disco permanente non a livello di regione se l'utilizzo di un disco permanente a livello di regione non è un requisito rigido. Se l'utilizzo di un disco permanente a livello di regione è un requisito rigido, prendi in considerazione strategie di pianificazione come incompatibilità e tolleranze per garantire che i pod che richiedono DP a livello di regione vengano pianificati su un pool di nodi non ottimizzato.

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 viene utilizzato non solo per il sistema operativo, ma anche per:

  • immagini Docker
  • il file system del container per ciò che non viene montato come volume (ovvero il file system di overlay) e questo spesso include directory come /tmp.
  • supportato su disco emptyDir, a meno che il nodo non utilizzi 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 disco di avvio pd-standard da 100 GB e un PersistentVolume pd-standard da 100 GB con molta attività, le prestazioni del disco di avvio saranno quelle di un disco da 200 GB. Inoltre, se l'attività è elevata sul PersistentVolume, ciò influirà anche sulle prestazioni del disco di avvio.

Se sui tuoi nodi visualizzi messaggi simili al seguente, questi potrebbero essere sintomi di scarse prestazioni 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 aiutarci a risolvere questi problemi, verifica quanto segue:

  • Assicurati di aver consultato l'articolo Confronti 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 con una dimensione inferiore a 200 GB. Valuta la possibilità di aumentare le dimensioni dei dischi o di passare agli SSD, soprattutto per i cluster utilizzati in produzione.
  • Valuta la possibilità di abilitare gli SSD locali per l'archiviazione temporanea sui tuoi pool di nodi. Questa operazione è particolarmente efficace se hai container che usano spesso volumi emptyDir.

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

Un problema che può causare la mancata riuscita del montaggio di PersistentVolume è un pod configurato con l'impostazione fsGroup. Normalmente, i montaggi ritentano automaticamente e l'errore di montaggio si risolve da solo. Tuttavia, se PersistentVolume ha un numero elevato di file, kubelet tenterà di cambiare 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 riguarda l'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 risolvere il problema procedendo nel seguente modo:

Le operazioni lente sul disco causano errori di creazione dei pod

Per saperne di più, consulta l'articolo sul problema di container n. 4604.

Versioni dei nodi GKE interessate: da 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.2.0.2.0 a 1.2.0.2.0 a 1.2.0.2.0.

Sintomo e diagnosi

Errore di esempio nei log di runtime del container k8s_node:

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 l'utilizzo di restartPolicy:Always o restartPolicy:OnFailure in PodSpec.
  2. Aumenta il numero di IOPS del disco di avvio (ad esempio, esegui l'upgrade del tipo di disco o aumenta le dimensioni del disco).

Correggi

Questo problema è ora risolto in containerd 1.6.0 e versioni successive e le versioni di GKE con la correzione sono 1.20.15-gke.2100+, 1.21.9-gke.2000+, 1.21.10-gke.100+, 1.22.6-gke.2000+, 1.2.g+1.ke02.1.2.1.0+, 1.2.3.01+, 1.2.0.1.1.2

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

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

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

  • 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, questo può comportare modifiche al PersistentVolume ma non all'oggetto PersistentVolumeClaim o al file system del container.

Attenuazione

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

Dopo queste modifiche, PersistentVolume, PersistentVolumeClaim e file system del container devono essere ridimensionati automaticamente dal kubelet.

  • Verifica se le modifiche si riflettono 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 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 ciò che hai specificato.

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

Attenuazione

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