升级 AKS 群集时出现错误“UnsatisfiablePDB”

本文讨论了在尝试 升级 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 资源,请使用此解决方案。

  1. 将 PDB maxUnavailable 的参数设置为 1 或更大的值。 有关详细信息,请参阅 指定 PodDisruptionBudget
  2. 重试 AKS 群集的升级操作。

解决方案 2:备份、删除和重新部署 PDB

注释

如果直接编辑 PDB 资源不可行,请使用此解决方案。

  1. 使用以下命令备份 PDB:

    $ kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
    
  2. 使用以下命令删除 PDB:

    $ kubectl delete pdb <pdb-name> -n <pdb-namespace>
    
  3. 重试 AKS 集群升级操作。

  4. 如果 AKS 群集升级作成功,请使用以下命令重新部署 PDB:

    $ kubectl apply -f pdb_backup.yaml
    

联系我们以获得帮助

如果有疑问,可以询问 Azure 社区支持。 您还可以向Azure反馈社区提交产品反馈。