共用方式為


針對 PDB 造成的收回失敗而導致的 UpgradeFailed 錯誤進行疑難解答

本文討論如何識別並解決升級Failed 錯誤,因為 Pod 中斷預算 (PDB) 所造成的收回失敗,而當您嘗試升級 Azure Kubernetes Service (AKS) 叢集時所發生的錯誤。

必要條件

本文需要 Azure CLI 2.0.65 版或更新版本。 若要尋找版本號碼,請執行 az --version。 如果您必須安裝或升級 Azure CLI,請參閱 如何安裝 Azure CLI

如需升級程式的詳細資訊,請參閱升級 Azure Kubernetes Service (AKS) 叢集中的 <升級 AKS 叢集>一節。

徵兆

AKS 叢集升級作業失敗,並出現下列錯誤訊息:

程序代碼:UpgradeFailed
訊息:收回 Pod <Pod 名稱時,清空節點節點<名稱>>失敗。 收回失敗,要求錯誤太多。 這通常是由限制性的 Pod 中斷預算 (PDB) 原則所造成。 請參閱 http://aka.ms/aks/debugdrainfailures。 原始錯誤:對 Kubernetes API 伺服器的 API 呼叫失敗。

原因

如果 Pod 中斷預算 (PDB) 原則保護 Pod,就可能發生此錯誤。 在此情況下,Pod 會抵制被清空。

若要測試這種情況,請執行 kubectl get pdb -A,然後檢查 [允許的中斷] 值。 此值應為 1 或更大。 如需詳細資訊,請參閱 使用 Pod 中斷預算規劃可用性。

如果 [ 允許的中斷] 值為 0,節點清空將會在升級程式期間失敗。

若要解決此問題,請使用下列其中一個解決方案。

解決方案 1:讓 Pod 清空

  1. 調整 PDB 以啟用 Pod 清空。 一般而言,允許的中斷是由 Min Available / Max unavailableRunning pods / Replicas 參數控制。 您可以在 PDB 層級修改 Min Available / Max unavailable 參數,或增加 將 [允許中斷] 值推送至 1 或更新版本的 數目Running pods / Replicas
  2. 請再試一次,將 AKS 叢集升級至您先前嘗試升級至的相同版本。 此程式將會觸發對帳。

解決方案 2:備份、刪除和重新部署 PDB

  1. 取得 PDB kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml的備份,然後移除 PDB kubectl delete pdb <pdb-name> -n /<pdb-namespace>。 升級完成後,您可以重新部署 PDB kubectl apply -f pdb_backup.yaml
  2. 請再試一次,將 AKS 叢集升級至您先前嘗試升級至的相同版本。 此程式將會觸發對帳。

解決方案 3:刪除無法清空的 Pod

  1. 刪除無法清空的 Pod。

    注意

    如果 Pod 是由部署或 StatefulSet 所建立,它們將由 ReplicaSet 控制。 如果是這種情況,您可能必須刪除部署或 StatefulSet。 在您這樣做之前,建議您先進行備份: kubectl get <kubernetes-object> <name> -n <namespace> -o yaml > backup.yaml

  2. 請再試一次,將 AKS 叢集升級至您先前嘗試升級至的相同版本。 此程式將會觸發對帳。

與我們連絡,以取得說明

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