【云原生】Kubernetes PDB(Pod Disruption Budget)介绍与简单使用
目录
一、概述
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 内置资源结构图:
二、PDB 应用场景
- 节点维护或升级时 ( kubectl drain )
- 对应用的自动缩容操作(autoscaling down)
【温馨提示】如果 Node 状态处于 not ready,PDB 是不会生效,因为 PDB 只能针对自愿中断生效。
1)自愿中断和非自愿中断场景
Pod 不会消失,直到有人(人类或控制器)将其销毁,或者当出现不可避免的硬件或系统软件错误。
1、非自愿性中断场景
常见的非自愿性中断场景,例如:
- 后端节点物理机的硬件故障
- 集群管理员错误地删除虚拟机(实例)
- 云提供商或管理程序故障使虚拟机消失
- 内核恐慌(kernel panic)
- 节点由于集群网络分区而从集群中消失
- 由于节点资源不足而将容器逐出
2、自愿性中断场景
常见的自愿性中断场景,例如:
包括由应用程序所有者发起的操作和由集群管理员发起的操作。
- 删除管理该 pod 的 Deployment 或其他控制器。
- 更新了 Deployment 的 pod 模板导致 pod 重启。
- 直接删除 pod。
- 排空(drain)节点进行修复或升级。
- 从集群中排空节点以缩小集群(了解集群自动调节)。
- 从节点中移除一个 pod,以允许其他 pod 使用该节点。
2)PDB 关键参数和注意事项
.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
只能为整型值,不能是百分比。
【注意事项】
- 同一个 PDB Object 中不能同时定义
.spec.minAvailable
和.spec.maxUnavailable
。 - 如果即没有设置
.spec.minAvailable
也没有设置.spec.maxUnavailable
的话,那么会默认设置.spec.minAvailable
为1
- 前面提到,应用滚动更新时Pod的
delete
和unavailable
虽然也属于自愿中断,但是实际上滚动更新有自己的策略控制(marSurge
和maxUnavailable
),因此PDB不会干预这个过程。 - PDB 只能保证自愿中断时的副本数,比如 evict pod过程中刚好满足
.spec.minAvailable
或.spec.maxUnavailable
,这时某个本来正常的Pod突然因为Node Down(非自愿中断)挂了,那么这个时候实际Pods数就比PDB中要求的少了,因此PDB不是万能的。
三、示例演示
1)使用 minAvailable 的PDB 示例
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: zookeeper
2)使用 maxUnavailable 的 PDB 示例
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
maxUnavailable: 1
selector:
matchLabels:
app: zookeeper
Kubernetes PDB 的介绍就先到这里了,其实PDB的使用场景不是很多,有疑问的小伙伴欢迎给我留言哦,后续会持续更新【云原生和大数据】相关的文章,请小伙伴耐心等待哦~
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器