共用方式為


針對 CSE 錯誤所造成的節點未就緒失敗進行疑難解答

本文可協助您針對Microsoft Azure Kubernetes Service (AKS) 叢集未處於 Succeeded 狀態,且 AKS 節點因自定義腳本擴充功能 (CSE) 錯誤而未在節點集區內就緒的案例進行疑難解答。

必要條件

徵兆

由於 CSE 錯誤,AKS 叢集節點尚未在節點集區內就緒,且 AKS 叢集未處於 Succeeded 狀態。

原因

當您布 建 kubelet 和其他元件時,節點延伸模組部署會失敗並傳回多個錯誤碼。 這是最常見的錯誤原因。 若要在布建 kubelet 時確認節點擴充功能部署失敗,請遵循下列步驟:

  1. 若要進一步瞭解叢集目前的失敗,請執行 az aks showaz resource update 命令來設定偵錯:

    clusterResourceId=$(az aks show \
        --resource-group <resource-group-name> --name <cluster-name> --output tsv --query id)
    az resource update --debug --verbose --ids $clusterResourceId
    
  2. 針對 GitHub 上 CSE 協助程式可執行檔中的錯誤清單,檢查您從 az resource update 命令收到的偵錯輸出和錯誤訊息。

如果有任何錯誤涉及 kubelet 的 CSE 部署,則您已確認此處所述的案例是節點未就緒失敗的原因。

一般而言,結束代碼會識別造成失敗的特定問題。 例如,您會看到「無法與 API 伺服器通訊」或「無法連線到因特網」等訊息。或者,結束代碼可能會提醒您 API 網路逾時,或需要更換的節點錯誤。

解決方案 1:請確定您的自訂 DNS 伺服器已正確設定

設定您的自訂網域名稱系統 (DNS) 伺服器,以便它可以正確執行名稱解析。 設定伺服器以符合下列需求:

  • 如果您使用的是自訂 DNS 伺服器,請確定伺服器狀況良好且可透過網路連線。

  • 請確定自定義 DNS 伺服器具有 Azure DNS IP 位址 的必要條件轉寄站(或該位址的轉寄站)。

  • 如果您的私人 AKS DNS 區域託管在 Azure 上,請確定您的私人 AKS DNS 區域已連結至您的自訂 DNS 虛擬網路。

  • 請勿將 Azure DNS IP 位址與自訂 DNS 伺服器的 IP 位址搭配使用。 不建議這麼做。

  • 避免在 DNS 設定中使用 IP 位址,而非 DNS 伺服器。 您可以使用 Azure CLI 命令來檢查虛擬機擴展集或可用性設定組上的這種情況。

    • 針對虛擬機擴展集節點,請使用 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>"
      
    • 針對 VM 可用性設定組節點,請使用 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>"
      

如需詳細資訊,請參閱 Azure 虛擬網路中樞中資源的名稱解析,以及使用自定義 DNS 輪輻。

解決方案 2:修正 API 網路逾時

請確定可以連線到 API 伺服器,且不會受到延遲的影響。 若要這樣做,請遵循下列步驟:

  • 檢查 AKS 子網路,以查看指派的網路安全性群組 (NSG) 是否封鎖到 API 伺服器輸出流量連接埠 443。

  • 檢查節點本身,以查看節點是否有其他 NSG 封鎖流量。

  • 檢查 AKS 子網路中是否有任何已指派的路由表。 如果路由表具有網路虛擬設備 (NVA) 或防火牆,請確定連接埠 443 可供輸出流量使用。 如需詳細資訊,請參閱控制 AKS 中叢集節點的輸出流量

  • 如果 DNS 成功解析名稱且 API 可以連線,但節點 CSE 由於 API 逾時而失敗,請採取下表中所示的適當動作。

    設定類型 動作
    VM 可用性設定組 使用 kubectl delete node 命令,從 Azure 入口網站 和 AKS API 刪除節點,然後再次相應增加叢集。
    虛擬機器擴展集 請從 Azure 入口網站 重新安裝節點映像,或刪除節點,然後再次相應增加叢集。 若要刪除特定節點,請使用 az aks nodepool delete-machines 命令。 它會先封鎖和清空,然後刪除節點。
  • 如果要求受到 AKS API 伺服器限制,請升級到更高的服務層級。 如需詳細資訊,請參閱 AKS 的定價層。

其他相關資訊