Pod Disruption Budget (pod 中断 预算) 简称PDB,含义其实是终止pod前通过 labelSelector 机制获取正常运行的pod数目的限制,目的是对自愿中断的保护措施,主动驱逐Pod。Kubernetes version >= 1.7才支持PodDisruptionBudget。
官方文档:https://kubernetes.io/zh-cn/docs/tasks/run-application/configure-pdb/
完整版 k8s 内置资源结构图:

【温馨提示】如果 Node 状态处于 not ready,PDB 是不会生效,因为 PDB 只能针对自愿中断生效。
Pod 不会消失,直到有人(人类或控制器)将其销毁,或者当出现不可避免的硬件或系统软件错误。
常见的非自愿性中断场景,例如:
常见的自愿性中断场景,例如:
包括由应用程序所有者发起的操作和由集群管理员发起的操作。
.spec.selector——用于指定其所作用的 Pod 集合(pod label),该字段为必需字段。.spec.minAvailable——表示驱逐后仍须保证可用的 Pod 数量。即使因此影响到 Pod 驱逐 (即该条件在和 Pod 驱逐发生冲突时优先保证)。 minAvailable 值可以是pod数量或者百分比。.spec.maxUnavailable——表示发生自愿中断的过程中,要保证最大不可用的pod数量或者百分比。如果上面配置只能用来应用内置的
Deployment、RS、RC、StatefulSet、StatefulSet的Pods,推荐优先使用.spec.maxUnavailable。如果你使用了例如Operator的其他控制器,那么设置时就要注意以下两点:
.spec.minAvailable,不能使用 maxUnavailable;.spec.minAvailable 只能为整型值,不能是百分比。【注意事项】
.spec.minAvailable 和 .spec.maxUnavailable。.spec.minAvailable 也没有设置 .spec.maxUnavailable 的话,那么会默认设置 .spec.minAvailable 为 1delete和unavailable虽然也属于自愿中断,但是实际上滚动更新有自己的策略控制(marSurge 和 maxUnavailable),因此PDB不会干预这个过程。.spec.minAvailable 或 .spec.maxUnavailable,这时某个本来正常的Pod突然因为Node Down(非自愿中断)挂了,那么这个时候实际Pods数就比PDB中要求的少了,因此PDB不是万能的。apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: zookeeper
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
maxUnavailable: 1
selector:
matchLabels:
app: zookeeper
Kubernetes PDB 的介绍就先到这里了,其实PDB的使用场景不是很多,有疑问的小伙伴欢迎给我留言哦,后续会持续更新【云原生和大数据】相关的文章,请小伙伴耐心等待哦~