PodDisruptionBudget:维护窗口中的可用性边界

正确设置 PDB,避免节点维护无法驱逐或驱逐后业务容量不足。

文章目录 · 4 节

PDB 只约束自愿中断,例如节点 drain 和集群升级;它不能防止节点宕机,也不会自动保证应用可用。

选择 minAvailable 或 maxUnavailable

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: checkout
spec:
  maxUnavailable: 1
  selector:
    matchLabels:
      app: checkout

对副本数会变化的工作负载,maxUnavailable 往往更直观。单副本应用设置 minAvailable: 1 会让 drain 永久阻塞,必须先扩副本或安排明确停机。

维护前检查

kubectl get pdb -A
kubectl describe pdb <NAME> -n <NS>
kubectl drain <NODE> --ignore-daemonsets --dry-run=server

关注 disruptionsAllowed,并确认 selector 没有误选多个工作负载。PDB 允许驱逐不代表剩余副本有足够资源和正确拓扑。

与滚动发布区分

Deployment 的 maxUnavailable 控制滚动更新,PDB 控制驱逐 API,两者需要共同设计。维护演练应在故障一台节点的条件下验证容量。

处理阻塞

遇到阻塞先确认业务风险,再临时调整 PDB。不要默认使用 --disable-eviction 绕过,它会跳过保护并可能造成真实中断。