Risolvi i problemi relativi al mancato scale up del gestore della scalabilità automatica dei cluster


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 un problema imprevisto o situazione negativa relativa alla loro app o al loro servizio e agli amministratori e agli operatori della piattaforma che vogliono evitare l'interruzione della 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 dei cluster tenta di eseguire lo scale up dei nodi. Gestore della scalabilità automatica dei cluster aggiunge nodi solo quando le risorse esistenti non sono sufficienti.

Ogni 10 secondi, il gestore della scalabilità automatica dei 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 permettesse a un pod di ottenere il gestore della scalabilità automatica dei cluster pianificati 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:

  1. Nella console Google Cloud, vai alla pagina Carichi di lavoro.

    Vai a Carichi di lavoro

  2. Nel campo Filtro, inserisci unschedulable e premi Invio.

    Se sono elencati pod, significa che sono presenti pod non pianificabili. A risolvere i problemi relativi ai pod non pianificabili, Errore: pod non pianificabile. La risoluzione della causa sottostante dei pod non pianificabili può spesso consentire al gestore della scalabilità automatica del cluster di eseguire lo scale up. Per identificare e risolvere gli errori che sono specifiche per il gestore della scalabilità automatica dei cluster, esplora le sezioni seguenti.

    Se non sono presenti pod nell'elenco, il gestore della scalabilità automatica dei cluster non deve eseguire lo scale up e funziona come previsto.

Verifica se in precedenza avevi pod non pianificabili

Se stai esaminando cosa ha causato in passato un errore del gestore della scalabilità automatica dei cluster, per controllare i pod precedentemente non pianificabili:

  1. Nella console Google Cloud, vai alla pagina Esplora log.

    Vai a Esplora log

  2. Specifica un intervallo di tempo per le voci di log che vuoi visualizzare.

  3. 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.

  4. Fai clic su Esegui query.

    Se vengono elencati dei risultati, significa che nel periodo in esame avevi pod non pianificabili dell'intervallo 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:

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 passaggi:

  1. Nella console Google Cloud, vai alla pagina Cluster Kubernetes.

    Vai ai cluster Kubernetes

  2. 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
  3. Fai clic sulla notifica pertinente per visualizzare un riquadro con i dettagli sulla causa del problema e le azioni consigliate per risolverlo.

  4. (Facoltativo) Per visualizzare i log per questo evento, fai clic su Log. Questa azione richiede a Esplora log con una query precompilata per aiutarti ulteriormente analizza l'evento di scalabilità. Per saperne di più su come funzionano gli eventi di scale up, consulta Visualizza gestore della scalabilità automatica dei cluster eventi.

Se continui a riscontrare problemi dopo aver letto i consigli nel notifica, consulta le tabelle dei messaggi di errore per ulteriori guida.

Visualizza 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 il seguenti passaggi:

  1. Nella console Google Cloud, vai alla pagina Cluster Kubernetes.

    Vai ai cluster Kubernetes

  2. Seleziona il nome del cluster che vuoi esaminare per visualizzarne Pagina Dettagli cluster.

  3. Nella pagina Dettagli cluster, fai clic sulla scheda Log.

  4. Nella scheda Log, fai clic sulla scheda Log di scalabilità automatica per visualizzare i log.

  5. (Facoltativo) Per applicare filtri più avanzati e restringere i risultati, fai clic sull'icona con la freccia sul lato destro della pagina per visualizzare i log Esplora log.

Per scoprire di più sul funzionamento degli eventi di scalabilità automatica, consulta Visualizzare gli eventi di scalabilità automatica del cluster. Per uno esempio di come utilizzare Cloud Logging, consulta la seguente risoluzione dei problemi esempio.

Esempio: risolvere un problema risalente a più di 72 ore fa

L'esempio seguente mostra come potresti esaminare e risolvere un problema con un cluster che non esegue lo scale up.

