Questa pagina mostra come rilevare e risolvere i problemi relativi al gestore della scalabilità automatica del cluster che 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 negativa o imprevista con la propria app o il proprio servizio, nonché agli amministratori e agli operatori della piattaforma che vogliono evitare interruzioni nell'erogazione 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 dei cluster tenta di eseguire lo scale up dei 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 diventa non pianificabile quando lo scheduler Kubernetes non può collocarlo su 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 consente di pianificare il pod. Se l'aggiunta di un nodo consente a un pod di essere eseguito, il gestore della scalabilità automatica del cluster pianificato aggiunge un nuovo nodo al gruppo di istanze gestite (MIG). Lo scheduler Kubernetes può quindi pianificare il pod sul nodo appena provisionato.
Verificare se sono presenti pod non pianificabili
Per determinare se è necessario eseguire lo scale up del cluster, controlla la presenza di pod non pianificati:
Nella console Google Cloud, vai alla pagina Carichi di lavoro.
Nel campo
Filtro, inserisciunschedulable
e premi Invio.Se sono presenti 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 può spesso consentire allo scalatore automatico del cluster di eseguire lo scale up. Per identificare e risolvere gli errori specifici del gestore della scalabilità automatica del cluster, consulta le sezioni seguenti.
Se non sono presenti pod nell'elenco, il gestore della scalabilità automatica del cluster non deve eseguire lo scale up e funziona come previsto.
Verifica se in precedenza avevi pod non pianificabili
Se stai esaminando la causa del fallimento del gestore della scalabilità automatica del cluster in passato, controlla se sono presenti 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 delle 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 presenti risultati, significa che hai avuto 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 ricevere consigli su come risolverlo.
Se non hai ancora visualizzato un messaggio, utilizza una delle seguenti opzioni:
- Problemi risalenti a 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 riscontrato si è verificato meno di 72 ore fa, visualizza le notifiche relative agli errori nella console Google Cloud. Queste notifiche forniscono informazioni preziose sul motivo 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.
Esamina la colonna Notifiche. Le seguenti notifiche sono associate a 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 relativi a questo evento, fai clic su Log. Questa azione ti indirizza a Log Explorer con una query precompilata per aiutarti a esaminare ulteriormente l'evento di scalabilità. Per scoprire di più sul funzionamento degli eventi di scalabilità automatica, consulta Visualizzare gli eventi di 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 visualizzarne 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à automatica, 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: risolvere un problema risalente a più di 72 ore fa
L'esempio seguente mostra come esaminare e risolvere un problema relativo all'aumento di un cluster.
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 puoi trovare i dettagli di registrazione per gli eventi di 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, ad esempio in base a un determinato valore del campo JSON. Scopri di più nelle query dei log avanzati.Non trovi eventi di scale up. Tuttavia, se lo hai fatto, puoi provare a trovare un
EventResult
che contenga lo stessoeventId
dell'eventoscaleUp
. Puoi quindi esaminare il campoerrorMsg
e consultare l'elenco dei possibili messaggi di errore di scaleUp.Poiché non hai trovato eventi
scaleUp
, continua a cercare eventiscaleUp
ed esamina i seguenti campi:noScaleUp
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 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ò eseguire lo scale up di un pool di nodi a causa di un predicato di pianificazione non riuscito per i pod in attesa. I parametri sono il nome del predicato con errore e il motivo dell'errore.
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 ridimensionamento
Una volta identificato l'errore, utilizza le seguenti tabelle per capire cosa lo ha causato e come risolverlo.
Errori di ScaleUp
Puoi trovare i messaggi di errore relativi agli eventi scaleUp
nell'evento eventResult
corrispondente, nel campo resultInfo.results[].errorMsg
.
Messaggio | Dettagli | Parametri | Mitigazione |
---|---|---|---|
"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 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 per il superamento della quota Compute Engine. | ID MIG non riusciti. | Controlla la scheda Errori del gruppo di istanze gestite nella console Google Cloud per vedere quale quota viene superata. Dopo aver scoperto quale quota viene superata, segui le istruzioni per richiedere un aumento della quota. |
"scale.up.error.waiting.for.instances.timeout" |
Impossibile eseguire lo scale up del gruppo di istanze gestite a causa del timeout. | ID MIG non riusciti. | Questo messaggio dovrebbe essere transitorio. Se il problema persiste, contatta l'assistenza clienti Google Cloud per ulteriori accertamenti. |
"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 uno spazio di indirizzi IP non allocati sufficiente da utilizzare per aggiungere nuovi nodi o pod. | ID MIG non riusciti. | Segui la procedura di risoluzione dei problemi descritta in Spazio indirizzi IP non sufficiente 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 a annullare l'eliminazione dell'account di servizio. Se la procedura non va a buon fine, contatta l'assistenza clienti Google Cloud per ulteriori accertamenti. |
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ò eseguire lo scale up del cluster per pianificare i pod. Gli eventi noScaleUp
sono di tipo best effort e non coprono tutti i casi possibili.
Motivi di primo livello di NoScaleUp
I messaggi di motivo di primo livello per gli eventi noScaleUp
vengono visualizzati nel
noDecisionStatus.noScaleUp.reason
campo. Il messaggio contiene un motivo di primo livello per cui il gestore della scalabilità automatica dei cluster non può eseguire lo scale up del cluster.
Messaggio | Dettagli | Mitigazione |
---|---|---|
"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 scalata con un numero elevato di pod. | Questo messaggio dovrebbe essere transitorio. Controlla questo errore dopo qualche minuto. Se il 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 | Mitigazione |
---|---|---|
"no.scale.up.nap.disabled" |
Non è stato possibile eseguire lo scale up del provisioning automatico dei nodi perché il provisioning automatico dei nodi non è abilitato a livello di cluster. Se il provisioning automatico dei nodi è disabilitato, il provisioning dei nuovi nodi non verrà eseguito automaticamente se il pod in attesa contiene requisiti che non possono essere soddisfatti dai pool di nodi esistenti. |
Rivedi la configurazione del cluster e valuta la possibilità di attivare il provisioning automatico dei nodi. |
Motivi di NoScaleUp a livello di MIG
I messaggi di 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 gruppo di istanze gestite.
Messaggio | Dettagli | Parametri | Mitigazione |
---|---|---|---|
"no.scale.up.mig.skipped" |
Impossibile fare lo scale up di un gruppo di istanze gestite perché è stato ignorato durante la simulazione. | Motivi per cui il MIG è stato ignorato (ad esempio, manca un requisito per i pod). | Esamina i parametri inclusi nel messaggio di errore e risolvi il motivo per cui la MIG è stata ignorata. |
"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 con errore e motivi dell'errore. | Esamina i requisiti del pod, ad esempio regole di affinità, incompatibilità o tolleranze e requisiti delle risorse. |
Motivi per cui non è stato eseguito lo scale up del provisioning automatico dei nodi a livello di gruppo di pod
I messaggi relativi al motivo del provisioning automatico dei nodi a livello di gruppo di pod per gli eventi noScaleUp
vengono visualizzati nel
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 pool di nodi per pianificare un determinato gruppo di pod.
Messaggio | Dettagli | Parametri | Mitigazione |
---|---|---|---|
"no.scale.up.nap.pod.gpu.no.limit.defined" |
Il provisioning automatico dei nodi non ha potuto 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. | Esamina 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 tipo di GPU del pod in attesa 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é ciò violerebbe i limiti massimi di risorse a livello di cluster, supererebbe le risorse disponibili nella zona oppure non esiste un tipo di macchina adatto alla richiesta. | Nome della zona considerata. | 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. | Esamina i requisiti del pod in attesa, ad esempio regole di affinità, contaminazioni, tolleranze o requisiti delle risorse. |
Eseguire 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 per il tuo 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 tecnici Google Cloud. Non è un prodotto Google Cloud supportato ufficialmente.
Se hai visualizzato 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 di utilizzo di gcpdiag
.
Risolvere errori di ridimensionamento complessi
Le sezioni seguenti forniscono indicazioni per la risoluzione degli errori in cui le mitigazioni richiedono più passaggi ed errori a cui non è associato un messaggio di evento di 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 è presente 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 alle risorse GPU, memoria e di archiviazione. Per confrontare le richieste di CPU con le CPU di cui è stato eseguito il provisioning:
Nella console Google Cloud, vai alla pagina Carichi di lavoro.
Fai clic sul messaggio di errore
PodUnschedulable
.Nel riquadro Dettagli, fai clic sul nome del pod. Se sono presenti più pod, inizia con il primo e ripeti la procedura per ogni 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 avranno solo 1 vCPU. Con una configurazione come questa, il gestore della scalabilità automatica del cluster non attiverebbe il ridimensionamento in aumento perché, anche se aggiungesse un nuovo nodo, questo pod non ci starebbe. Se vuoi saperne di più sui tipi di macchine disponibili, consulta la guida alle risorse e al 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, poiché una parte è necessaria per eseguire i componenti di sistema. Per scoprire di più su come viene calcolato questo valore, 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 in grado di supportare la richiesta proveniente dal pod. Se le richieste di risorse del pod non sono precise, 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 ritiene che un cluster non sia in stato corretto. Lo stato non integro 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 è operativo 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, nel ConfigMap del gestore della scalabilità automatica dei cluster è presente un evento di tipo Warning
con ClusterUnhealthy
elencato come motivo.
Per visualizzare il ConfigMap, esegui il comando seguente:
kubectl describe configmap cluster-autoscaler-status -n kube-system
Per risolvere il problema, riduci il numero di nodi non operativi.
È anche possibile che alcuni dei nodi siano pronti, anche se non considerati tali dal gestore della scalabilità automatica del cluster. Questo accade quando su un nodo è presente un'alterazione con il prefisso ignore-taint.cluster-autoscaler.kubernetes.io/
. Il gestore della scalabilità automatica dei cluster considera un nodo NotReady
finché è presente l'alterazione.
Se il comportamento è causato dalla presenza di contaminazione ignore-taint.cluster-autoscaler.kubernetes.io/.*
, rimuovila.
Passaggi successivi
- Consulta le domande frequenti sull'autoscaling del cluster Kubernetes.
- Guarda un video di YouTube sulla risoluzione dei problemi di scaling.
- Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.