共用方式為


針對處於失敗狀態的 Azure Kubernetes Service 叢集或節點進行疑難解答

本文討論如何針對 Microsoft進入失敗狀態的 Azure Kubernetes Service (AKS) 叢集或節點進行疑難解答。

常見的原因

以下是失敗叢集或節點集區的常見原因:

原因 參考
自定義腳本擴充功能 (CSE) 虛擬機 (VM) 擴充功能佈建錯誤 針對 CSE 錯誤所造成的節點未就緒失敗進行疑難解答
密鑰 Azure 資源無法使用
VM 配置失敗,因為沒有區域性/區域容量
VM 配置失敗,因為核心配額已超過 Quotaexceeded 錯誤
客戶施加的限制
工作負載問題

常見錯誤的基本疑難解答導致叢集/節點失敗

下表概述一些可能導致叢集或節點進入失敗狀態、其描述和基本疑難解答方法來解決這些錯誤的常見錯誤。

錯誤 描述 疑難解答方法
OutboundConnFailVMExtensionError 此錯誤表示 VM 擴充功能因為缺少輸出連線而無法安裝或更新。 檢查 VM 或 VM 擴充集的網路安全組 (NSG) 規則和防火牆設定。 請確定 VM 或 VM 延伸集可以存取這些端點: https://aka.ms/aks/outboundhttps://aka.ms/aks/sshhttps://aka.ms/aks/agenthttps://aka.ms/aks/containerinsights
清空錯誤 此錯誤表示節點在升級作業之前無法清空。 使用 kubectl 命令檢查節點上的 Pod 狀態和事件: kubectl get pods --all-namespaces -o widekubectl describe pod <pod-name> -n <namespace>。 尋找任何停滯在終止或未知狀態的 Pod,或在事件中出現任何錯誤或警告。 您可能需要強制刪除 Pod,或重新啟動節點上的 kubelet 服務。
SubscriptionNotRegistered 錯誤 此錯誤表示訂用帳戶未註冊為使用 AKS 資源提供者。 使用 命令註冊訂用 az provider register --namespace Microsoft.ContainerService 帳戶。
RequestDisallowedByPolicy 錯誤 此錯誤表示作業遭到套用至訂用帳戶或資源群組的原則封鎖。 檢閱原則詳細數據和原則指派範圍。 若要允許作業,您可能需要修改或排除原則。
QuotaExceeded 錯誤 此錯誤表示作業超過資源類型或區域的配額限制。 使用 Azure 入口網站、Azure CLI 或 Azure PowerShell 檢查資源類型或區域的目前配額使用量和配額限制。 您可能需要刪除一些未使用的資源,或要求增加配額。
PublicIPCountLimitReached 錯誤 此錯誤表示作業達到可在訂用帳戶或區域中建立的公用IP位址數目上限。 使用 Azure 入口網站、Azure CLI 或 Azure PowerShell 檢查訂用帳戶或區域的目前公用 IP 位址使用量和限制。 您可能需要刪除某些未使用的公用IP位址,或要求增加公用IP位址限制。
OverconstrainedAllocationRequest error 此錯誤表示作業無法在區域中配置要求的 VM 大小。 使用 Azure 入口網站、Azure CLI 或 Azure PowerShell 檢查區域中 VM 大小的可用性。 您可能需要選擇不同的 VM 大小或不同的區域。
ReadOnlyDisabledSubscription 錯誤 此錯誤表示訂用帳戶目前已停用,並設定為唯讀。 檢閱並調整訂用帳戶許可權,因為訂用帳戶可能因為計費問題、信用額度過期或原則違規而暫停。

其他可能問題的基本疑難解答導致叢集/節點失敗

下表說明其他可能導致叢集或節點進入失敗狀態、其描述,以及修正這些問題的解決方案的其他可能問題。

問題 描述 解決方案
子網大小太小 作業無法建立或更新叢集,因為子網沒有足夠的空間容納所需的節點數目。 刪除節點集區,並使用 Azure 入口網站、Azure CLI 或 Azure PowerShell 建立具有較大子網大小的新集區。
虛擬網路遭到封鎖 作業無法與叢集 API 伺服器或 Kubernetes 控制平面通訊,因為防火牆或自定義功能變數名稱系統 (DNS) 設定會封鎖來自節點的輸出連線。 允許防火牆上的節點流量,並使用 Azure 入口網站、Azure CLI 或 Azure PowerShell 來設定 Azure 的 DNS 解析。
PDB 問題 作業無法更新叢集,因為 PDB 已停止移除一或多個 Pod。 PDB 是一項資源,可限制在特定期間內可自願終止多少 Pod。 暫時移除 PDB、協調叢集,然後使用 kubectl 命令行工具再次新增 PDB。
基礎結構問題 作業無法更新叢集,因為 Azure Resource Manager (ARM) 服務有內部問題,可管理 Azure 中的資源。 針對每個節點集區執行代理程式集區對帳,並使用 Azure CLI 或 Azure PowerShell 對帳受控叢集。
API 伺服器錯誤 作業無法連線到叢集 API 伺服器或 Kubernetes 控制平面,因為發生中斷或錯誤。 向 AKS 支援小組報告,並提供相關的記錄和診斷資訊。 您可以使用 Azure 入口網站、Azure CLI 或 Azure PowerShell 來取得記錄和診斷資訊。

