1. PDB 核心概念
- 作用:控制自愿中断(如节点升级、缩容)期间,应用的最小可用副本数或最大不可用比例。
- 关键参数:
minAvailable
:必须保持运行的 Pod 数量(如2
或50%
)。maxUnavailable
:允许中断的 Pod 数量(如1
或10%
)。
- 注意:两者只能选其一,不可同时使用。
2. 配置步骤
(1)编写 PDB YAML 文件
apiVersion: policy/v1 # Kubernetes ≥1.21 使用 policy/v1
kind: PodDisruptionBudget
metadata:name: myapp-pdb # PDB 名称namespace: default # 目标命名空间
spec:minAvailable: 1 # 或 maxUnavailable: "20%"selector:matchLabels:app: myapp # 匹配目标 Pod 的标签(需与 Deployment/StatefulSet 一致)
(2)应用配置
kubectl apply -f pdb.yaml
(3)验证配置
kubectl get pdb -n default # 查看 PDB 状态
kubectl describe pdb myapp-pdb # 检查详情
3. 关键注意事项
3.1 适用对象
3.2 中断类型
- 仅对以下控制器管理的 Pod 生效:Deployment / StatefulSet / ReplicaSet / ReplicationController
- 不适用:裸 Pod(未绑定控制器)。
- 仅针对自愿中断(如
kubectl drain
),对节点宕机等非自愿中断无效。
3.3 参数冲突
3.4 优先级干扰
- 若设置
minAvailable: 2
但当前副本数为 1,PDB 会阻止所有驱逐操作。 - 若集群启用 Pod 优先级,高优先级 Pod 可能绕过 PDB 限制驱逐低优先级 Pod。
4. 实际场景示例
场景 1:确保至少 2 个 Pod 可用
spec:minAvailable: 2selector:matchLabels:app: nginx
场景 2:允许最多 1 个 Pod 不可用
spec:maxUnavailable: 1selector:matchLabels:app: redis
5. 测试与维护
模拟节点维护:
kubectl drain <node-name> --ignore-daemonsets
若违反 PDB 规则,命令会报错并终止。
删除 PDB:
kubectl delete pdb myapp-pdb -n default
6. 总结
PDB 是保障应用高可用的关键工具,需结合业务需求合理置 minAvailable
或 maxUnavailable
,并通过测试验证其行为是否符合预期。