Risolvere i problemi relativi a nodi non pronti causati da errori CSE
Questo articolo consente di risolvere i problemi relativi agli scenari in cui un cluster Microsoft servizio Azure Kubernetes (AKS) non è nello Succeeded
stato e un nodo del servizio Azure Kubernetes non è pronto all'interno di un pool di nodi a causa di errori dell'estensione dello script personalizzato.
Prerequisiti
Sintomi
A causa di errori cse, un nodo del cluster del servizio Azure Kubernetes non è pronto all'interno di un pool di nodi e il cluster del servizio Azure Kubernetes non è nello Succeeded
stato.
Causa
La distribuzione dell'estensione del nodo non riesce e restituisce più di un codice di errore quando si effettua il provisioning di kubelet e di altri componenti. Questa è la causa più comune di errori. Per verificare che la distribuzione dell'estensione del nodo abbia esito negativo quando si effettua il provisioning di kubelet, seguire questa procedura:
Per comprendere meglio l'errore corrente nel cluster, eseguire i comandi az aks show e az resource update per configurare il debug:
clusterResourceId=$(az aks show \ --resource-group <resource-group-name> --name <cluster-name> --output tsv --query id) az resource update --debug --verbose --ids $clusterResourceId
Controllare l'output di debug e i messaggi di errore ricevuti dal comando rispetto
az resource update
all'elenco degli errori nel file eseguibile dell'helper CSE in GitHub.
Se uno degli errori implica la distribuzione CSE di kubelet, è stato verificato che lo scenario descritto di seguito è la causa dell'errore Node Not Ready.
In generale, i codici di uscita identificano il problema specifico che causa l'errore. Ad esempio, vengono visualizzati messaggi come "Impossibile comunicare con il server API" o "Impossibile connettersi a Internet". In alternativa, i codici di uscita potrebbero avvisare l'utente dei timeout di rete dell'API o un errore del nodo che richiede una sostituzione.
Soluzione 1: Assicurarsi che il server DNS personalizzato sia configurato correttamente
Configurare il server DNS (Domain Name System) personalizzato in modo che possa eseguire correttamente la risoluzione dei nomi. È necessario configurare il server in modo che soddisfi i seguenti requisiti:
Se si usano server DNS personalizzati, assicurarsi che i server siano integri e raggiungibili in rete.
Assicurarsi che i server DNS personalizzati dispongano dei server d'inoltro condizionale necessari all'indirizzo IP DNS di Azure (o al server d'inoltro a tale indirizzo).
Assicurarsi che la zona DNS privato del servizio Azure Kubernetes sia collegata alle reti virtuali DNS personalizzate, se ospitate in Azure.
Non usare l'indirizzo IP DNS di Azure con gli indirizzi IP del server DNS personalizzato. Questa configurazione non è consigliata.
Evitare di usare indirizzi IP al posto del server DNS, nelle impostazioni DNS. È possibile usare i comandi dell'interfaccia della riga di comando di Azure per verificare questa situazione in un set di scalabilità di macchine virtuali o in un set di disponibilità.
Per i nodi del set di scalabilità di macchine virtuali, usare il comando az vmss run-command invoke :
az vmss run-command invoke \ --resource-group <resource-group-name> \ --name <vm-scale-set-name> \ --command-id RunShellScript \ --instance-id 0 \ --output tsv \ --query "value[0].message" \ --scripts "telnet <dns-ip-address> 53" az vmss run-command invoke \ --resource-group <resource-group-name> \ --name <vm-scale-set-name> \ --instance-id 0 \ --command-id RunShellScript \ --output tsv \ --query "value[0].message" \ --scripts "nslookup <api-fqdn> <dns-ip-address>"
Per i nodi del set di disponibilità della macchina virtuale, usare il comando az vm run-command invoke :
az vm run-command invoke \ --resource-group <resource-group-name> \ --name <vm-availability-set-name> \ --command-id RunShellScript \ --output tsv \ --query "value[0].message" \ --scripts "telnet <dns-ip-address> 53" az vm run-command invoke \ --resource-group <resource-group-name> \ --name <vm-availability-set-name> \ --command-id RunShellScript \ --output tsv \ --query "value[0].message" \ --scripts "nslookup <api-fqdn> <dns-ip-address>"
Per altre informazioni, vedere Risoluzione dei nomi per le risorse nelle reti virtuali di Azure e hub e spoke con DNS personalizzato.
Soluzione 2: Correggere i timeout di rete dell'API
Assicurarsi che il server API sia raggiungibile e non sia soggetto a ritardi. A tale scopo, effettuare i seguenti passaggi:
Controllare la subnet del servizio Azure Kubernetes per verificare se il gruppo di sicurezza di rete assegnato blocca la porta 443 del traffico in uscita al server API.
Controllare il nodo per verificare se ha un altro gruppo di sicurezza di rete che blocca il traffico.
Controllare se sono presenti tabelle di route assegnate nella subnet AKS. Se una tabella di route ha un'appliance virtuale di rete (NVA) o un firewall, assicurarsi che la porta 443 sia disponibile per il traffico in uscita. Per altre informazioni, vedere Controllare il traffico in uscita per i nodi del cluster del servizio Azure Kubernetes.
Se il DNS risolve correttamente i nomi e l'API è raggiungibile, ma il nodo CSE non funziona a causa di un timeout dell'API, eseguire l'azione appropriata, come illustrato nella tabella seguente.
Tipo di set Azione Set di disponibilità della macchina virtuale Eliminare il nodo dal portale di Azure e dall'API del servizio Azure Kubernetes usando il comando kubectl delete node e quindi aumentare nuovamente il cluster. Set di scalabilità della macchina virtuale Ricreazione dell'immagine del nodo dal portale di Azure o eliminazione del nodo e quindi aumento del numero di istanze del cluster. Per eliminare il nodo specifico, usare il comando az aks nodepool delete-machines . Verrà prima di tutto delimitato e svuotato e quindi eliminato il nodo. Se le richieste vengono limitate dal server API del servizio Azure Kubernetes, eseguire l'upgrade a un livello di servizio superiore. Per altre informazioni, vedere Piani tariffari per il servizio Azure Kubernetes.
Ulteriori informazioni
- Per i passaggi generali per la risoluzione dei problemi, vedere Risoluzione dei problemi di base degli errori node non pronti.