針對 CSE 錯誤所造成的節點未就緒失敗進行疑難解答
本文可協助您針對Microsoft Azure Kubernetes Service (AKS) 叢集未處於 Succeeded
狀態,且 AKS 節點因自定義腳本擴充功能 (CSE) 錯誤而未在節點集區內就緒的案例進行疑難解答。
必要條件
徵兆
由於 CSE 錯誤,AKS 叢集節點尚未在節點集區內就緒,且 AKS 叢集未處於 Succeeded
狀態。
原因
當您布 建 kubelet 和其他元件時,節點延伸模組部署會失敗並傳回多個錯誤碼。 這是最常見的錯誤原因。 若要在布建 kubelet 時確認節點擴充功能部署失敗,請遵循下列步驟:
若要進一步瞭解叢集目前的失敗,請執行 az aks show 和 az 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
針對 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 的定價層。
其他相關資訊
- 如需一般疑難解答步驟,請參閱 節點未就緒失敗的基本疑難解答。