1. PDB 基础概念:PodDisruptionBudget 定义、作用与集群升级的关系

1.1 什么是 PodDisruptionBudget?

PodDisruptionBudget(PDB) 是 Kubernetes 中用于保障应用在自愿中断(Voluntary Disruption)场景下可用性的一种资源对象。它定义了一个 Pod 集合在任意时刻最多可以有多少个 Pod 同时不可用,或者最少需要保持多少个 Pod 处于可用状态。

核心定义:PDB 是集群管理员在允许节点维护、集群升级、资源调度等操作时,确保关键业务不因 Pod 被驱逐而中断的“安全护栏”。

1.2 PDB 的作用与价值

作用维度 具体说明 典型场景
可用性保障 确保应用在自愿中断期间维持最低可用副本数 集群升级、节点池滚动
中断控制 限制同时被驱逐的 Pod 数量,避免雪崩 节点维护、资源缩容
优先级管理 区分关键业务与非关键业务的中断容忍度 核心服务 vs 日志采集
合规与 SLO 满足服务等级目标(SLO)对中断窗口的要求 金融、实时交易系统

1.3 PDB 与集群升级的核心关系

集群升级(如 kubelet 版本更新、节点操作系统补丁)是 Kubernetes 生命周期中最常见的自愿中断场景。PDB 在此过程中扮演以下关键角色:

  • 升级速率控制:PDB 决定了节点升级的并行度——每次只能驱逐满足 PDB 约束数量的 Pod,从而控制升级节奏。
  • 业务连续性保障:在节点排水(drain)过程中,kube-controller-manager 会检查 PDB,确保驱逐操作不会导致服务降级。
  • 升级失败回滚保护:如果 PDB 约束导致升级卡住,系统可以提前识别风险,避免盲目推进。
  • 资源配额校准依据:PDB 的 minAvailable / maxUnavailable 值直接反映业务对中断的容忍度,是资源配额规划的重要输入。
关键认知:没有 PDB 的集群升级,相当于在高速公路上拆除所有限速标志——升级速度可能很快,但一旦发生问题,恢复成本极高。

1.4 PDB 工作流程示意图

PDB 在集群升级中的工作流程 集群升级触发 节点排水请求 PDB 约束检查 通过? 允许驱逐 阻塞等待 节点升级 升级完成 PDB 关键参数 • minAvailable: 最小可用数 • maxUnavailable: 最大不可用数 • selector: 匹配 Pod 标签 • 两者只能设置其一

1.5 PDB 定义示例

以下是一个典型的 PDB 资源定义,用于保障某 Web 服务在集群升级期间至少保持 2 个副本可用:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: web-pdb
  namespace: production
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: web-server
      tier: frontend
常见误区:PDB 只约束自愿中断(如 drain、cordon、节点升级),对非自愿中断(如节点宕机、磁盘故障)无效。非自愿中断需要依赖 ReplicaSet、多副本部署等机制来保障。

1.6 PDB 与集群升级的量化关系

升级场景 PDB 配置 升级并行度 业务影响
无 PDB 未配置 无限制 高——可能瞬间丢失所有副本
宽松 PDB maxUnavailable: 50% 较高 中——部分流量损失
严格 PDB minAvailable: 80% 较低 低——几乎无感知
极严格 PDB minAvailable: 100% 极低(可能卡死) 无——但升级可能无法完成
最佳实践:生产环境建议为所有 Deployment/StatefulSet 配置 PDB,minAvailable 推荐设置为 replicas - 1 或 ceil(replicas * 0.75),在升级速度与业务可用性之间取得平衡。