本文討論如何識別和解決您嘗試 升級 Azure Kubernetes Service (AKS) 叢集時可能發生的「UnsatisfiablePDB」錯誤。
先決條件
本文需要 Azure CLI 2.53.0 版或更新版本。 執行 az --version 來了解您安裝的版本。 如果您需要安裝或升級 Azure CLI,請參閱如何安裝 Azure CLI。
癥狀
AKS 叢集升級作業會失敗,並顯示下列錯誤訊息:
代碼:UnsatisfiablePDB
訊息:發生 1 個錯誤:
* PDB <pdb-namespace>/<pdb-name> 因 maxUnavailable == 0 而無法繼續執行放置操作
原因
在開始升級作業之前,AKS 會檢查叢集是否有任何現有的Pod 中斷預算 (PDB),其參數設定為 0。 這類 PDB 可能會封鎖節點清空作業。 如果節點清空作業遭到封鎖,叢集升級作業就無法成功完成。 這可能會導致叢集處於失敗狀態。
收到「UnsatisfiablePDB」錯誤後,您可以執行以下命令來確認 PDB 的狀態:
$ kubectl get pdb <pdb-name> -n <pdb-namespace>
此命令的輸出應該類似於以下輸出:
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
<pdb-name> N/A 0 0 49s
如果值 MAX UNAVAILABLE 為 0 、則節點排空會在升級程序期間失敗。
若要解決此問題,請使用下列其中一個解決方案。
解決方案 1:調整 PDB 的 “maxUnavailable” 參數
備註
如果您可以直接編輯 PDB 資源,請使用此解決方案。
- 將 PDB 的
maxUnavailable參數設定為1或更大的值。 如需詳細資訊,請參閱 設定 PodDisruptionBudget。 - 重試 AKS 叢集升級作業。
解決方案 2:備份、刪除和重新部署 PDB
備註
如果直接編輯 PDB 資源不可行,請使用此解決方案。
使用下列命令備份 PDB:
$ kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml使用下列命令刪除 PDB:
$ kubectl delete pdb <pdb-name> -n <pdb-namespace>重試 AKS 叢集升級作業。
如果 AKS 叢集升級作業成功,請使用下列命令重新部署 PDB:
$ kubectl apply -f pdb_backup.yaml
與我們連絡,以取得說明
如果您有疑問,可以詢問 Azure 社群支援。 您也可以將產品意見反應提交至 Azure 意見反應社群。