本文讨论了在尝试 升级 Azure Kubernetes 服务(AKS)群集时可能出现的 "PDB 不可满足错误" 的识别与解决方法。
先决条件
本文需要 Azure CLI 2.53.0 或更高版本。 运行 az --version 来查找已安装的版本。 如果需要安装或升级 Azure CLI,请参阅如何安装 Azure CLI。
症状
AKS 群集升级作失败,并出现以下错误消息:
代码:不可满足的PDB
消息:发生 1 个错误:
* PDB <pdb-namespace>/<pdb-name> 在 maxUnavailable 为 0 时无法继续执行 put 操作。
原因
在开始升级操作之前,AKS 会检查群集中是否存在任何参数设置为0的现有Pod 中断预算(PDB)maxUnavailable。 此类 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反馈社区提交产品反馈。