Share via


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

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

常見原因

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

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

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

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

錯誤 描述 疑難解答方法
OutboundConnFailVMExtensionError 此錯誤表示 VM 擴充功能因為缺少輸出連線而無法安裝或更新。 檢查網路安全組 (NSG) VM 或 VM 擴展集的規則和防火牆設定。 請確定 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 錯誤 此錯誤表示作業無法在區域中配置要求的 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 中資源的 Azure Resource Manager (ARM) 服務發生內部問題。 使用 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>。 您可以執行 來取得 AKS 叢集識別碼 az aks show -n <cluster name> -g <cluster resource group> -o json --query id。 如果實際狀態和所需狀態之間有任何差異,請採取必要的動作來更正這些不一致之處。

布建狀態檢查

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

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

案例 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. 使用 命令搭配 --resource-group--resource 參數,az monitor activity-log list列出叢集的活動記錄。 您也可以使用 --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. 使用或命令檢查 VM 擴展集或可用性設定組的az vmss showaz vm availability-set show狀態。 如果布建狀態為 Failed,您可以在輸出中看到錯誤訊息和程序代碼。
  3. 使用 或 az vm list 命令,檢查節點集區中個別 VM 的az vmss list-instances狀態。 如果有任何 VM 處於 或 Unhealthy 狀態,您可以在Failed輸出中看到錯誤訊息和程式代碼。
  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 意應見反社群