什么是 Kubernetes 的 PodDisruptionBudget?

来源:这里教程网 时间:2026-02-21 17:27:28 作者:

Kubernetes 的 PodDisruptionBudget(PDB)是一种资源对象,用来保障应用在节点维护或集群升级等场景下,仍然能保持一定的可用性。它通过限制在同一时间因主动干扰(如驱逐 Pod)而不可用的副本数量,确保服务不会完全中断。

PodDisruptionBudget 的作用

PDB 主要用于控制自愿性干扰对工作负载的影响。所谓“自愿性干扰”,是指人为触发的操作,比如节点排空(kubectl drain)、滚动更新、节点升级或缩容等。Kubernetes 在执行这些操作时会检查 PDB 规则,避免一次性驱逐过多 Pod 导致服务不可用。

例如,如果你运行一个 3 副本的 Web 服务,设置 PDB 保证至少有 2 个 Pod 始终运行,那么系统在排空节点时就不会让同时超过 1 个 Pod 被驱逐。

如何配置 PodDisruptionBudget

PDB 通过两个关键字段来定义可用性约束:

minAvailable:表示最小可用的 Pod 数量或百分比。例如设为 2,代表至少要有 2 个 Pod 处于运行状态。 maxUnavailable:表示最多允许不可用的 Pod 数量或百分比。例如设为 1,代表最多只能有 1 个 Pod 被驱逐。

这两个字段不能同时存在,只能设置其中一个。下面是一个示例:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: my-app-pdb
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: my-app

这个配置表示:所有标签为 app: my-app 的 Pod,在任意干扰操作中必须至少保持 2 个可用。

适用场景与注意事项

PDB 特别适用于需要高可用保障的有状态服务或核心微服务。但在使用时要注意几点:

如果设置过于严格(如要求全部副本都必须在线),可能导致节点无法正常排空,影响维护操作。 PDB 不防护非自愿性中断,比如节点宕机、网络故障或 kubelet 崩溃等。 配合 Deployment、StatefulSet 等控制器使用效果最佳,直接管理单个 Pod 时不生效。

基本上就这些。合理配置 PodDisruptionBudget 可以在运维操作中有效降低服务中断风险,提升系统的稳定性。

相关推荐