共用方式為


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

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

必要條件

徵兆

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

原因

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

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

    設定環境變數並執行命令,以檢視叢集的狀態和偵錯資訊。

    export RG_NAME="my-aks-rg"
    export CLUSTER_NAME="myakscluster"
    clusterResourceId=$(az aks show \
        --resource-group $RG_NAME --name $CLUSTER_NAME --output tsv --query id)
    az resource update --debug --verbose --ids $clusterResourceId
    

    結果:

    {
      "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-aks-rg-xxx/providers/Microsoft.ContainerService/managedClusters/myaksclusterxxx",
      "name": "myaksclusterxxx",
      "type": "Microsoft.ContainerService/managedClusters",
      "location": "eastus2",
      "tags": null,
      "properties": {
        ...
      }
    }
    
  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 命令:

      重要: 您必須指定 VM 擴充集的 --instance-id。 在這裡,我們會示範查詢 AKS 節點資源群組中有效的實例標識碼(例如 0)和可能的 VMSS。 適當地更新值以符合您的環境。

      export NODE_RESOURCE_GROUP=$(az aks show --resource-group $RG_NAME --name $CLUSTER_NAME --query nodeResourceGroup -o tsv)
      export VMSS_NAME=$(az vmss list --resource-group $NODE_RESOURCE_GROUP --query "[0].name" -o tsv)
      export DNS_IP_ADDRESS="10.0.0.10"
      export INSTANCE_ID=$(az vmss list-instances --resource-group $NODE_RESOURCE_GROUP --name $VMSS_NAME --query "[0].instanceId" -o tsv)
      export API_FQDN=$(az aks show --resource-group $RG_NAME --name $CLUSTER_NAME --query fqdn -o tsv)
      
      az vmss run-command invoke \
          --resource-group $NODE_RESOURCE_GROUP \
          --name $VMSS_NAME \
          --instance-id $INSTANCE_ID \
          --command-id RunShellScript \
          --output tsv \
          --query "value[0].message" \
          --scripts "telnet $DNS_IP_ADDRESS 53"
      az vmss run-command invoke \
          --resource-group $NODE_RESOURCE_GROUP \
          --name $VMSS_NAME \
          --instance-id $INSTANCE_ID \
          --command-id RunShellScript \
          --output tsv \
          --query "value[0].message" \
          --scripts "nslookup $API_FQDN $DNS_IP_ADDRESS"
      
    • 針對 VM 可用性設定組節點,請使用 az vm run-command invoke 命令:

      重要: 您必須在資源群組的可用性設定組中指定 --name 有效的 VM。 以下是執行網路檢查的範本。

      az vm run-command invoke \
          --resource-group $RG_NAME \
          --name $AVAILABILITY_SET_VM \
          --command-id RunShellScript \
          --output tsv \
          --query "value[0].message" \
          --scripts "telnet $DNS_IP_ADDRESS 53"
      az vm run-command invoke \
          --resource-group $RG_NAME \
          --name $AVAILABILITY_SET_VM \
          --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 的定價層。

其他相關資訊