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 绕过,它会跳过保护并可能造成真实中断。