Share via


Risolvere i problemi relativi a servizio Azure Kubernetes cluster o nodi in uno stato non riuscito

Questo articolo illustra come risolvere i problemi di un cluster o di un nodo di Microsoft servizio Azure Kubernetes (AKS) che entra in uno stato di errore.

Cause comuni

Di seguito sono riportate le cause comuni di un cluster o di un pool di nodi non riuscito:

Causa Riferimento
Errore di provisioning dell'estensione cse (Custom Script Extension) della macchina virtuale (VM) Risolvere gli errori del nodo non pronti causati da errori cse
Risorse di Azure principali non disponibili
Errore di allocazione della macchina virtuale a causa della mancanza di capacità a livello di area/area
Errore di allocazione della macchina virtuale a causa del superamento della quota core Errore quotaexceeded
Restrizioni imposte dal cliente
Problemi del carico di lavoro

Risoluzione di base degli errori comuni che causano l'esito negativo di un cluster/nodo

La tabella seguente descrive alcuni errori comuni che possono causare l'immissione di uno stato di errore in un cluster o in un nodo, le relative descrizioni e i metodi di risoluzione dei problemi di base per risolvere questi errori.

Error Descrizione Metodo di risoluzione dei problemi
OutboundConnFailVMExtensionError Questo errore indica che l'installazione o l'aggiornamento dell'estensione della macchina virtuale non riesce a causa della mancanza di connettività in uscita. Controllare le regole del gruppo di sicurezza di rete e le impostazioni del firewall della macchina virtuale o del set di scalabilità di macchine virtuali. Assicurarsi che la macchina virtuale o il set di scalabilità di macchine virtuali possa accedere a questi endpoint: https://aka.ms/aks/outbound, https://aka.ms/aks/ssh, https://aka.ms/aks/agente https://aka.ms/aks/containerinsights.
Errore di svuotamento Questo errore indica che il nodo non riesce a svuotarsi prima dell'operazione di aggiornamento. Controllare lo stato del pod e gli eventi nel nodo usando i comandi kubectl: kubectl get pods --all-namespaces -o wide e kubectl describe pod <pod-name> -n <namespace>. Cercare eventuali pod bloccati in uno stato terminato o sconosciuto o con eventuali errori o avvisi negli eventi. Potrebbe essere necessario forzare l'eliminazione dei pod o riavviare il servizio kubelet nel nodo.
Errore SubscriptionNotRegistered Questo errore indica che la sottoscrizione non è registrata per l'uso del provider di risorse del servizio Azure Kubernetes. Registrare la sottoscrizione usando il az provider register --namespace Microsoft.ContainerService comando .
Errore RequestDisallowedByPolicy Questo errore indica che l'operazione è bloccata da un criterio applicato alla sottoscrizione o al gruppo di risorse. Esaminare i dettagli dei criteri e gli ambiti di assegnazione dei criteri. Per consentire l'operazione, potrebbe essere necessario modificare o escludere i criteri.
Errore quotaExceeded Questo errore indica che l'operazione supera il limite di quota per un tipo di risorsa o un'area. Controllare l'utilizzo della quota e il limite di quota correnti per il tipo di risorsa o l'area usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell. Potrebbe essere necessario eliminare alcune risorse inutilizzate o richiedere un aumento della quota.
Errore PublicIPCountLimitReached Questo errore indica che l'operazione raggiunge il numero massimo di indirizzi IP pubblici che possono essere creati in una sottoscrizione o in un'area. Controllare l'utilizzo dell'indirizzo IP pubblico corrente e il limite per la sottoscrizione o l'area usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell. Potrebbe essere necessario eliminare alcuni indirizzi IP pubblici inutilizzati o richiedere un aumento del limite di indirizzi IP pubblici.
Errore overconstrainedAllocationRequest Questo errore indica che l'operazione non riesce ad allocare le dimensioni della macchina virtuale richieste in un'area. Controllare la disponibilità delle dimensioni della macchina virtuale nell'area usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell. Potrebbe essere necessario scegliere una dimensione di macchina virtuale diversa o un'area diversa.
Errore ReadOnlyDisabledSubscription Questo errore indica che la sottoscrizione è attualmente disabilitata e impostata su sola lettura. Esaminare e modificare le autorizzazioni di sottoscrizione perché la sottoscrizione potrebbe essere stata sospesa a causa di problemi di fatturazione, di credito scaduto o di violazioni dei criteri.