注意

  • 上表所述的作業是指從用戶端觸發的任何更新 (PUT) 作業。
  • 在 Kubernetes 中,控制器內有元件。 它可確保世界的實際狀態,包括叢集狀態和潛在的外部狀態,例如執行 Kubelet 的容器或雲端提供者的負載平衡器。 它會與物件中指定的所需狀態對齊。 此對齊程式是控制器的主要功能。 針對 AKS,此元件可確保 AKS 叢集的狀態與所需的設定一致。 若要手動觸發它,請執行 az resource update --ids <AKS cluster id>。 您可以執行 az aks show -n <cluster name> -g <cluster resource group> -o json --query id來取得 AKS 叢集識別碼。 如果實際狀態與所需狀態之間有任何差異,請採取必要的動作來更正這些差異。

布建狀態檢查

若要檢查叢集狀態,請選取 [ 布建狀態檢查]。 然後,會顯示叢集和代理程式集區的布建狀態。

顯示 [布建狀態檢查] 選項的螢幕快照。

案例 1:叢集處於失敗狀態

若要解決此問題,請取得導致失敗的作業,並找出錯誤。 以下是兩個可能導致叢集失敗的常見作業失敗:

  • 叢集建立失敗
  • 叢集升級失敗

如果最近建立或升級的叢集處於失敗狀態,請使用下列方法來針對失敗進行疑難解答:

使用 Azure 入口網站 檢視失敗叢集的活動記錄檔

若要從 Azure 入口網站 檢視失敗叢集的活動記錄,請遵循下列步驟:

  1. 在 Azure 入口網站 中,移至 [資源群組] 頁面,然後選取包含叢集的資源群組。

  2. 在 [概 觀] 頁面上,從資源清單中選取叢集名稱。

  3. 在叢集頁面上,從左側功能表中選取 [活動記錄 ]。

  4. 在 [活動記錄] 頁面上,您可以依 [狀態]、[時間範圍][事件起始的事件] 和 [事件] 類別來篩選事件。 例如,您可以從 [狀態] 下拉式清單中選取 [失敗],只查看失敗的事件。

    顯示如何在 [活動記錄] 頁面上篩選事件的螢幕快照。

  5. 若要檢查事件的詳細數據,請從清單中選取事件名稱。 新的窗格隨即開啟,其中包含事件摘要、屬性和 JSON 數據。 您也可以將 JSON 數據下載為檔案。

  6. 若要檢查與事件相關聯的錯誤碼和訊息,請向下卷動至 事件摘要中的 [狀態 ] 區段。 您也可以在屬性和 JSON 數據區段中找到錯誤資訊。

使用 Azure CLI 檢視失敗叢集的活動記錄

如果您想要使用 Azure CLI 來檢視失敗叢集的活動記錄檔,請遵循下列步驟:

  1. 在您的電腦上安裝 Azure CLI,並使用您的 Azure 帳戶登入。

  2. 使用 命令列出訂用 az group list 帳戶中的資源群組,並尋找包含叢集的資源群組名稱。

  3. 使用 az resource list 命令搭配 --resource-group 參數列出資源群組中的資源,並尋找叢集的名稱。

  4. 使用 az monitor activity-log list 命令搭配 --resource-group--resource 參數,列出叢集的活動記錄。 您也可以使用 --status--start-time--end-time--caller--filter 參數,依不同的準則來篩選事件。 例如,您可以使用 --status Failed 來只查看失敗的事件。

  5. 使用 az monitor activity-log show 命令搭配 --resource-group--resource--event-id 參數,顯示特定事件的詳細數據。 您可以從上一個命令的輸出中找到事件識別碼。 輸出會包含事件摘要、屬性和 JSON 資料。 您也可以使用 --output 參數來變更輸出格式。

  6. 若要查看與事件相關聯的錯誤碼和訊息,請在命令輸出中尋找 statusMessage 字段。 您也可以在屬性和 JSON 數據區段中找到錯誤資訊。

    顯示 JSON 數據的螢幕快照。

針對失敗的叢集使用 AKS 診斷和解決問題功能

