針對 PDB 所造成之收回失敗所造成的 UpgradeFailed 錯誤進行疑難解答
本文討論如何識別及解決當您嘗試升級 Azure Kubernetes Service (AKS) 叢集時,Pod 中斷預算 (PDB) 所造成的收回失敗所造成的 UpgradeFailed 錯誤。
必要條件
本文需要 Azure CLI 2.0.65 版或更新版本。 若要尋找版本號碼,請執行 az --version
。 如果您必須安裝或升級 Azure CLI,請參閱 如何安裝 Azure CLI。
For more detailed information about the upgrade process, see the "Upgrade an AKS cluster" section in Upgrade an Azure Kubernetes Service (AKS) cluster.
徵狀
AKS 叢集升級作業失敗,並出現下列錯誤訊息:
程序代碼:UpgradeFailed
訊息:收回 Pod Pod-name <時清空節<點節點名稱>>失敗。 收回失敗,發生太多要求錯誤。 這通常是由限制性 Pod 中斷預算 (PDB) 原則所造成。 請參閱http://aka.ms/aks/debugdrainfailures
。 原始錯誤:對 Kubernetes API 伺服器的 API 呼叫失敗。
原因
如果 Pod 受到 Pod 中斷預算 (PDB) 原則的保護,可能會發生此錯誤。 在此情況下,Pod 會拒絕被清空。
若要測試這種情況,請執行 kubectl get pdb -A
,然後檢查 [允許中斷] 值。 值應為 1 或更大。 如需詳細資訊,請參閱 使用 Pod 中斷預算規劃可用性。
如果 [允許的中斷 ] 值為 0,則節點清空會在升級程式期間失敗。
若要解決此問題,請使用下列其中一個解決方案。
解決方案 1:啟用 Pod 以清空
- 調整 PDB 以啟用 Pod 清空。 一般而言,允許的中斷是由 或
Running pods / Replicas
參數所Min Available / Max unavailable
控制。 您可以在 PDB 層級修改Min Available / Max unavailable
參數,或增加 的Running pods / Replicas
數目,以將允許的中斷值推送至 1 或更高。 - 請再試一次,將 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 意應見反社群。