Scenario: nell'ultima ora, un pod è stato contrassegnato come non pianificabile. Gruppo il gestore della scalabilità automatica non ha eseguito il provisioning di nuovi nodi per pianificare il pod.

Soluzione:

  1. Poiché il problema si è verificato più di 72 ore fa, lo esamini utilizzando Cloud Logging anziché esaminare i messaggi di notifica.
  2. In Cloud Logging, troverai i dettagli di logging per il cluster degli eventi del gestore della scalabilità automatica, come descritto Visualizza gli errori negli eventi.
  3. Cerca gli eventi scaleUp che contengono il pod che stai esaminando nel campo triggeringPods. Puoi filtrare le voci di log, ad esempio in base a un determinato valore del campo JSON. Scopri di più nella sezione Query su log avanzati.

  4. Non trovi eventi di ridimensionamento. Tuttavia, se lo hai fatto, puoi provare a trovare un EventResult che contenga lo stesso eventId dell'evento scaleUp. Puoi quindi esaminare il campo errorMsg e consultare l'elenco dei possibili messaggi di errore di scaleUp.

  5. Poiché non hai trovato eventi scaleUp, continua a cercare eventi scaleUp ed esamina i seguenti campi:

    • unhandledPodGroups: contiene informazioni sul pod (o controller del pod).
    • reason: fornisce motivi globali che indicano che lo scale up potrebbe essere bloccato.
    • skippedMigs: fornisce i motivi per cui alcuni gruppi di istanze gestite potrebbero essere ignorati.
  6. Trovi un evento noScaleUp per il tuo pod e tutti i MIG nel campo rejectedMigs 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. Elimini selettore dal manifest del pod e ricrearlo. Il gestore della scalabilità automatica dei cluster aggiunge un nuovo nodo e il pod viene pianificato.

Risolvere gli errori di ridimensionamento

Dopo aver identificato l'errore, utilizza le seguenti tabelle per capire cosa ha causato l'errore 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 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 di una risorsa Compute Engine, come GPU o CPU. ID MIG non riusciti. Segui le passaggi per la risoluzione dei problemi relativi alla 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 visualizzare e la quota superata. Una volta stabilito quale quota viene 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 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 in Spazio di indirizzi IP libero 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 a annullare l'eliminazione dell'account di servizio. Se la procedura non va a buon fine, contatta l'assistenza clienti Google Cloud per ulteriori indagini.

Motivi per 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 prevedono il criterio del "best effort" e non coprono tutti i casi possibili.

Motivi di primo livello 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 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 scalata con un numero elevato di pod. Questo messaggio dovrebbe essere temporaneo. Controlla questo errore dopo alcune minuti. Se il messaggio persiste, contatta l'assistenza clienti Google Cloud per ulteriori indagini.

Motivi del provisioning automatico dei nodi di primo livello NoScaleUp

Vengono visualizzati messaggi sul motivo del provisioning automatico dei nodi di primo livello per noScaleUp eventi nel campo noDecisionStatus.noScaleUp.napFailureReason. Il messaggio contiene un motivo principale 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"

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 ha requisiti che non possono essere soddisfatti dai pool di nodi esistenti.

Rivedi la configurazione del cluster e valuta la possibilità abilitare il provisioning automatico dei nodi.

Motivi a livello di MIG NoScaleUp

I messaggi del motivo a livello di gruppo di istanze gestite per noScaleUp eventi vengono visualizzati nel noDecisionStatus.noScaleUp.skippedMigs[].reason e noDecisionStatus.noScaleUp.unhandledPodGroups[].rejectedMigs[].reason campi. 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 Attenuazione
"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 gruppo di istanze gestite è stato ignorato (ad esempio, mancanza di un pod requisito). 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

Messaggi del motivo del provisioning automatico dei nodi a livello di gruppo di pod per noScaleUp eventi appaiono nel noDecisionStatus.noScaleUp.unhandledPodGroups[].napFailureReasons[]. La messaggio contiene un motivo per cui il gestore della scalabilità automatica dei cluster non può eseguire il provisioning di un nuovo nodo per pianificare un particolare gruppo di pod.

