文章目录Kubernetes PDBPod Disruption Budget详解一、什么是 PDB二、什么是“自愿中断”1. 自愿中断PDB 可控制2. 非自愿中断PDB 无法控制三、PDB 的核心字段1. minAvailable2. maxUnavailable四、PDB 工作原理五、PDB 示例示例保证至少 2 个 Pod 可用示例最多允许 1 个 Pod 不可用六、典型使用场景1. 高可用服务推荐2. Stateful 应用谨慎使用3. 单副本应用不建议设置 PDB七、PDB 与 HPA / Deployment 的关系与 Deployment与 HPAHorizontal Pod Autoscaler八、常见坑与注意事项1. PDB 设置过严2. 副本数不足3. 忽略 Pod Ready 状态4. 与滚动更新冲突九、最佳实践✅ 推荐策略❌ 避免做法十、总结Kubernetes PDBPod Disruption Budget详解在生产环境中运行 KubernetesK8s集群时服务的高可用性至关重要。我们常常会遇到节点维护、集群升级、自动扩缩容等场景这些操作可能导致 Pod 被驱逐Eviction。如果没有合理控制可能会引发服务中断。为了解决这个问题Kubernetes 提供了一个重要机制PDBPod Disruption Budget。一、什么是 PDBPod Disruption BudgetPDB是 Kubernetes 中用于限制“自愿中断”Voluntary Disruption的资源对象。它的核心作用是在集群发生维护或调度操作时确保系统中始终有足够数量的 Pod 保持可用。二、什么是“自愿中断”PDB 只对“自愿中断”生效而不控制“非自愿中断”。1. 自愿中断PDB 可控制由人为或系统触发的操作例如节点维护kubectl drain集群升级自动扩缩容Cluster AutoscalerPod 重调度2. 非自愿中断PDB 无法控制不可预测的故障例如节点宕机容器崩溃网络故障 关键点PDB 不是高可用的万能保障它只是“优雅中断”的控制器。三、PDB 的核心字段PDB 主要通过两个字段来定义可用性约束1.minAvailable表示至少要有多少个 Pod 保持可用minAvailable:2 含义无论如何至少 2 个 Pod 必须在运行2.maxUnavailable表示最多允许多少个 Pod 不可用maxUnavailable:1 含义最多允许 1 个 Pod 被驱逐⚠️ 注意minAvailable和maxUnavailable不能同时设置支持整数或百分比如50%四、PDB 工作原理当执行如下操作时kubectl drainnodeKubernetes 会尝试驱逐该节点上的 Pod查询该 Pod 是否受 PDB 约束判断驱逐是否违反 PDB如果违反驱逐会被阻止Eviction 被拒绝五、PDB 示例示例保证至少 2 个 Pod 可用apiVersion:policy/v1kind:PodDisruptionBudgetmetadata:name:my-app-pdbspec:minAvailable:2selector:matchLabels:app:my-app示例最多允许 1 个 Pod 不可用apiVersion:policy/v1kind:PodDisruptionBudgetmetadata:name:my-app-pdbspec:maxUnavailable:1selector:matchLabels:app:my-app六、典型使用场景1. 高可用服务推荐例如Web 服务API 服务微服务 防止同时驱逐过多 Pod导致服务不可用2. Stateful 应用谨慎使用例如数据库MySQL / PostgreSQLKafka / ZooKeeper 通常需要更严格的 PDB 策略甚至 0 disruption3. 单副本应用不建议设置 PDB如果 Deployment 只有 1 个 Pod设置 PDB 会导致节点无法 drain集群维护可能被“卡死”七、PDB 与 HPA / Deployment 的关系与 DeploymentDeployment 控制 Pod 数量PDB 控制 Pod能否被驱逐 两者是互补关系与 HPAHorizontal Pod AutoscalerHPA 扩缩容时不会被 PDB 阻止但缩容过程中仍需满足 PDB 约束八、常见坑与注意事项1. PDB 设置过严minAvailable:100% 会导致节点无法维护滚动升级卡住2. 副本数不足replicas:2minAvailable:2 任何驱逐都会失败3. 忽略 Pod Ready 状态PDB 只计算Ready 状态的 Pod 如果 Pod 不健康实际可驱逐空间会更小4. 与滚动更新冲突Deployment 滚动更新时也可能触发 PDB 限制导致更新速度变慢九、最佳实践✅ 推荐策略至少 2~3 个副本 合理 PDB使用maxUnavailable: 1简单安全对关键服务强制设置 PDB❌ 避免做法单副本应用设置 PDB使用极端值100% / 0忽略 Ready 状态十、总结PDB 是 Kubernetes 中保障服务稳定性的重要机制 它解决的问题是“在维护过程中系统还能不能正常服务” 核心价值控制驱逐节奏防止服务雪崩提升系统可用性但要记住PDB ≠ 高可用本身它只是高可用体系中的一环。