目录
最近看代码时,老是在代码中能看到PDB 是什么呢?Pod Disruption Budget (pod 中断 预算),含义其实是 终止pod前 通过labelSelector机制获取正常运行的pod数目的限制,目的是对主动驱逐的保护措施。
场景
- 节点维护或升级时(kubectl drain)
- 对应用的自动缩容操作(autoscaling down)
- 由于节点不可用(not ready)导致的Pod驱逐就不能称之为主动
特性
- PDB指定一个pod集合在一段时间内存活的最小实例数量或者百分比
- 作用于一组被同一个控制器管理的pod。例如:RC或者statefulapp
- 使用PodDisruptionBudget控制器本身无法真正保障指定数量或者百分比的pod存活,PodDisruptionBudget控制器只能保证POD主动逃离的情况下业务不中断或者业务SLA不降级
- 场景局限于:主动驱逐
主动驱逐的场景,用用如果能够保持存活pod数量,将会非常有用。通过使用Pod Disruption Budget 对象,应用可以保证那些主动移除pod的集群操作永远不会同一时间停掉太多pod,导致服务中断或者服务降级。
kubectl drain 操作时遵循PDB对象的设定,如果在该节点上运行了属于统一服务的多个pod,则为了保证最少存活数量,系统会确保每终止一个pod就会在健康的node上启动新的pod后,再继续终止下一个pod容器。