針對 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 清空
- 調整 PDB 以啟用 Pod 清空。 一般而言,允許的中斷是由
Min Available / Max unavailable
或Running pods / Replicas
參數控制。 您可以在 PDB 層級修改Min Available / Max unavailable
參數,或增加 將 [允許中斷] 值推送至 1 或更新版本的 數目Running pods / Replicas
。 - 請再試一次,將 AKS 叢集升級至您先前嘗試升級至的相同版本。 此程式將會觸發對帳。
解決方案 2:備份、刪除和重新部署 PDB
- 取得 PDB
kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
的備份,然後移除 PDBkubectl delete pdb <pdb-name> -n /<pdb-namespace>
。 升級完成後,您可以重新部署 PDBkubectl apply -f pdb_backup.yaml
。 - 請再試一次,將 AKS 叢集升級至您先前嘗試升級至的相同版本。 此程式將會觸發對帳。
解決方案 3:刪除無法清空的 Pod
刪除無法清空的 Pod。
注意
如果 Pod 是由部署或 StatefulSet 所建立,它們將由 ReplicaSet 控制。 如果是這種情況,您可能必須刪除部署或 StatefulSet。 在您這樣做之前,建議您先進行備份:
kubectl get <kubernetes-object> <name> -n <namespace> -o yaml > backup.yaml
。請再試一次,將 AKS 叢集升級至您先前嘗試升級至的相同版本。 此程式將會觸發對帳。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。