Freigeben über


Problembehandlung bei Fehlern vom Typ „Knoten nicht bereit“, die durch CSE-Fehler verursacht werden

Dieser Artikel hilft Ihnen bei der Problembehandlung bei Szenarien, in denen sich ein Microsoft Azure Kubernetes Service (AKS)-Cluster nicht im Succeeded Zustand befindet und ein AKS-Knoten aufgrund von CSE-Fehlern (Custom Script Extension) nicht in einem Knotenpool bereit ist.

Voraussetzungen

Symptome

Aufgrund von CSE-Fehlern ist ein AKS-Clusterknoten nicht innerhalb eines Knotenpools bereit, und der AKS-Cluster befindet sich nicht im Succeeded Zustand.

Ursache

Die Bereitstellung der Knotenerweiterung schlägt fehl und gibt mehr als einen Fehlercode zurück, wenn Sie das Kubelet und andere Komponenten bereitstellen. Dies ist die häufigste Ursache für Fehler. Führen Sie die folgenden Schritte aus, um zu überprüfen, ob die Bereitstellung der Knotenerweiterung fehlschlägt, wenn Sie das Kubelet bereitstellen:

  1. Um den aktuellen Fehler auf dem Cluster besser zu verstehen, führen Sie die az aks show - und az-Ressourcenaktualisierungsbefehle aus, um das Debuggen einzurichten:

    clusterResourceId=$(az aks show \
        --resource-group <resource-group-name> --name <cluster-name> --output tsv --query id)
    az resource update --debug --verbose --ids $clusterResourceId
    
  2. Überprüfen Sie die Debugausgabe und die Fehlermeldungen, die Sie vom Befehl für az resource update die Fehlerliste in der ausführbaren CSE-Hilfsdatei auf GitHub erhalten haben.

Wenn eines der Fehler die CSE-Bereitstellung des Kubelet umfasst, haben Sie überprüft, dass das hier beschriebene Szenario die Ursache des Fehlers "Node Not Ready" ist.

Im Allgemeinen identifizieren Exitcodes das spezifische Problem, das den Fehler verursacht. Beispielsweise werden Meldungen wie "Mit API-Server kann nicht kommunizieren" oder "Mit dem Internet kann keine Verbindung hergestellt werden" angezeigt werden. Oder die Beendigungscodes benachrichtigen Sie möglicherweise über API-Netzwerktimeouts oder einen Knotenfehler, der einen Ersatz benötigt.

Lösung 1: Stellen Sie sicher, dass Ihr benutzerdefinierter DNS-Server ordnungsgemäß konfiguriert ist.

Richten Sie Ihren benutzerdefinierten DNS-Server (Domain Name System) so ein, dass er die Namensauflösung ordnungsgemäß ausführen kann. Konfigurieren Sie den Server so, dass er die folgenden Anforderungen erfüllt:

  • Wenn Sie benutzerdefinierte DNS-Server verwenden, stellen Sie sicher, dass die Server in Ordnung und über das Netzwerk erreichbar sind.

  • Stellen Sie sicher, dass benutzerdefinierte DNS-Server über die erforderlichen bedingten Weiterleitungen an die Azure DNS-IP-Adresse (oder die Weiterleitung an diese Adresse) verfügen.

  • Stellen Sie sicher, dass Ihre private AKS DNS-Zone mit Ihren benutzerdefinierten virtuellen DNS-Netzwerken verknüpft ist, wenn diese auf Azure gehostet werden.

  • Verwenden Sie die IP-Adresse von Azure DNS nicht mit den IP-Adressen Ihres benutzerdefinierten DNS-Servers. Dies wird nicht empfohlen.

  • Vermeiden Sie die Verwendung von IP-Adressen anstelle des DNS-Servers in den DNS-Einstellungen. Sie können Azure CLI-Befehle verwenden, um auf diese Situation in einem Vm Scale Set oder Verfügbarkeitssatz zu überprüfen.

    • Verwenden Sie für Vm Scale Set-Knoten den Befehl "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>"
      
    • Verwenden Sie für VM-Verfügbarkeitssatzknoten den Befehl "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>"
      

Weitere Informationen finden Sie unter Namensauflösung für Ressourcen in virtuellen Azure-Netzwerken und Hub und sprach mit benutzerdefiniertem DNS.

Lösung 2: Beheben von API-Netzwerktimeouts

Stellen Sie sicher, dass der API-Server erreichbar ist und keine Verzögerungen auftreten. Gehen Sie dazu wie folgt vor:

  • Überprüfen Sie das AKS-Subnetz, um festzustellen, ob die zugewiesene Netzwerksicherheitsgruppe (NSG) den Ausgehenden Datenverkehrsport 443 an den API-Server blockiert.

  • Überprüfen Sie den Knoten selbst, um festzustellen, ob der Knoten über einen anderen NSG verfügt, der den Datenverkehr blockiert.

  • Überprüfen Sie das AKS-Subnetz auf eine beliebige zugewiesene Routentabelle. Wenn eine Routentabelle über ein virtuelles Anwendung (Network Virtual Anwendung, NVA) oder Firewall verfügt, stellen Sie sicher, dass Port 443 für den Ausgehenden Datenverkehr verfügbar ist. Weitere Informationen finden Sie unter Steuern des ausgehenden Datenverkehrs für Clusterknoten in Azure Kubernetes Service (AKS).

  • Wenn die DNS-Namen erfolgreich auflösen und die API erreichbar ist, der Knoten CSE aufgrund eines API-Timeouts jedoch fehlgeschlagen ist, führen Sie die entsprechende Aktion aus, wie in der folgenden Tabelle dargestellt.

    Festlegen des Typs Aktion
    VM-Verfügbarkeitsgruppe Löschen Sie den Knoten aus dem Azure-Portal und der AKS-API, indem Sie den Befehl kubectl delete node verwenden, und skalieren Sie den Cluster dann erneut.
    VM-Skalierungsgruppe Führen Sie entweder ein Erneutes Abbild des Knotens aus dem Azure-Portal aus, oder löschen Sie den Knoten, und skalieren Sie den Cluster erneut. Verwenden Sie den Befehl "azks nodepool delete-machines ", um den jeweiligen Knoten zu löschen. Sie wird zuerst abschnüren und entwässern und dann den Knoten löschen.
  • Wenn die Anforderungen vom AKS-API-Server gedrosselt werden, führen Sie ein Upgrade auf eine höhere Dienstebene durch. Weitere Informationen finden Sie unter Preisstufen für AKS.

Weitere Informationen