在 Azure 入口網站 中,流覽至您的 AKS 叢集資源,然後從左側功能表中選取 [診斷並解決問題]。 您會看到類別和案例清單,您可以選取以執行診斷檢查並取得建議的解決方案。

在 Azure CLI 中,使用 az aks collect 命令搭配 --name--resource-group 參數,從叢集節點收集診斷數據。 您也可以使用 --storage-account--sas-token 參數來指定將上傳數據的 Azure 儲存體 帳戶。 輸出會包含 [診斷和解決問題] 刀鋒視窗的連結,您可以在其中檢視結果和建議的動作。

在 [ 診斷和解決問題] 刀鋒視窗中,您可以選取 [叢集問題 ] 作為類別。 如果偵測到任何問題,您會看到您可以遵循的可能解決方案清單來修正問題。

顯示「診斷和解決問題」入口網站中可能解決方案的螢幕快照。

案例 2:節點處於失敗狀態

在極少數情況下,Azure 磁盤中斷鏈接作業可能會部分失敗,這會讓節點 VM 處於失敗狀態。

若要解決此問題,請使用下列其中一種方法手動更新 VM 狀態:

  • 針對以可用性設定組為基礎的叢集,請執行下列 az vm update 命令:

    az vm update --resource-group <resource-group-name> --name <vm-name>
    
  • 針對以 VM 擴展集為基礎的叢集,請執行下列 az vmss update-instances 命令:

    az vmss update-instances --resource-group <resource-group-name> --name <scale-set-name> --instance-id <vm-or-scale-set-id>
    

案例 3:節點集區處於失敗狀態

當備份節點集的 VM 擴展集或可用性設定組在布建、調整或更新期間發生錯誤時,就會發生此問題。 此問題可能是因為容量、配額限制、網路問題、原則違規、資源鎖定或其他因素而導致無法正確配置或設定 VM。

若要疑難排解此問題,請執行下列步驟:

  1. 使用 az aks nodepool show 命令檢查節點集區的狀態。 如果布建狀態為 Failed,您可以在輸出中看到錯誤訊息和程序代碼。
  2. 使用 az vmss showaz vm availability-set show 命令檢查 VM 擴展集或可用性設定組的狀態。 如果布建狀態為 Failed,您可以在輸出中看到錯誤訊息和程序代碼。
  3. 使用 az vmss list-instancesaz vm list 命令檢查節點集區中個別 VM 的狀態。 如果有任何 VM 處於 FailedUnhealthy 狀態,您可以在輸出中看到錯誤訊息和程式代碼。
  4. 檢查 VM 擴展集或可用性設定組的活動記錄檔和診斷設定,以查看指出失敗原因的任何事件或警示。 您可以使用 Azure 入口網站、Azure CLI 或 Azure 監視器 API 來存取活動記錄和診斷設定。
  5. 檢查部署節點集區的區域和訂用帳戶配額和容量。 您可以使用 az vm list-usage 命令或 Azure 入口網站 來檢查配額和容量。 如果達到配額或容量限制,您可以要求增加或刪除一些未使用的資源。
  6. 檢查節點集區的原則和角色指派。 您可以使用 az policyaz role 命令或 Azure 入口網站 來檢查原則定義、指派、合規性和豁免。 您也可以使用 az role assignment 命令或 Azure 入口網站 來檢查節點集區的角色指派和許可權。
  7. 檢查節點集區的資源鎖定。 您可以使用 az lock 命令或 Azure 入口網站 來檢查鎖定層級、範圍和附註。 您也可以視需要刪除或更新鎖定。

其他記錄和診斷工具

如果先前的疑難解答方法無法解決問題,您可以使用下列記錄和診斷工具來收集詳細資訊並找出根本原因:

  • 適用於容器的 Azure 監視器:

    此服務會從 AKS 叢集和節點收集及分析計量和記錄。 適用於容器的 Azure 監視器可以監視叢集和節點健康情況、效能和可用性。 您也可以使用它來檢視容器記錄、kubelet 記錄和節點開機診斷記錄。

  • AKS Periscope

    此工具會從AKS 叢集收集節點和Pod記錄、網路資訊和叢集組態,並將其上傳至 Azure 記憶體帳戶。 此工具可協助您針對常見的叢集問題進行疑難解答,例如 DNS 解析、網路連線和節點狀態。 您也可以使用它來產生支援要求,並附加收集的記錄。

  • AKS 診斷

    此工具會在 AKS 叢集和節點上執行一系列檢查,並提供常見問題的建議和補救步驟。 此工具可協助您針對叢集建立、升級、調整、網路、記憶體和安全性相關的問題進行疑難解答。 您也可以使用它來產生附加診斷結果的支援要求。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。