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:
- Riduci il numero di file nel Volume.
- Non utilizzare più l'impostazione
[fsGroup]
. - Modifica l'applicazione
fsGroupChangePolicy
inOnRootMismatch
.
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
- Se i pod non funzionano, valuta la possibilità di utilizzare
restartPolicy:Always
orestartPolicy:OnFailure
in PodSpec. - 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:
- Mantieni l'oggetto PersistentVolume modificato così com'era.
- Modifica l'oggetto PersistentVolumeClaim e imposta
spec.resources.requests.storage
su un valore superiore a quello utilizzato in PersistentVolume. - 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:
- 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.
- Elimina il pool di archiviazione esistente e ricrealo nella nuova zona. Questo perché i pool di archiviazione sono risorse di zona.
- Crea il cluster o pool di nodi nella nuova zona.
Passaggi successivi
Se non riesci a trovare una soluzione al tuo problema nella documentazione, consulta la sezione Richiedere assistenza per ulteriore aiuto, inclusi consigli sui seguenti argomenti:
- Aprire una richiesta di assistenza contattando l'assistenza clienti cloud.
- Ricevere assistenza dalla community
ponendo domande su StackOverflow e utilizzando il tag
google-kubernetes-engine
per cercare problemi simili. Puoi anche unirti al canale Slack#kubernetes-engine
per ulteriore assistenza della community. - Apertura di bug o richieste di funzionalità utilizzando lo strumento di monitoraggio dei problemi pubblico.