Risoluzione di base di altri possibili problemi che causano l'esito negativo di un cluster/nodo

Questa tabella descrive altri possibili problemi che possono causare l'immissione di uno stato di errore in un cluster o in un nodo, le relative descrizioni e soluzioni per risolvere questi problemi.

Problema Descrizione Soluzione
Le dimensioni della subnet sono troppo piccole L'operazione non può creare o aggiornare il cluster perché la subnet non dispone di spazio sufficiente per il numero di nodi richiesto. Eliminare il pool di nodi e crearne uno nuovo con dimensioni di subnet maggiori usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell.
La rete virtuale è bloccata L'operazione non può comunicare con il server API cluster o il piano di controllo Kubernetes perché il firewall o un'impostazione DNS (Domain Name System) personalizzata blocca le connessioni in uscita dai nodi. Consentire il traffico del nodo nel firewall e configurare la risoluzione DNS in Azure usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell.
Problemi di PDB L'operazione non può aggiornare il cluster perché un file PDB ha arrestato la rimozione di uno o più pod. Un PDB è una risorsa che limita il numero di pod che possono essere terminati volontariamente durante un periodo specifico. Rimuovere temporaneamente il file PDB, riconciliare il cluster e quindi aggiungere nuovamente il file PDB usando lo strumento da riga di comando kubectl.
Problemi dell'infrastruttura L'operazione non può aggiornare il cluster a causa di un problema interno con il servizio Azure Resource Manager (ARM) che gestisce le risorse in Azure. Eseguire una riconciliazione del pool di agenti per ogni pool di nodi e una riconciliazione per il cluster gestito usando l'interfaccia della riga di comando di Azure o Azure PowerShell.
Errori del server API L'operazione non può raggiungere il server API del cluster o il piano di controllo Kubernetes a causa di un'interruzione o di un bug. Segnalarlo al team di supporto del servizio Azure Kubernetes e fornire i log e le informazioni di diagnostica pertinenti. È possibile ottenere i log e le informazioni di diagnostica usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell.

Nota

  • L'operazione menzionata nella tabella precedente fa riferimento a qualsiasi operazione di aggiornamento (PUT) attivata dal lato cliente.
  • In Kubernetes è presente un componente all'interno di un controller. Garantisce lo stato effettivo del mondo, inclusi lo stato del cluster e gli stati potenzialmente esterni, ad esempio l'esecuzione di contenitori per Kubelet o i servizi di bilanciamento del carico per un provider di servizi cloud. Si allinea allo stato desiderato specificato in un oggetto . Questo processo di allineamento è una funzione chiave del controller. Per il servizio Azure Kubernetes, questo componente garantisce che lo stato del cluster del servizio Azure Kubernetes sia allineato alla configurazione desiderata. Per attivarlo manualmente, eseguire az resource update --ids <AKS cluster id>. È possibile ottenere l'ID cluster del servizio Azure Kubernetes eseguendo az aks show -n <cluster name> -g <cluster resource group> -o json --query id. Se esistono differenze tra gli stati effettivi e desiderati, intraprendere le azioni necessarie per correggere queste discrepanze.

Controllo dello stato di provisioning

Per controllare lo stato del cluster, selezionare Controllo stato provisioning. Viene quindi visualizzato lo stato di provisioning del cluster e del pool di agenti.

Screenshot che mostra l'opzione

Scenario 1: lo stato del cluster non è riuscito

Per risolvere questo problema, ottenere l'operazione che causa l'errore e individuare l'errore. Di seguito sono riportati due errori di operazione comuni che possono causare un cluster non riuscito:

  • Creazione del cluster non riuscita
  • Aggiornamento del cluster non riuscito

Se lo stato di un cluster creato o aggiornato di recente non è riuscito, usare i metodi seguenti per risolvere l'errore:

Visualizzare il log attività per un cluster non riuscito usando il portale di Azure

