首页/云/Kubernetes 速查/PodDisruptionBudget 保障自愿中断
调度与资源52 条

PodDisruptionBudget 保障自愿中断

声明「自愿中断时的可用底线」:节点排水、滚动维护会尊重 PDB;但抢占、节点故障这类非自愿中断不受其保护。

Kubernetes 速查云更新于 2026-10-13

机制定位

PodDisruptionBudget 声明「自愿中断时的可用底线」:用 minAvailable 或 maxUnavailable 表达可容忍的副本损失,drain、节点维护、集群升级等主动操作都必须遵守。适用平台是 Kubernetes(policy/v1)。它保护的范围仅限于自愿中断——节点宕机、进程崩溃这类非自愿中断不受约束。允许中断数可以在 status 里直接看到,是维护前的必查项。

基本信息

适用平台Kubernetes(policy/v1,1.21 起为稳定版本)
两种写法minAvailable 与 maxUnavailable,二选一
保护范围仅自愿中断:drain、驱逐 API 等主动操作
关键状态status.disruptionsAllowed 表示当前允许中断的副本数

典型使用场景

  • 节点维护前排雷:确认目标工作负载的 PDB 是否允许中断
  • 滚动升级保护:避免集群升级一次性抽走过多副本
  • 核心服务兜底:为网关、鉴权这类强依赖服务设置可用下限
  • 巡检失配配置:找出 minAvailable 等于副本数、导致排水永远卡住的对象
  • 演练验证:主动驱逐一个副本,观察 PDB 是否按预期拦住多余动作

PDB 示例

PDB 示例
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: web-pdb
  namespace: prod
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: web

查看状态

查看状态
kubectl get pdb -n prod                                    # 概览
kubectl describe pdb web-pdb -n prod | grep -A3 'Allowed disruptions'
kubectl get pdb web-pdb -n prod -o jsonpath='{.status}'    # 期望与实际副本数
kubectl get deploy web -o jsonpath='{.spec.replicas}'      # 与副本数对照
kubectl drain node1 --ignore-daemonsets --dry-run=client   # 先演练再执行

配置与后果

配置含义常见后果
minAvailable 小于副本数允许损失若干副本维护可正常推进
minAvailable 等于副本数一个都不允许中断drain 无法完成,维护被无限拖长
maxUnavailable: 1最多同时中断一个维护变慢但可控
selector 写错未匹配到任何 PodPDB 形同虚设,保护预期落空
minAvailable 与 maxUnavailable 二选一;单副本服务设 minAvailable: 1 会让排水永远无法完成,需要评估是否改为允许中断或先扩副本。
PDB 不保护非自愿中断:节点宕机时副本照样直接丢,高可用还要依赖多副本与反亲和等机制共同保障。

维护前检查清单

  • 核对 allowed disruptions 大于 0,等于 0 时排水会被无限期阻塞
  • 确认副本数与可用下限留有余量,单副本服务需要先扩副本再维护
  • 确认选择器确实匹配到目标 Pod,写错时保护形同虚设
  • 记录这次调整:临时放宽 PDB 后要记得恢复,避免长期留下宽松配置

易错点

  • 把 PDB 当万能保护:它只约束自愿中断,节点宕机或进程崩溃时副本照样直接丢
  • minAvailable 设成等于副本数:drain 无法推进,维护窗口被拖长,甚至让集群升级卡住
  • selector 写错导致 PDB 匹配不到 Pod:表面上配置了保护,实际不起作用,需要定期核对匹配对象
  • 认为 PDB 会自动补齐副本:它只决定是否放行中断,副本补回是控制器的工作,两者要分别确认

数据来源与参考

  • Kubernetes 官方文档 · PodDisruptionBudget
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