共用方式為


AKS 叢集建立問題的基本疑難解答

本文概述您無法成功建立或部署Microsoft Azure Kubernetes Service (AKS) 叢集時使用的基本疑難解答方法。

必要條件

從 Azure CLI 檢視錯誤

如果您嘗試使用 Azure CLI 建立叢集時作業失敗,輸出會顯示錯誤資訊。 以下是範例 Azure CLI 命令與輸出:

# Create a cluster specifying subnet

az aks create --resource-group myResourceGroup
--name MyManagedCluster \
--load-balancer-sku standard \
--vnet-subnet-id /subscriptions/<subscriptions-id>/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

您可以從輸出識別錯誤碼和錯誤訊息。 在此情況下,它們是:

  • 錯誤碼: 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

這些描述通常包含叢集建立中發生問題的詳細數據,而且它們會連結至包含更多詳細數據的文章。 此外,您可以根據 Azure CLI 作業所產生的錯誤,使用我們的疑難解答文章作為參考。

在 Azure 入口網站 中檢視錯誤詳細數據

若要調查 Azure 入口網站 中的 AKS 叢集建立錯誤,請開啟 [活動記錄]。 您可以篩選結果以符合您的需求。 若要這樣做,請選取 [ 新增篩選] 以將更多屬性新增至篩選。

如何新增篩選的螢幕快照。

在 [活動記錄] 頁面上,找出 [作業名稱] 資料行顯示 [建立或更新受控叢集] 的記錄專案。

數據行起始的事件會顯示執行作業的使用者,可能是工作帳戶、學校帳戶或 Azure 受控識別

如果作業成功,[狀態] 資料行值為 [已接受]。 您也會看到建立叢集元件的子作業專案,例如下列作業名稱:

  • 建立或更新路由表
  • 建立或更新網路安全組
  • 更新使用者指派的身分識別建立
  • 建立或更新Load Balancer
  • 建立或更新公用IP位址
  • 建立角色指派
  • 更新資源群組

在這些子作業專案中,[狀態] 值為 [成功]字段起始的事件會設定為 AzureContainerService

活動記錄中檢視的螢幕快照。

如果發生錯誤,該怎麼辦? 在此情況下, Status 值為 Failed。 不同於建立叢集元件的作業,您必須展開失敗的子作業專案以檢閱它們。 典型的子作業名稱是原則動作,例如 'audit' Policy action'auditIfNotExists' Policy action。 並非所有子作業都一定會一起失敗。 您可以預期其中一些成功。

選取其中一個失敗的子作業,以進一步調查它。 選取 [ 摘要]、 [JSON] 和 [變更歷程記錄 ] 索引卷標,以針對問題進行疑難解答。 JSON 索引標籤包含 JSON 格式錯誤輸出文字,而且通常會提供最有使用的資訊。

JSON 格式詳細記錄的螢幕快照。

以下是 JSON 格式的詳細記錄範例:

{
     "status": {
        "value": "Failed",
        "localizedValue": "Failed"
    },
    "subStatus": {
        "value": "",
        "localizedValue": ""
    },
    "submissionTimestamp": "2024-08-30T10:06:07Z",
    "subscriptionId": "<subscriptionId>",
    "tenantId": "<tenantId>",
    "properties": {
        "statusMessage": "{\"status\":\"Failed\",\"error\":{\"code\":\"ResourceOperationFailure\",\"message\":\"The resource operation completed with terminal provisioning state 'Failed'.\",\"details\":[{\"code\":\"VMExtensionProvisioningError\",\"message\":\"Unable to establish outbound connection from agents, please see https://learn.microsoft.com/en-us/troubleshoot/azure/azure-kubernetes/error-code-outboundconnfailvmextensionerror and https://aka.ms/aks-required-ports-and-addresses for more information.\"}]}}",
}
}

檢視叢集深入解析