Messaggio Dettagli Parametri Attenuazione
"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 il pod in attesa ha una richiesta GPU, 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 il livello di cluster configurazione del provisioning automatico dei nodi 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 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 le limiti massimi di risorse a livello di cluster, superino le risorse disponibili nella zona oppure non esiste un tipo di macchina che potesse soddisfare la richiesta. Nome della zona considerata. Esamina e aggiorna i limiti massimi di risorse a livello di cluster, le richieste di risorse pod o i limiti 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 in questa zona a causa di predicati con errori. Nome della zona considerata e motivi per cui i predicati non sono riusciti. Rivedi i requisiti del pod in attesa, come le regole di affinità, incompatibilità, 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.

Analizza gli errori in Esplora log

Se vuoi effettuare ulteriori accertamenti in merito al messaggio di errore, visualizza i log specifici per l'errore:

  1. Nella console Google Cloud, vai alla pagina Esplora log.

    Vai a Esplora log

  2. Nel riquadro delle 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 desiderato per indagare. Ad esempio, scale.up.error.out.of.resources.

  3. Fai clic su Esegui query.

Esegui il debug di alcuni errori con gcpdiag

gcpdiag è uno strumento open source creato con il supporto degli ingegneri tecnici di Google Cloud. Non è un prodotto Google Cloud ufficialmente supportato.

Se è stato visualizzato uno dei seguenti messaggi di errore, puoi utilizzare gcpdiag per aiutarti a 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.

Risolvi complessi errori di scale up

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 fatto lo scale up, le richieste di risorse con quelle 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. dopo aver eseguito il provisioning delle CPU, completa i seguenti passaggi:

  1. Nella console Google Cloud, vai alla pagina Carichi di lavoro.

    Vai a Carichi di lavoro

  2. Fai clic sul messaggio di errore PodUnschedulable.

  3. 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.

  4. Nella pagina Dettagli pod, vai alla scheda Eventi.

  5. Nella scheda Eventi, vai alla scheda YAML.

  6. Tieni presente che le richieste di risorse di ogni container nel pod richieste di risorse. Ad esempio, nella seguente configurazione di pod, il pod ha bisogno di 2 vCPU:

    resources:
      limits:
        cpu: "3"
     requests:
        cpu: "2"
    
  7. Visualizza i dettagli del pool di nodi dal cluster con il pod non pianificato:

    1. Nella console Google Cloud, vai alla pagina Cluster Kubernetes.

      Vai ai cluster Kubernetes

    2. Fai clic sul nome del cluster che contiene il messaggio di errore Pods unschedulable.

    3. Nella pagina Dettagli cluster, vai alla scheda Nodi.

  8. Nella sezione Pool di nodi, prendi nota del valore nella colonna Tipo di macchina. Ad esempio: n1-standard-1.

  9. 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 n1-standard-1, i nodi avranno solo 1 vCPU. Con un come questa, il gestore della scalabilità automatica dei cluster non attiverà lo scale up perché anche se aggiungesse un nuovo nodo, questo pod non vi starebbe affatto. Se Per saperne di più sui tipi di macchine disponibili, consulta Famiglie di macchine alla guida alle risorse e al confronto nel 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 saperne di più su come viene calcolato, vedi Nodi allocabili Google Cloud.

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 considera che un cluster non è integro. 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 è in stato corretto 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 si verifica quando è presente un'incompatibilità con il prefisso ignore-taint.cluster-autoscaler.kubernetes.io/ è presente su un nodo. Gruppo il gestore della scalabilità automatica considera un nodo NotReady, purché sia presente tale incompatibilità.

Se il comportamento è causato dalla presenza di contaminazione ignore-taint.cluster-autoscaler.kubernetes.io/.*, rimuovila.

Passaggi successivi