Problemi comuni con nodi e pod
Scopri come identificare e risolvere i problemi comuni relativi a nodi e pod nei cluster creati utilizzando Kubernetes Engine (OKE).
Potresti riscontrare questi problemi con i nodi e i pod nei cluster creati utilizzando Kubernetes Engine.
Nodi di lavoro e/o pod non reattivi bloccati in stato In sospeso a causa di risorse insufficienti
Potrebbero verificarsi i seguenti problemi con i nodi e i pod nei cluster creati utilizzando Kubernetes Engine:
- Nodi di lavoro non reattivi.
- Nodi di lavoro con stato NotReady in risposta al comando
kubectl get node
. - Pod con stato In sospeso, con messaggi quali
FailedScheduling due to Insufficient cpu
oFailedScheduling due to Insufficient memory
.
Una probabile causa di questi problemi è l'insufficienza di risorse di sistema per i daemon di sistema Kubernetes e del sistema operativo.
Si consiglia di utilizzare i flag kubelet --kube-reserved
e --system-reserved
per riservare risorse di CPU e memoria per i daemon di sistema Kubernetes (ad esempio, kubelet
e container runtime
) e i daemon di sistema del sistema operativo (ad esempio, sshd
e systemd
). Ad esempio:
--kube-reserved=cpu=500m,memory=1Gi
--system-reserved=cpu=100m,memory=100Mi
I pod in esecuzione su un nodo di lavoro possono utilizzare tutte le risorse di CPU e memoria disponibili e quindi impedire l'esecuzione di altri processi essenziali (ad esempio, i daemon del sistema Kubernetes e del sistema operativo) sul nodo. Quando i daemon di sistema Kubernetes e del sistema operativo non possono essere eseguiti, il nodo di lavoro può diventare non reattivo, instabile e causare un crash imprevisto a causa di un carico elevato.
Per evitare che i pod richiedano risorse richieste dai daemon di sistema Kubernetes e OS, includere i flag kubelet --kube-reserved
e --system-reserved
come opzioni kubelet-extra-args
in uno script di inizializzazione cloud personalizzato. Per ulteriori informazioni e un esempio, vedere l'Esempio 4: utilizzo di uno script cloud-init personalizzato per riservare le risorse per i daemon di sistema Kubernetes e OS.
Quando si utilizza il flag kubelet --kube-reserved
per riservare una parte delle risorse di CPU e memoria di un nodo di lavoro per l'uso da parte dei daemon di sistema Kubernetes, tenere presenti i seguenti suggerimenti:
- La quantità di risorsa CPU che si consiglia di riservare per i daemon di sistema Kubernetes dipende dal numero di memorie centrali CPU nel nodo di lavoro, come illustrato nella tabella riportata di seguito.
Numero di core CPU nel nodo di lavoro 1 2 3 4 5 Più di 5 CPU consigliata da riservare, in millicore (m) 60 m 70 m 80 m 85 m 90 m 2,5 m aggiuntivi per ogni core aggiuntivo sul nodo di lavoro - La quantità di risorsa di memoria che si consiglia di riservare per i daemon di sistema Kubernetes dipende dalla quantità di memoria nel nodo di lavoro, come illustrato nella tabella riportata di seguito.
Memoria sul nodo di lavoro, in GiB 4 GiB 8 GiB 16 GiB 128 GiB Più di 128 GiB Memoria consigliata da riservare, in GiB 1 GiB 1 GiB 2 GiB 9 GiB 20 MiB aggiuntivi per ogni GiB aggiuntivo di memoria dei nodi di lavoro
Quando si utilizza il flag kubelet --system-reserved
per riservare una parte delle risorse di CPU e memoria di un nodo per l'uso da parte dei daemon di sistema del sistema operativo, tenere presenti i seguenti suggerimenti:
- La quantità di risorsa CPU che si consiglia di riservare per i daemon di sistema del sistema operativo (indipendentemente dalla forma del nodo) è di 100 m (millicore).
- La quantità di risorsa di memoria che si consiglia di riservare per i daemon di sistema del sistema operativo (indipendentemente dalla forma del nodo) è pari a 100 Mi (mebibyte).
Tenere presente che i suggerimenti relativi alla CPU e alla memoria per i flag kubelet --kube-reserved
e --system-reserved
potrebbero non essere ottimali per i carichi di lavoro che si desidera eseguire, pertanto potrebbe essere necessario modificare i valori di conseguenza. Potrebbe essere inoltre necessario modificare i valori nel tempo.
Per vedere la differenza tra le risorse totali su un nodo di lavoro e le risorse sul nodo che i carichi di lavoro possono utilizzare, eseguire il comando seguente:
kubectl get node <NODE_NAME> -o=yaml | grep -A 6 -B 7 capacity
Output di esempio:
allocatable:
cpu: 15743m
ephemeral-storage: "34262890849"
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 234972476Ki
pods: "110"
capacity:
cpu: "16"
ephemeral-storage: 37177616Ki
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 257197372Ki
pods: "110"
La differenza tra la CPU e la memoria "capacità" e "allocatabile" nell'output di esempio include le prenotazioni di CPU e memoria per i daemon di sistema Kubernetes e OS.
A partire da giugno 2024, i suggerimenti per le prenotazioni di risorse di CPU e memoria per i daemon di sistema Kubernetes e del sistema operativo descritti in questa sezione vengono utilizzati come valori predefiniti per tutte le immagini OKE, per tutte le versioni Kubernetes supportate. I suggerimenti vengono inoltre utilizzati come valori predefiniti per tutte le immagini della piattaforma per Kubernetes versione 1.30 e successive. Le impostazioni predefinite vengono applicate sia quando si specifica un'immagine OKE rilasciata nel giugno 2024 (o successivamente) sia quando si aggiorna la versione di Kubernetes in esecuzione in un cluster alla versione 1.30 (o successiva). Se si specifica un'immagine OKE rilasciata a giugno 2024 (o successivamente) o si aggiorna un cluster a Kubernetes versione 1.30, si consiglia di controllare che le prenotazioni predefinite siano appropriate per i carichi di lavoro che si intende eseguire.
La creazione di pool di nodi virtuali visualizza un messaggio "Server API non raggiungibile"
Quando si crea un pool di nodi virtuali in un cluster creato utilizzando Kubernetes Engine, è possibile che venga visualizzato il messaggio seguente se si visualizzano i log delle richieste di lavoro o gli errori delle richieste di lavoro per l'ID della richiesta di lavoro dell'operazione:
API Server Unreachable, Check network configuration and ensure network path between Virtual Node and API Server exist
Questo messaggio indica un problema di configurazione della rete. Verificare che la rete sia configurata correttamente per consentire ai nodi virtuali nel pool di nodi virtuali di comunicare con il server API Kubernetes. Per una configurazione di rete appropriata, vedere Configurazione delle risorse di rete di esempio per il cluster con nodi virtuali.