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 被驱逐。
相关推荐
java_logo11 小时前
Docker 部署 Dify:轻松搭建 LLM 应用开发平台
运维·docker·容器
方便面不加香菜12 小时前
Docker Container -- 综合实战案例详解
运维·docker·容器
分布式存储与RustFS19 小时前
OpenSearch 的索引快照别只留本地:用 repository-s3 存进 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
瑞克-桑切斯19 小时前
docker Harbor 单机部署手册
大数据·运维·elasticsearch·docker·容器
wzq11_66620 小时前
Kubernetes集群——存储管理
云原生·容器·kubernetes
孔令飞21 小时前
企业智能化升级:智能体平台设计和实现
云原生·go·ai编程
分布式存储与RustFS2 天前
镜像仓库的层别堆本地盘:用 RustFS 给 Docker Registry 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
闲云自留地2 天前
K8s 的记忆大脑!ETCD 集群部署、etcdctl 命令与备份恢复全通关
容器·kubernetes·etcd
weirong2 天前
Operator 上生产前补的 6 件事,和 5 件我明确不做的
kubernetes
孙克旭_2 天前
k8s基础组件与创建资源
运维·docker·容器·kubernetes