Questa pagina mostra come risolvere i problemi relativi ai cluster Autopilot di Google Kubernetes Engine (GKE).
Problemi relativi ai cluster
Impossibile creare un cluster: 0 nodi registrati
Il seguente problema si verifica quando provi a creare un cluster Autopilot con un account di servizio IAM disabilitato o che non dispone delle autorizzazioni richieste. La creazione del cluster non riesce e viene visualizzato il messaggio di errore seguente:
All cluster resources were brought up, but: only 0 nodes out of 2 have registered.
Per risolvere il problema:
Controlla se l'account di servizio Compute Engine predefinito o l'account di servizio IAM personalizzato che vuoi utilizzare è disabilitato:
gcloud iam service-accounts describe SERVICE_ACCOUNT
Sostituisci
SERVICE_ACCOUNT
con l'indirizzo email dell'account di servizio, ad esempiomy-iam-account@my-first-project.iam.gserviceaccount.com
.Se l'account di servizio è disabilitato, l'output è simile al seguente:
disabled: true displayName: my-service-account email: my-service-account@my-project.iam.gserviceaccount.com ...
Se l'account di servizio è disabilitato, abilitalo:
gcloud iam service-accounts enable SERVICE_ACCOUNT
Se l'account di servizio è abilitato e l'errore persiste, concedi all'account di servizio le autorizzazioni minime richieste per GKE:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member "serviceAccount:SERVICE_ACCOUNT" \
--role roles/container.nodeServiceAccount
Lo spazio dei nomi è bloccato nello stato di terminazione quando il cluster ha 0 nodi
Il seguente problema si verifica quando elimini uno spazio dei nomi in un cluster dopo che il cluster fa lo scale down a zero nodi. Il componente metrics-server
non può accettare la richiesta di eliminazione dello spazio dei nomi perché non ha repliche.
Per diagnosticare il problema, esegui questo comando:
kubectl describe ns/NAMESPACE_NAME
Sostituisci NAMESPACE_NAME
con il nome dello spazio dei nomi.
L'output è il seguente:
Discovery failed for some groups, 1 failing: unable to retrieve the complete
list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to
handle the request
Per risolvere il problema, fai lo scale up di qualsiasi carico di lavoro per attivare GKE e creare un nuovo nodo. Quando il nodo è pronto, la richiesta di eliminazione dello spazio dei nomi viene completata automaticamente. Dopo che GKE elimina lo spazio dei nomi, scala nuovamente il carico di lavoro.
Problemi di scalabilità
Scalabilità verticale dei nodi non riuscita: il pod rischia di non essere pianificato
Il seguente problema si verifica quando il logging delle porte seriali è disabilitato nel tuo progetto Google Cloud. I cluster GKE Autopilot richiedono il logging delle porte seriali per eseguire il debug efficace dei problemi dei nodi. Se il logging delle porte seriali è disabilitato, Autopilot non può eseguire il provisioning dei nodi per l'esecuzione dei tuoi carichi di lavoro.
Il messaggio di errore nel log eventi di Kubernetes è simile al seguente:
LAST SEEN TYPE REASON OBJECT MESSAGE
12s Warning FailedScaleUp pod/pod-test-5b97f7c978-h9lvl Node scale up in zones associated with this pod failed: Internal error. Pod is at risk of not being scheduled
Il logging delle porte seriali potrebbe essere disabilitato a livello di organizzazione tramite un criterio dell'organizzazione che applica il vincolo compute.disableSerialPortLogging
. Il logging delle porte seriali può essere disabilitato anche a livello di progetto o di istanza di macchina virtuale (VM).
Per risolvere il problema:
- Chiedi all'amministratore dei criteri dell'organizzazione Google Cloud di rimuovere il vincolo
compute.disableSerialPortLogging
nel progetto con il tuo cluster Autopilot. - Se non hai un criterio dell'organizzazione che applica questo vincolo, prova ad abilitare il logging delle porte seriali nei metadati del progetto.
Questa azione richiede l'autorizzazione IAM
compute.projects.setCommonInstanceMetadata
.
Impossibile fare lo scale up dei nodi: le risorse di zona dei pod sono state superate
Il seguente problema si verifica quando Autopilot non esegue il provisioning di nuovi nodi per un pod in una zona specifica, perché un nuovo nodo violerebbe i limiti delle risorse.
Il messaggio di errore nei log è simile al seguente:
"napFailureReasons": [
{
"messageId": "no.scale.up.nap.pod.zonal.resources.exceeded",
...
Questo errore si riferisce a un evento noScaleUp
in cui il provisioning automatico dei nodi non ha eseguito il provisioning di alcun gruppo di nodi per il pod nella zona.
Se si verifica questo errore, verifica quanto segue:
- I pod hanno memoria e CPU sufficienti.
- L'intervallo CIDR degli indirizzi IP del pod è abbastanza grande da supportare la dimensione massima prevista del cluster.
Problemi relativi al carico di lavoro
Pod bloccati nello stato In attesa
Un pod potrebbe rimanere bloccato nello stato Pending
se selezioni un nodo specifico da utilizzare per il pod, ma la somma delle richieste di risorse nel pod e nei DaemonSet che devono essere eseguite sul nodo supera la capacità massima allocabile del nodo. Di conseguenza, il pod potrebbe acquisire lo stato Pending
e rimanere non pianificato.
Per evitare questo problema, valuta le dimensioni dei carichi di lavoro di cui hai eseguito il deployment per assicurarti che rientrino nel numero massimo di richieste di risorse per Autopilot.
Puoi anche provare a pianificare i DaemonSet prima di pianificare i normali pod di carico di lavoro.
Prestazioni dei carichi di lavoro costantemente inaffidabili su un nodo specifico
In GKE 1.24 e versioni successive, se i carichi di lavoro su un nodo specifico riscontrano costantemente interruzioni, arresti anomali o comportamenti simili inaffidabili, puoi comunicare a GKE il nodo problematico contrassegnandolo come non pianificabile utilizzando il seguente comando:
kubectl drain NODE_NAME --ignore-daemonsets
Sostituisci NODE_NAME
con il nome del nodo problematico.
Puoi trovare il nome del nodo eseguendo kubectl get nodes
.
GKE svolge le seguenti operazioni:
- Rimuove i carichi di lavoro esistenti dal nodo e interrompe la pianificazione dei carichi di lavoro su quel nodo.
- Ricrea automaticamente tutti i carichi di lavoro rimossi che sono gestiti da un controller, ad esempio un oggetto Deployment o StatefulSet, su altri nodi.
- Termina tutti i carichi di lavoro che rimangono sul nodo e lo ripara o ricrea nel tempo.
- Se utilizzi Autopilot, GKE arresta e sostituisce immediatamente il nodo e ignora eventuali PodDisruptionBudget configurati.