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 被驱逐。
相关推荐
.冰块.6 小时前
Docker 镜像深度学习:分层 Copy‑on‑Write、Dockerfile 语法、Harbor 私有仓库实操
docker·容器·harbor·镜像·dockerfile·images
szephyr6 小时前
Docker 镜像瘦身实战:从 1.2GB 压到 85MB 的完整过程
docker·容器·部署·多阶段构建·镜像优化
小马同学-6 小时前
Containerd入门:架构原理与安装部署
容器·containerd
天天喝旺仔8 小时前
分布式服务容错实战:用 Sentinel 实现限流、熔断与降级
分布式·微服务·云原生·sentinel
小马同学-10 小时前
crictl实战:K8s容器运行时排障工具
容器·k8s·crictl
逐流人11 小时前
Containerd容器管理实战:从架构原理到nerdctlcrictl工具链
linux·运维·云原生·容器·云计算·containerd
kuroomi21 小时前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
闲云自留地1 天前
Containerd 进阶教程:命名空间 Namespace、私有仓库 Harbor、容器管理全流程
容器
闲云自留地1 天前
Containerd 是什么?架构、插件与安装实践一次讲清
容器
运维开发王义杰1 天前
跨项目直连数据库:是架构反模式,还是现实的工程妥协?
云原生