Per visualizzare i log attività per un cluster non riuscito dal portale di Azure, seguire questa procedura:

  1. Nella portale di Azure passare alla pagina Gruppi di risorse e selezionare il gruppo di risorse che contiene il cluster.

  2. Nella pagina Panoramica selezionare il nome del cluster nell'elenco delle risorse.

  3. Nella pagina del cluster selezionare Log attività dal menu a sinistra.

  4. Nella pagina Log attività è possibile filtrare gli eventi in base a Stato, Intervallo di tempo, Evento avviato da e Categoria di eventi. Ad esempio, è possibile selezionare Non riuscito dall'elenco a discesa Stato per visualizzare solo gli eventi non riusciti.

    Screenshot che mostra come filtrare gli eventi nella pagina

  5. Per controllare i dettagli di un evento, selezionare il nome dell'evento dall'elenco. Verrà aperto un nuovo riquadro con il riepilogo eventi, le proprietà e i dati JSON. È anche possibile scaricare i dati JSON come file.

  6. Per controllare il codice di errore e il messaggio associati all'evento, scorrere verso il basso fino alla sezione Stato nel riepilogo dell'evento. È anche possibile trovare le informazioni sull'errore nelle sezioni relative alle proprietà e ai dati JSON.

Visualizzare il log attività per un cluster non riuscito usando l'interfaccia della riga di comando di Azure

Se si preferisce usare l'interfaccia della riga di comando di Azure per visualizzare il log attività per un cluster non riuscito, seguire questa procedura:

  1. Installare l'interfaccia della riga di comando di Azure nel computer e accedere con l'account Azure.

  2. Elencare i gruppi di risorse nella sottoscrizione usando il az group list comando e trovare il nome del gruppo di risorse che contiene il cluster.

  3. Elencare le risorse nel gruppo di risorse usando il az resource list comando con il --resource-group parametro e trovare il nome del cluster.

  4. Elencare il log attività del cluster usando il az monitor activity-log list comando con i --resource-group parametri e --resource . È anche possibile usare i --statusparametri , --start-time, --end-time, --callere --filter per filtrare gli eventi in base a criteri diversi. Ad esempio, è possibile usare --status Failed per visualizzare solo gli eventi non riusciti.

  5. Visualizzare i dettagli di un evento specifico usando il az monitor activity-log show comando con i --resource-groupparametri , --resourcee --event-id . È possibile trovare l'ID evento dall'output del comando precedente. L'output includerà il riepilogo eventi, le proprietà e i dati JSON. È anche possibile usare il --output parametro per modificare il formato di output.

  6. Per visualizzare il codice di errore e il messaggio associati all'evento, cercare il statusMessage campo nell'output del comando. È anche possibile trovare le informazioni sull'errore nelle sezioni relative alle proprietà e ai dati JSON.

    Screenshot che mostra i dati JSON.

Usare la funzionalità Diagnostica e risoluzione dei problemi del servizio Azure Kubernetes per un cluster non riuscito

Nel portale di Azure passare alla risorsa cluster del servizio Azure Kubernetes e selezionare Diagnosticare e risolvere i problemi dal menu a sinistra. Verrà visualizzato un elenco di categorie e scenari che è possibile selezionare per eseguire controlli di diagnostica e ottenere soluzioni consigliate.

Nell'interfaccia della riga di comando di Azure usare il az aks collect comando con i --name parametri e --resource-group per raccogliere dati di diagnostica dai nodi del cluster. È anche possibile usare i --storage-account parametri e --sas-token per specificare un account di archiviazione di Azure in cui verranno caricati i dati. L'output includerà un collegamento al pannello Diagnostica e risoluzione dei problemi in cui è possibile visualizzare i risultati e le azioni suggerite.

Nel pannello Diagnosticare e risolvere i problemi è possibile selezionare Problemi del cluster come categoria. Se vengono rilevati problemi, verrà visualizzato un elenco di possibili soluzioni che è possibile seguire per risolverli.

Screenshot che mostra le possibili soluzioni nel portale

Scenario 2: lo stato del nodo non è riuscito

In rari casi, un'operazione di scollegamento del disco di Azure potrebbe avere esito negativo, lasciando la macchina virtuale del nodo in uno stato di errore.

Per risolvere questo problema, aggiornare manualmente lo stato della macchina virtuale usando uno dei metodi seguenti:

  • Per un cluster basato su un set di disponibilità, eseguire il comando az vm update seguente:

    az vm update --resource-group <resource-group-name> --name <vm-name>
    
  • Per un cluster basato su un set di scalabilità di macchine virtuali, eseguire il comando az vmss update-instances seguente:

    az vmss update-instances --resource-group <resource-group-name> --name <scale-set-name> --instance-id <vm-or-scale-set-id>
    

