K8S PDB介绍

一、概念

PDB(PodDisruptionBudget):出现人为干扰操作时的Pod保护机制。

通过使用PDB,可以在集群出现某些干扰情况时对pod进行保护,从而避免不必要的服务中断或者服务降级。通常可对多副本工作负载进行保护,包括:Deployment、Replicaset、Statefulset、ReplicationController。

二、配置示例

bash 复制代码
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: nginx-pdb
spec:
  minAvailable: 2        # 最少可用 Pod 数,不能与maxunavailable同时配置
  # maxUnavailable: 1      # 最多不可用 Pod 数,不能与maxunavailable同时配
  selector:
    matchLabels:
      app: nginx

上面是示例中的关键字段解释:

  • apiVersion:目前支持policy/v1beta1和policy/v1两个版本,policy/v1在k8sv1.22及以上版本可用。
  • selector:标签选择器,表示关联的pod集合,通常与副本控制器的配置相同。
  • minAvailabale:需要保证的最小pod数,可以设置为绝对值或百分比,设置为百分比时的算法为乘以副本数,并向上取整,不能与maxunavailable同时设置。
  • maxUnavailable:允许不可用的最大pod数量,可以设置为绝对值或百分比,设置为百分比时的算法为乘以副本数,并向上取整,不能与minAvailabale同时设置。

三、干扰类型

PDB只能保护自愿干扰的情况

自愿干扰( Voluntary Disruptions :人为操作干预pod状态,例如:

  • 删除 Deployment 或其他管理 Pod 的控制器
  • 更新了 Deployment 的 Pod 模板导致 Pod 重启
  • 直接删除 Pod(例如,因为误操作)
  • 排空(drain)节点进行修复或升级。
  • 从集群中排空节点以缩小集群。
  • 从节点中移除一个 Pod,以允许其他 Pod 使用该节点。

非自愿干扰( Involuntary Disruptions :非人为干预的故障影响pod状态,例如:

  • 节点下层物理机的硬件故障
  • 集群管理员错误地删除虚拟机(实例)
  • 云提供商或虚拟机管理程序中的故障导致的虚拟机消失
  • 内核错误
  • 节点由于集群网络隔离从集群中消失
  • 由于节点资源不足导致 pod 被驱逐。
相关推荐
harmony&4 分钟前
ETCD 存储系统实战:从单节点部署到 Kubernetes 高可用集群
数据库·kubernetes·etcd
CJY6217 小时前
k8spod管理
云原生·容器·kubernetes
2601_962218477 小时前
万象生鲜系统区块链溯源技术帮助生鲜企业搭建食品安全数字化体系
大数据·运维·微服务·云原生·架构
Orange_sparkle10 小时前
从 Docker 到 Doris:建立后端基础设施全景图
运维·docker·ai·容器·claude code
gx234811 小时前
控制器管理
docker·容器·kubernetes
Henry-SAP12 小时前
SAP独立需求与相关需求的区别解析
人工智能·云原生·sap·erp
白清羽13 小时前
7.3系统安装docker
运维·docker·容器
GGG76614 小时前
Python 运维自动化:psutil+IPy 系统与网络信息采集深度实战
运维·python·云原生·pip
dazhong201214 小时前
Docker 入门篇(八)-- CentOS7 安装 MySQL 8
mysql·docker·容器
w2005122415 小时前
Pod管理
linux·服务器·云原生·容器·k8s·podman