AKS 叢集建立問題的基本疑難解答
本文概述當您無法成功建立或部署 Microsoft Azure Kubernetes Service (AKS) 叢集時,所要使用的基本疑難解答方法。
必要條件
Azure CLI (2.0.59 版或更新版本) 。
Kubernetes kubectl 工具。 若要使用 Azure CLI 安裝 kubectl,請執行 az aks install-cli 命令。
從 Azure CLI 檢視錯誤
當您使用 Azure CLI 建立叢集時,如果作業失敗,錯誤會記錄為輸出。 以下是命令、使用者輸入和作業輸出在 Bash 控制台中顯示的方式:
$ az aks create --resource-group myResourceGroup \
> --name MyManagedCluster \
> --load-balancer-sku standard \
> --vnet-subnet-id /subscriptions/01234567-89ab-cdef-0123-456789abcdef/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/aks_demo_vnet/subnets/AKS
It is highly recommended to use USER assigned identity (option --assign-identity) when you want to bring you own subnet, which will have no latency for the role assignment to take effect. When you SYSTEM assigned identity, azure-cli will grant Network Contributor role to the system assigned identity after the cluster is created, and the role assignment will take some time to take effect, see https://learn.microsoft.com/azure/aks/use-managed-identity, proceed to create cluster with system assigned identity? (y/N): y
(ControlPlaneAddOnsNotReady) Pods not in Running status: konnectivity-agent-67f7f5554f-nsw2g,konnectivity-agent-8686cb54fd-xlsgk,metrics-server-6bc97b47f7-dfhbr,coredns-845757d86-7xjqb,coredns-autoscaler-5f85dc856b-mxkrj
Code: ControlPlaneAddOnsNotReady
Message: Pods not in Running status: konnectivity-agent-67f7f5554f-nsw2g,konnectivity-agent-8686cb54fd-xlsgk,metrics-server-6bc97b47f7-dfhbr,coredns-845757d86-7xjqb,coredns-autoscaler-5f85dc856b-mxkrj
這些錯誤通常包含叢集建立錯誤的詳細描述,並提供包含更多詳細數據的文章連結。 此外,您可以根據 Azure CLI 作業所產生的錯誤,使用我們的疑難解答文章作為參考。
檢視 Azure 入口網站 中的錯誤詳細數據
若要檢視 Azure 入口網站 中錯誤的詳細數據,請檢查 Azure 活動記錄。 若要在 Azure 入口網站 中尋找活動記錄的清單,請搜尋活動記錄。 或者,選取 [ 通知 () 鈴鐺圖示,然後在 活動記錄檔中選取 [更多事件]。
[ 活動記錄 ] 頁面上的記錄清單包含一個行專案,其中 的 [作業名稱 ] 資料行值命名為 [建立或更新受控叢集]。 數據行值 起始的對應事件 會設定為公司或學校帳戶的名稱。 如果作業成功,[ 狀態 ] 資料行值會顯示 [ 已接受]。 您也會看到建立叢集元件的子操作專案,例如下列作業名稱:
- 建立或更新路由表
- 建立或更新網路安全組
- 更新使用者指派的身分識別建立
- 建立或更新 Load Balancer
- 建立或更新公用IP位址
- 建立角色指派
- 更新資源群組
在這些子操作專案中, Status 值為 Succeeded,而 [ 事件起始者 ] 欄位會設定為 AzureContainerService。
如果改為發生錯誤,該怎麼辦? 在此情況下,[ 建立或更新受控叢集 作業 狀態] 字 段會顯示 [ 失敗]。 不同於建立叢集元件的作業,您必須展開失敗的作業專案,以檢閱子作業專案。 一般子操作名稱是原則動作,例如 'audit' 原則動作 和 'auditIfNotExists' 原則動作。 部分子作業會繼續顯示成功。
若要進一步調查,您可以選取其中一個失敗的子操作。 側邊窗格隨即開啟,讓您可以檢閱有關子作業的詳細資訊。 您可以針對摘 要、 JSON 和 變更歷程記錄等欄位的值進行疑難解答。 JSON 欄位包含 JSON 格式錯誤的輸出文字,而且通常會提供最實使用的資訊。
檢視叢集深入解析
叢集是否已在 Azure 入口網站 中建立,而且是否顯示在該處? 如果這是真的,您可以產生叢集深入解析,以協助您進行疑難解答。 若要存取此功能,請遵循下列步驟:
在 Azure 入口網站 中,搜尋並選取 [Kubernetes 服務]。
選取 AKS 叢集的名稱。
在 AKS 叢集頁面的瀏覽窗格中,選取 [診斷並解決問題]。
在 [ 診斷和解決問題] 頁面中,選取 [ 叢集深入解析] 連結。 叢集深入解析工具會分析您的叢集,然後在 [叢集深入解析] 頁面的 [觀察與解決方案] 區段中提供其結果清單。
選取其中一個結果,以檢視問題及其可能解決方案的詳細資訊。
檢視 Azure 入口網站 中的資源
在 Azure 入口網站 中,您可能想要檢視建置叢集時所建立的資源。 一般而言,這些資源位於以MC_為開頭 的資源群組中。 受控叢集資源群組可能具有 名稱,例如 MC_MyResourceGroup_MyManagedCluster_<location-code>。 不過,如果您使用自定義受控叢集資源群組來建置叢集,則名稱可能會不同。
若要尋找資源群組,請在 Azure 入口網站 中搜尋並選取 [資源群組],然後選取叢集建立所在的資源群組。 資源清單會顯示在資源群組的 [ 概觀 ] 頁面中。
警告
建議您不要修改 MC_ 資源群組中的資源。 此動作可能會對您的 AKS 叢集造成不必要的影響。
若要檢閱虛擬機擴展集的狀態,您可以在資源群組的資源清單中選取擴展集名稱。 其名稱 可能類似於aks-nodepool1-12345678-vmss,且其 [ 類型 ] 值為 [虛擬機擴展集]。 擴展集的狀態會出現在節點集區的 [概觀] 頁面頂端,而更多詳細數據會顯示在 Essentials標題中。 如果部署失敗,顯示的狀態會是 [失敗]。
對於所有資源,您可以檢閱詳細數據,進一步瞭解部署失敗的原因。 針對擴展集,您可以選取 [失敗 狀態] 文字來檢視失敗的詳細數據。 詳細數據位於包含 [狀態]、[ 層級] 和 [ 程序代碼 ] 資料行的數據列中。 下列範例顯示數據行值的數據列。
欄 | 範例值 |
---|---|
狀態 | 布建失敗 |
層級 | 錯誤 |
代碼 | ProvisioningState/failed/VMExtensionProvisioningError |
選取資料列以查看 [ 訊息 ] 欄位。 這包含更多有關該失敗的資訊。 例如,範例數據列的 [訊 息] 字段會從下列文字開始:
VM 在處理擴充功能 'vmssCSE' 時回報失敗。 錯誤訊息:「啟用失敗:無法執行命令:命令已終止,結束狀態=50 [stdout] [stderr] 0 0 0 --:
利用這項資訊,您可以得出擴展集中的 VM 失敗併產生結束狀態 50 的結論。
注意事項
如果叢集部署未到達建立這些資源的點,您可能無法檢閱 Azure 入口網站 中的受控叢集資源群組。
使用 Kubectl 命令
如需另一個可協助針對叢集上的錯誤進行疑難解答的選項,請輸入 kubectl 命令以取得叢集中所部署資源的詳細數據。 若要使用 kubectl,請先登入您的 AKS 叢集:
az aks get-credentials --resource-group MyResourceGroup --name MyManagedCluster
視失敗類型和發生時間而定,您可能無法登入叢集以取得更多詳細數據。 但一般而言,如果您的叢集已建立並顯示在 Azure 入口網站 中,您應該能夠登入並執行 kubectl 命令。
檢視 kubectl 取得節點 (叢集節點)
若要取得更多詳細數據來判斷節點的狀態,請輸入 kubectl get nodes 命令來檢視叢集節點。 在這裡範例中,叢集中沒有報告節點:
$ kubectl get nodes
No resources found
檢視系統命名空間中的Pod (kubectl取得Pod)
檢視 kube-system 命名空間中的 Pod 也是針對您的問題進行疑難解答的好方法。 這個方法可讓您檢視 Kubernetes 系統 Pod 的狀態。 在此範例中 kubectl get pods
,我們會輸入 命令:
$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-845757d86-7xjqb 0/1 Pending 0 78m
coredns-autoscaler-5f85dc856b-mxkrj 0/1 Pending 0 77m
konnectivity-agent-67f7f5554f-nsw2g 0/1 Pending 0 77m
konnectivity-agent-8686cb54fd-xlsgk 0/1 Pending 0 65m
metrics-server-6bc97b47f7-dfhbr 0/1 Pending 0 77m
描述 Pod 的狀態 (kubectl 描述 Pod)
藉由描述 Pod 的狀態,您可以檢視組態詳細數據,以及在 Pod 上發生的任何事件。 執行 kubectl describe Pod 命令:
$ kubectl describe pod coredns-845757d86-7xjqb -n kube-system
Name: coredns-845757d86-7xjqb
Namespace: kube-system
Priority: 2000001000
Priority Class Name: system-node-critical
Node: <none>
Labels: k8s-app=kube-dns
kubernetes.io/cluster-service=true
pod-template-hash=845757d86
version=v20
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 24m (x1 over 25m) default-scheduler no nodes available to schedule pods
Warning FailedScheduling 29m (x57 over 84m) default-scheduler no nodes available to schedule pods
在命令輸出中,您可以看到 Pod 無法部署至節點,因為沒有可用的節點。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群。