叢集是否在 Azure 入口網站 中建立,而且該叢集是否可見? 如果這是真的,您可以產生叢集深入解析,以協助您進行疑難解答。 若要存取這項功能,請遵循下列步驟:

  1. Azure 入口網站 中,搜尋並選取 [Kubernetes 服務]。

  2. 選取 AKS 叢集的名稱。

  3. 在 AKS 叢集頁面的瀏覽窗格中,選取 [ 診斷並解決問題]。

  4. 在 [ 診斷和解決問題] 頁面中,選取 [ 叢集深入解析] 連結。 叢集深入解析工具會分析您的叢集,然後在 [叢集深入解析] 頁面的 [觀察與解決方案] 區段中提供其結果清單。

  5. 選取其中一個結果,以檢視問題及其可能解決方案的詳細資訊。

檢視 Azure 入口網站 中的資源

在 Azure 入口網站 中,您可能會想要檢視建立叢集時所建立的資源。 這些資源通常位於名稱以 MC_ 開頭的資源群組中。 受控叢集資源群組的名稱,例如 MC_MyResourceGroup_MyManagedCluster_location-code>。< 不過,如果您使用自定義受控叢集資源群組來建置叢集,則名稱可能會不同。

若要尋找資源群組,請在 Azure 入口網站 中搜尋並選取 [資源群組],然後選取叢集建立所在的資源群組。 資源清單會顯示在 資源群組的 [概觀 ] 頁面中。

警告

建議您不要修改MC_資源群組中的資源。 此動作可能會對您的 AKS 叢集造成負面影響。

若要檢閱虛擬機擴展集的狀態,您可以在資源群組的資源清單中選取擴展集名稱。 它可能有類似 aks-nodepool1-12345678-vmss 的名稱值,而且其為虛擬機擴展集Type 值。 擴展集的狀態會出現在節點集區 [概觀] 頁面頂端,而 [基本資訊] 標題中會顯示更多詳細數據。 如果部署失敗,則顯示的狀態為 [失敗]。

針對所有資源,您可以檢閱詳細數據,以深入瞭解部署失敗的原因。 針對擴展集,您可以選取 [失敗 狀態] 文字,以檢視失敗的詳細數據。 詳細數據列包含 [狀態]、 [層級] 和 [程序代碼] 資料行。 下列範例顯示數據行值的數據列。

資料行 範例值
狀態 布建失敗
層級 錯誤
代碼 ProvisioningState/failed/VMExtensionProvisioningError

選取資料列以查看 [ 訊息 ] 欄位。 這包含有關該失敗的詳細資訊。 例如, 範例數據列的 Message 欄位會以下列文字開始:

VM 在處理擴充功能 'vmssCSE' 時回報失敗。 錯誤訊息:「啟用失敗:無法執行命令:結束狀態為 50 [stdout] [stderr] [stderr] 0 0 0 --:

有了這項資訊,您就可以得出結論,擴展集中的 VM 失敗併產生結束狀態 50。

注意

如果叢集部署未到達建立這些資源的時間點,您可能無法檢閱 Azure 入口網站 中的受控叢集資源群組。

使用 Kubectl 命令

如需協助針對叢集上的錯誤進行疑難解答的另一個選項,請使用 kubectl 命令來取得叢集中所部署資源的詳細數據。 若要這樣做,請先登入您的 AKS 叢集:

az aks get-credentials --resource-group MyResourceGroup --name MyManagedCluster

視失敗類型和發生失敗類型而定,您可能無法登入叢集以取得更多詳細數據。 但是,如果您的叢集已建立並出現在 Azure 入口網站 中,您應該能夠登入並執行 kubectl 命令。

檢視叢集節點 (kubectl get nodes)

若要判斷叢集節點的狀態,請執行 kubectl get nodes 命令來檢視節點。 在此範例中,叢集中沒有報告任何節點:

$ kubectl get nodes

No resources found

在系統命名空間中檢視 Pod (kubectl get pods)

在 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 pods 命令:

$ 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 意見反應社群提交產品意見反應。