Scenario 3: Lo stato del pool di nodi non è riuscito

Questo problema può verificarsi quando il set di scalabilità di macchine virtuali o il set di disponibilità che esegue il backup del pool di nodi rileva un errore durante il provisioning, il ridimensionamento o l'aggiornamento. Questo problema può essere dovuto a capacità insufficiente, limiti di quota, problemi di rete, violazioni dei criteri, blocchi di risorse o altri fattori che impediscono l'allocazione o la configurazione corretta della macchina virtuale.

Per risolvere il problema, procedere come segue:

  1. Controllare lo stato del pool di nodi usando il az aks nodepool show comando . Se lo stato di provisioning è Failed, è possibile visualizzare il messaggio di errore e il codice nell'output.
  2. Controllare lo stato del set di scalabilità di macchine virtuali o del set di disponibilità usando il az vmss show comando o az vm availability-set show . Se lo stato di provisioning è Failed, è possibile visualizzare il messaggio di errore e il codice nell'output.
  3. Controllare lo stato della singola macchina virtuale nel pool di nodi usando il az vmss list-instances comando o az vm list . Se una macchina virtuale è in uno Failed stato o Unhealthy , è possibile visualizzare il messaggio di errore e il codice nell'output.
  4. Controllare il log attività e l'impostazione di diagnostica del set di scalabilità di macchine virtuali o del set di disponibilità per verificare se sono presenti eventi o avvisi che indicano la causa dell'errore. È possibile usare il portale di Azure, l'interfaccia della riga di comando di Azure o l'API di Monitoraggio di Azure per accedere al log attività e all'impostazione di diagnostica.
  5. Controllare la quota e la capacità dell'area e della sottoscrizione in cui viene distribuito il pool di nodi. È possibile usare il az vm list-usage comando o il portale di Azure per controllare la quota e la capacità. Se viene raggiunto il limite di quota o capacità, è possibile richiedere un aumento o eliminare alcune risorse inutilizzate.
  6. Controllare le assegnazioni di criteri e ruoli del pool di nodi. È possibile usare i az policy comandi e az role o il portale di Azure per controllare le definizioni, le assegnazioni, la conformità e le esenzioni dei criteri. È anche possibile controllare le assegnazioni di ruolo e le autorizzazioni del pool di nodi usando il az role assignment comando o il portale di Azure.
  7. Controllare i blocchi delle risorse del pool di nodi. È possibile usare il az lock comando o il portale di Azure per controllare il livello di blocco, l'ambito e le note. È anche possibile eliminare o aggiornare il blocco, se necessario.

Altri strumenti di registrazione e diagnostica

Se i metodi di risoluzione dei problemi precedenti non consentono di risolvere il problema, è possibile usare gli strumenti di registrazione e diagnostica seguenti per raccogliere altre informazioni e identificare la causa radice:

  • Monitoraggio di Azure per i contenitori:

    Questo servizio raccoglie e analizza metriche e log dai cluster del servizio Azure Kubernetes e dai nodi. Monitoraggio di Azure per i contenitori può monitorare l'integrità, le prestazioni e la disponibilità del cluster e dei nodi. È anche possibile usarlo per visualizzare i log dei contenitori, i log kubelet e i log di diagnostica di avvio dei nodi.

  • Periscopio del servizio Azure Kubernetes

    Questo strumento raccoglie i log di nodi e pod, le informazioni di rete e la configurazione del cluster da un cluster del servizio Azure Kubernetes e li carica in un account di archiviazione di Azure. Questo strumento consente di risolvere i problemi comuni del cluster, ad esempio la risoluzione DNS, la connettività di rete e lo stato del nodo. È anche possibile usarlo per generare una richiesta di supporto con i log raccolti collegati.

  • Diagnostica del servizio Azure Kubernetes

    Questo strumento esegue una serie di controlli sui cluster del servizio Azure Kubernetes e sui nodi e fornisce raccomandazioni e passaggi di correzione per i problemi comuni. Questo strumento consente di risolvere i problemi relativi alla creazione, all'aggiornamento, al ridimensionamento, alla rete, all'archiviazione e alla sicurezza del cluster. È anche possibile usarlo per generare una richiesta di supporto con i risultati della diagnostica collegati.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.