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 被驱逐。
相关推荐
翱翔-蓝天2 小时前
WSL + Docker + GPU 安装 video-subtitle-remover 完整文档
运维·docker·容器
SCBAiotAigc2 小时前
2026.4.10:docker desktop内网环境安装教程
人工智能·docker·容器·具身智能
步步为营DotNet2 小时前
探索.NET 11 中.NET Aspire 在云原生应用可观测性与安全的深度融合
安全·云原生·.net
饼瑶2 小时前
Isaac Sim 5.0.0 Docker 部署手册(实验室服务器)
服务器·docker·容器
wb1893 小时前
docker-ce容器技术重习
运维·笔记·docker·容器·云计算
刘某的Cloud3 小时前
svc中外部流量访问限制
linux·运维·docker·kubernetes·service
阿沁QWQ3 小时前
Docker镜像制作实战
运维·docker·容器
浮尘笔记3 小时前
Docker中安装Kafka以及基本配置和用法、踩坑记录
后端·docker·容器·kafka·php
键盘鼓手苏苏3 小时前
Kubernetes与边缘AI最佳实践
云原生·kubernetes·k8