Questa pagina mostra come scoprire e risolvere i problemi relativi al fatto che Cluster Autoscaler non esegue lo scale up dei nodi nei cluster Google Kubernetes Engine (GKE).
Questa pagina è rivolta agli sviluppatori di applicazioni che vogliono risolvere una situazione imprevista o negativa con la propria app o il proprio servizio e agli amministratori e agli operatori della piattaforma che vogliono evitare interruzioni nella fornitura di prodotti e servizi.
Informazioni su quando il gestore della scalabilità automatica dei cluster esegue lo scale up dei nodi
Prima di procedere con i passaggi per la risoluzione dei problemi, può essere utile capire quando il gestore della scalabilità automatica del cluster tenta di scalare i nodi. Il gestore della scalabilità automatica del cluster aggiunge nodi solo quando le risorse esistenti non sono sufficienti.
Ogni 10 secondi, il gestore della scalabilità automatica del cluster controlla se sono presenti pod non pianificabili. Un pod non è pianificabile quando lo scheduler Kubernetes non può inserirlo in nessun nodo esistente a causa di risorse insufficienti, vincoli dei nodi o requisiti del pod non soddisfatti.
Quando il gestore della scalabilità automatica del cluster trova pod non pianificabili, valuta se l'aggiunta di un nodo consentirebbe la pianificazione del pod. Se l'aggiunta di un nodo consente la pianificazione di un pod, il gestore della scalabilità automatica del cluster aggiunge un nuovo nodo al gruppo di istanze gestite (MIG). Lo scheduler Kubernetes può quindi pianificare il pod sul nodo appena provisionato.
Controlla se hai pod non pianificabili
Per determinare se è necessario eseguire lo scale up del cluster, controlla i pod non pianificati:
Nella console Google Cloud , vai alla pagina Workload.
Nel campo
Filtro, inserisciunschedulable
e premi Invio.Se sono elencati pod, significa che hai pod non pianificabili. Per risolvere i problemi relativi ai pod non pianificabili, consulta Errore: pod non pianificabile. La risoluzione della causa sottostante dei pod non pianificabili spesso consente al gestore della scalabilità automatica del cluster di eseguire lo scale up. Per identificare e risolvere gli errori specifici del gestore della scalabilità automatica del cluster, esplora le seguenti sezioni.
Se non sono elencati pod, il gestore della scalabilità automatica del cluster non deve eseguire lo scale up e funziona come previsto.
Controllare se in precedenza avevi pod non pianificabili
Se stai esaminando la causa del precedente errore del gestore della scalabilità automatica del cluster, controlla i pod non pianificabili in precedenza:
Nella console Google Cloud , vai alla pagina Esplora log.
Specifica un intervallo di tempo per le voci di log che vuoi visualizzare.
Nel riquadro della query, inserisci la seguente query:
logName="projects/PROJECT_ID/logs/events" jsonPayload.source.component="default-scheduler" jsonPayload.reason="FailedScheduling"
Sostituisci
PROJECT_ID
con l'ID progetto.Fai clic su Esegui query.
Se sono elencati risultati, significa che avevi pod non pianificabili nell'intervallo di tempo specificato.
Controllare se il problema è causato da una limitazione
Dopo aver verificato di avere pod non pianificati, assicurati che il problema con il gestore della scalabilità automatica dei cluster non sia causato da una delle limitazioni del gestore della scalabilità automatica dei cluster.
Visualizza errori
Spesso puoi diagnosticare la causa dei problemi di scalabilità visualizzando i messaggi di errore:
Se hai già visualizzato un messaggio di errore, consulta la tabella dei messaggi di errore per suggerimenti su come risolvere il problema.
Se non hai ancora ricevuto un messaggio, utilizza una delle seguenti opzioni:
- Problemi riscontrati meno di 72 ore fa: visualizza le notifiche di errore nella console Google Cloud .
- Problemi risalenti a più di 72 ore fa: visualizza gli errori negli eventi in Cloud Logging.
Visualizzare gli errori nelle notifiche
Se il problema che hai osservato si è verificato meno di 72 ore fa, visualizza le notifiche relative agli errori nella Google Cloud console. Queste notifiche forniscono informazioni preziose sui motivi per cui il gestore della scalabilità automatica dei cluster non ha eseguito lo scale up e offrono consigli su come risolvere l'errore e visualizzare i log pertinenti per ulteriori indagini.
Per visualizzare le notifiche nella console Google Cloud , completa i seguenti passaggi:
Nella console Google Cloud , vai alla pagina Cluster Kubernetes.
Controlla la colonna Notifiche. Le seguenti notifiche sono associate ai problemi di scalabilità:
Can't scale up
Can't scale up pods
Can't scale up a node pool
Fai clic sulla notifica pertinente per visualizzare un riquadro con i dettagli sulla causa del problema e le azioni consigliate per risolverlo.
(Facoltativo) Per visualizzare i log di questo evento, fai clic su Log. Questa azione ti reindirizza a Esplora log con una query precompilata per aiutarti a esaminare ulteriormente l'evento di scalabilità. Per saperne di più sul funzionamento degli eventi di scalabilità verticale, consulta Visualizzare gli eventi del gestore della scalabilità automatica del cluster.
Se i problemi persistono dopo aver esaminato i consigli riportati nella notifica, consulta le tabelle dei messaggi di errore per ulteriore assistenza.
Visualizzare gli errori negli eventi
Se il problema che hai osservato si è verificato più di 72 ore fa, visualizza gli eventi in Cloud Logging. Quando si verifica un errore, spesso viene registrato in un evento.
Per visualizzare i log del gestore della scalabilità automatica dei cluster nella console Google Cloud , completa i seguenti passaggi:
Nella console Google Cloud , vai alla pagina Cluster Kubernetes.
Seleziona il nome del cluster che vuoi esaminare per visualizzare la pagina Dettagli cluster.
Nella pagina Dettagli cluster, fai clic sulla scheda Log.
Nella scheda Log, fai clic sulla scheda Log di scalabilità automatica per visualizzare i log.
(Facoltativo) Per applicare filtri più avanzati per restringere i risultati, fai clic sul pulsante con la freccia sul lato destro della pagina per visualizzare i log in Esplora log.
Per scoprire di più sul funzionamento degli eventi di scalabilità verticale, consulta Visualizzare gli eventi di scalabilità automatica del cluster. Per un esempio di come utilizzare Cloud Logging, consulta il seguente esempio di risoluzione dei problemi.
Esempio: risoluzione di un problema risalente a più di 72 ore prima
L'esempio seguente mostra come potresti esaminare e risolvere un problema con un cluster che non viene scalato.
Scenario: nell'ultima ora, un pod è stato contrassegnato come non pianificabile. Il gestore della scalabilità automatica del cluster non ha eseguito il provisioning di nuovi nodi per pianificare il pod.
Soluzione:
- Poiché il problema si è verificato più di 72 ore fa, lo esamini utilizzando Cloud Logging anziché esaminare i messaggi di notifica.
- In Cloud Logging, trovi i dettagli di logging per gli eventi del gestore della scalabilità automatica del cluster, come descritto in Visualizzare gli errori negli eventi.
Cerca gli eventi
scaleUp
che contengono il pod che stai esaminando nel campotriggeringPods
. Puoi filtrare le voci di log, incluso il filtro in base a un particolare valore del campo JSON. Scopri di più nelle query avanzate dei log.Non trovi eventi di scale up. Se lo hai fatto, puoi provare a trovare un
EventResult
che contenga lo stessoeventId
dell'eventoscaleUp
. A questo punto, puoi esaminare il campoerrorMsg
e consultare l'elenco dei possibili messaggi di errore di scaleUp.Poiché non hai trovato eventi
scaleUp
, continui a cercare eventinoScaleUp
ed esamina i seguenti campi:unhandledPodGroups
: contiene informazioni sul pod (o sul controller del pod).reason
: fornisce motivi globali che indicano che lo scale up potrebbe essere bloccato.skippedMigs
: fornisce i motivi per cui alcuni MIG potrebbero essere ignorati.
Trovi un evento
noScaleUp
per il tuo pod e tutti i MIG nel camporejectedMigs
hanno lo stesso ID messaggio di motivo"no.scale.up.mig.failing.predicate"
con due parametri:"NodeAffinity"
e"node(s) did not match node selector"
.
Risoluzione:
Dopo aver consultato l'elenco dei messaggi di errore, scopri che il gestore della scalabilità automatica dei cluster non può fare lo scale up di unpool di nodil a causa di un predicato di pianificazione non riuscito per i pod in attesa. I parametri sono il nome del predicato non riuscito e il motivo per cui non è riuscito.
Per risolvere il problema, esamini il manifest del pod e scopri che ha un selettore di nodi che non corrisponde a nessun MIG nel cluster. Elimina il selettore dal manifest del pod e ricrea il pod. Il gestore della scalabilità automatica del cluster aggiunge un nuovo nodo e il pod viene pianificato.
Risolvere gli errori di scalabilità verticale
Dopo aver identificato l'errore, utilizza le tabelle seguenti per capire la causa dell'errore e come risolverlo.
Errori di ScaleUp
Puoi trovare i messaggi di errore degli eventi per gli eventi scaleUp
nell'evento eventResult
corrispondente, nel campo resultInfo.results[].errorMsg
.
Messaggio | Dettagli | Parametri | Attenuazione |
---|---|---|---|
"scale.up.error.out.of.resources" |
Gli errori delle risorse si verificano quando provi a richiedere nuove risorse in una zona che non può soddisfare la tua richiesta a causa dell'attuale indisponibilità di una risorsa di Compute Engine, ad esempio GPU o CPU. | ID MIG non riusciti. | Segui la procedura di risoluzione dei problemi di disponibilità delle risorse nella documentazione di Compute Engine. |
"scale.up.error.quota.exceeded" |
L'evento scaleUp non è riuscito perché non è stato possibile aumentare alcuni MIG a causa del superamento della quota di Compute Engine. | ID MIG non riusciti. | Controlla la scheda Errori del MIG nella console Google Cloud per vedere quale quota viene superata. Dopo aver identificato la quota superata, segui le istruzioni per richiedere un aumento della quota. |
"scale.up.error.waiting.for.instances.timeout" |
Lo scale up del gruppo di istanze gestite non è riuscito a causa del timeout. | ID MIG non riusciti. | Questo messaggio deve essere temporaneo. Se il problema persiste, contatta l'assistenza clienti Google Cloud per ulteriori indagini. |
"scale.up.error.ip.space.exhausted" |
Impossibile fare lo scale up perché le istanze in alcuni gruppi di istanze gestite hanno esaurito gli indirizzi IP. Ciò significa che il cluster non dispone di spazio di indirizzi IP non allocati sufficiente per aggiungere nuovi nodi o pod. | ID MIG non riusciti. | Segui la procedura di risoluzione dei problemi descritta in Spazio di indirizzi IP liberi insufficiente per i pod. |
"scale.up.error.service.account.deleted" |
Impossibile fare lo scale up perché l'account di servizio è stato eliminato. | ID MIG non riusciti. | Prova ad annullare l'eliminazione del service account. Se la procedura non va a buon fine, contatta l'assistenza clienti Google Cloud per ulteriori indagini. |
Motivi di un evento noScaleUp
Un evento noScaleUp
viene emesso periodicamente quando nel cluster sono presenti pod non pianificabili e il gestore della scalabilità automatica dei cluster non può scalare il cluster per pianificare i pod. Gli eventi noScaleUp
sono soggetti a determinate condizioni e non coprono tutti i casi possibili.
Motivi di primo livello di NoScaleUp
I messaggi relativi al motivo principale per gli eventi noScaleUp
vengono visualizzati nel campo
noDecisionStatus.noScaleUp.reason
. Il messaggio contiene un motivo di primo livello
per cui il gestore della scalabilità automatica dei cluster non può scalare il cluster.
Messaggio | Dettagli | Attenuazione |
---|---|---|
"no.scale.up.in.backoff" |
Non è stato fatto lo scale up perché è in un periodo di backoff (temporaneamente bloccato). Questo messaggio può verificarsi durante gli eventi di scalabilità verticale con un numero elevato di pod. | Questo messaggio deve essere temporaneo. Controlla questo errore dopo qualche minuto. Se questo messaggio persiste, contatta l'assistenza clienti Google Cloud per ulteriori indagini. |
Motivi del provisioning automatico dei nodi di primo livello NoScaleUp
I messaggi relativi al motivo del provisioning automatico dei nodi di primo livello per gli eventi noScaleUp
vengono visualizzati
nel campo noDecisionStatus.noScaleUp.napFailureReason
. Il messaggio contiene
un motivo di primo livello per cui il gestore della scalabilità automatica dei cluster non può eseguire il provisioning di nuovi pool di nodi.
Messaggio | Dettagli | Attenuazione |
---|---|---|
"no.scale.up.nap.disabled" |
Il provisioning automatico dei nodi non è stato in grado di eseguire lo scale up perché non è abilitato a livello di cluster. Se il provisioning automatico dei nodi è disabilitato, i nuovi nodi non verranno sottoposti automaticamente a provisioning se il pod in attesa contiene requisiti che non possono essere soddisfatti dai node pool esistenti. |
Rivedi la configurazione del cluster e valuta la possibilità di attivare il provisioning automatico dei nodi. |
Motivi a livello di MIG NoScaleUp
I messaggi relativi al motivo a livello di MIG per gli eventi noScaleUp
vengono visualizzati nei campi
noDecisionStatus.noScaleUp.skippedMigs[].reason
e
noDecisionStatus.noScaleUp.unhandledPodGroups[].rejectedMigs[].reason
.
Il messaggio contiene un motivo per cui il gestore della scalabilità automatica dei cluster non può aumentare le dimensioni di
un determinato MIG.
Messaggio | Dettagli | Parametri | Attenuazione |
---|---|---|---|
"no.scale.up.mig.skipped" |
Impossibile fare lo scale up di un MIG perché è stato ignorato durante la simulazione. | Motivi per cui il MIG è stato ignorato (ad esempio, perché non soddisfa un requisito del pod). | Esamina i parametri inclusi nel messaggio di errore e spiega perché il MIG è stato ignorato. |
"no.scale.up.mig.failing.predicate" |
Impossibile fare lo scale up di un pool di nodi a causa di un predicato di pianificazione non riuscito per i pod in attesa. | Nome del predicato non riuscito e motivi per cui non è riuscito. | Rivedi i requisiti del pod, ad esempio regole di affinità, incompatibilità o tolleranze e requisiti delle risorse. |
Motivi per cui il provisioning automatico dei nodi a livello di gruppo di pod NoScaleUp non è stato eseguito
I messaggi relativi al motivo del provisioning automatico dei nodi a livello di gruppo di pod per gli eventi noScaleUp
vengono visualizzati nel campo
noDecisionStatus.noScaleUp.unhandledPodGroups[].napFailureReasons[]
. Il
messaggio contiene un motivo per cui il gestore della scalabilità automatica dei cluster non può eseguire il provisioning di un nuovo node pool per pianificare un determinato gruppo di pod.
Messaggio | Dettagli | Parametri | Attenuazione |
---|---|---|---|
"no.scale.up.nap.pod.gpu.no.limit.defined" |
Il provisioning automatico dei nodi non è riuscito a eseguire il provisioning di alcun gruppo di nodi perché un pod in attesa ha una richiesta GPU, ma i limiti delle risorse GPU non sono definiti a livello di cluster. | Tipo di GPU richiesto. | Rivedi la richiesta GPU del pod in attesa e aggiorna la configurazione del provisioning automatico dei nodi a livello di cluster per i limiti di GPU. |
"no.scale.up.nap.pod.gpu.type.not.supported" |
Il provisioning automatico dei nodi non ha eseguito il provisioning di alcun gruppo di nodi per il pod perché contiene richieste per un tipo di GPU sconosciuto. | Tipo di GPU richiesto. | Controlla la configurazione del pod in attesa per il tipo di GPU per assicurarti che corrisponda a un tipo di GPU supportato. |
"no.scale.up.nap.pod.zonal.resources.exceeded" |
Il provisioning automatico dei nodi non ha eseguito il provisioning di alcun gruppo di nodi per il pod in questa zona perché così facendo violerebbe i limiti massimi di risorse a livello di cluster, supererebbe le risorse disponibili nella zona o non esiste un tipo di macchina che possa soddisfare la richiesta. | Nome della zona presa in considerazione. | Rivedi e aggiorna i limiti massimi delle risorse a livello di cluster, le richieste di risorse dei pod o le zone disponibili per il provisioning automatico dei nodi. |
"no.scale.up.nap.pod.zonal.failing.predicates" |
Il provisioning automatico dei nodi non ha eseguito il provisioning di alcun gruppo di nodi per il pod in questa zona a causa di predicati non funzionanti. | Nome della zona considerata e motivi per cui i predicati non sono riusciti. | Rivedi i requisiti del pod in attesa, ad esempio regole di affinità, incompatibilità, tolleranze o requisiti delle risorse. |
Esegui ulteriori accertamenti
Le sezioni che seguono forniscono indicazioni su come utilizzare Esplora log e
gcpdiag
per ottenere ulteriori informazioni sugli errori.
Esaminare gli errori in Esplora log
Se vuoi esaminare ulteriormente il messaggio di errore, visualizza i log specifici dell'errore:
Nella console Google Cloud , vai alla pagina Esplora log.
Nel riquadro query, inserisci la seguente query:
resource.type="k8s_cluster" log_id("container.googleapis.com/cluster-autoscaler-visibility") jsonPayload.resultInfo.results.errorMsg.messageId="ERROR_MESSAGE"
Sostituisci
ERROR_MESSAGE
con il messaggio che vuoi esaminare. Ad esempio,scale.up.error.out.of.resources
.Fai clic su Esegui query.
Eseguire il debug di alcuni errori con gcpdiag
gcpdiag
è uno strumento open source creato con il supporto di ingegneri tecnici di Google Cloud. Non è un prodotto Google Cloud supportato ufficialmente.
Se hai riscontrato uno dei seguenti messaggi di errore, puoi utilizzare
gcpdiag
per risolvere il problema:
scale.up.error.out.of.resources
scale.up.error.quota.exceeded
scale.up.error.waiting.for.instances.timeout
scale.up.error.ip.space.exhausted
scale.up.error.service.account.deleted
Per un elenco e una descrizione di tutti i flag dello strumento gcpdiag
, consulta le istruzioni per l'utilizzo di
gcpdiag
.
Risolvere errori di scalabilità complessi
Le sezioni seguenti forniscono indicazioni sulla risoluzione degli errori in cui le mitigazioni comportano più passaggi e degli errori a cui non è associato un messaggio di evento del gestore della scalabilità automatica del cluster.
Problema: il pod non si adatta al nodo
Il gestore della scalabilità automatica dei cluster pianifica un pod su un nodo solo se esiste un nodo con risorse sufficienti, come GPU, memoria e spazio di archiviazione, per soddisfare i requisiti del pod. Per determinare se questo è il motivo per cui il gestore della scalabilità automatica dei cluster non ha eseguito lo scale up, confronta le richieste di risorse con le risorse fornite.
L'esempio seguente mostra come controllare le risorse CPU, ma gli stessi passaggi sono applicabili a GPU, memoria e risorse di archiviazione. Per confrontare le richieste di CPU con le CPU di cui è stato eseguito il provisioning, completa i seguenti passaggi:
Nella console Google Cloud , vai alla pagina Workload.
Fai clic sul messaggio di errore
PodUnschedulable
.Nel riquadro Dettagli, fai clic sul nome del pod. Se sono presenti più pod, inizia dal primo e ripeti la seguente procedura per ciascun pod.
Nella pagina Dettagli pod, vai alla scheda Eventi.
Dalla scheda Eventi, vai alla scheda YAML.
Prendi nota delle richieste di risorse di ogni container nel pod per trovare il totale delle richieste di risorse. Ad esempio, nella seguente configurazione del pod, il pod ha bisogno di 2 vCPU:
resources: limits: cpu: "3" requests: cpu: "2"
Visualizza i dettagli pool di nodi dal cluster con il pod non pianificato:
Nella console Google Cloud , vai alla pagina Cluster Kubernetes.
Fai clic sul nome del cluster che contiene il messaggio di errore
Pods unschedulable
.Nella pagina Dettagli cluster, vai alla scheda Nodi.
Nella sezione Pool di nodi, prendi nota del valore nella colonna Tipo di macchina. Ad esempio:
n1-standard-1
.Confronta la richiesta di risorse con le vCPU fornite dal tipo di macchina. Ad esempio, se un pod richiede 2 vCPU, ma i nodi disponibili hanno il tipo di macchina
n1-standard-1
, i nodi avrebbero solo 1 vCPU. Con una configurazione come questa, lo strumento di scalabilità automatica del cluster non attiverebbe lo scale up perché, anche se aggiungesse un nuovo nodo, questo pod non potrebbe essere inserito. Se vuoi scoprire di più sui tipi di macchine disponibili, consulta la guida e la risorsa Confronto delle famiglie di macchine nella documentazione di Compute Engine.
Tieni inoltre presente che le risorse allocabili di un nodo sono inferiori alle risorse totali, in quanto una parte è necessaria per eseguire i componenti di sistema. Per scoprire di più su come viene calcolato, consulta Risorse allocabili dei nodi.
Per risolvere il problema, decidi se le richieste di risorse definite per il carico di lavoro sono adatte alle tue esigenze. Se il tipo di macchina non deve essere modificato, crea un pool di nodi con un tipo di macchina che possa supportare la richiesta proveniente dal pod. Se le richieste di risorse del pod non sono accurate, aggiorna la definizione del pod in modo che i pod possano essere inseriti nei nodi.
Problema: cluster non integri che impediscono lo scale up
Il gestore della scalabilità automatica dei cluster potrebbe non eseguire lo scale up se considera un cluster non integro. L'integrità del cluster non si basa sull'integrità del piano di controllo, ma sul rapporto tra nodi integri e pronti. Se il 45% dei nodi di un cluster non è integro o non è pronto, il gestore della scalabilità automatica del cluster interrompe tutte le operazioni.
Se questo è il motivo per cui il gestore della scalabilità automatica dei cluster non esegue lo scale up, nella ConfigMap del gestore della scalabilità automatica dei cluster è presente un evento di tipo Warning
con ClusterUnhealthy
elencato come motivo.
Per visualizzare ConfigMap, esegui questo comando:
kubectl describe configmap cluster-autoscaler-status -n kube-system
Per risolvere il problema, riduci il numero di nodi non integri.
È anche possibile che alcuni nodi siano pronti, anche se non considerati tali
dal gestore della scalabilità automatica dei cluster. Ciò si verifica quando su un nodo è presente un taint con il prefisso
ignore-taint.cluster-autoscaler.kubernetes.io/
. Il gestore della scalabilità automatica dei cluster considera un nodo come NotReady
finché è presente questo taint.
Se il comportamento è causato dalla presenza di
ignore-taint.cluster-autoscaler.kubernetes.io/.*
taint, rimuovilo.
Passaggi successivi
- Consulta le domande frequenti sullo strumento di scalabilità automatica del cluster Kubernetes.
Guarda un video di YouTube sulla risoluzione dei problemi di ridimensionamento.
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.