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 被驱逐。
相关推荐
薪火铺子7 小时前
微服务认证方案对比与选型
微服务·云原生·架构
运维全栈笔记8 小时前
K8S部署Redis高可用全攻略:1主2从3哨兵架构实战
redis·docker·云原生·容器·架构·kubernetes·bootstrap
尘世壹俗人8 小时前
使用K8s部署模型
kubernetes
AI攻城狮9 小时前
AI Agent 从上线到删库跑路始末
云原生
AI木马人10 小时前
9.人工智能实战:GPU 服务如何上 Kubernetes?从单机部署到 K8s + NVIDIA Device Plugin + HPA 的生产级改造
人工智能·容器·kubernetes
码点滴15 小时前
告别显存焦虑:PagedAttention 如何将大模型吞吐量提升 4 倍?
人工智能·架构·kubernetes·大模型·pagedattention
键盘鼓手苏苏16 小时前
Kubernetes 容器安全最佳实践
云原生·kubernetes·k8
Elastic 中国社区官方博客16 小时前
Elasticsearch Serverless 中跨项目搜索(CPS)的工作原理
大数据·elasticsearch·搜索引擎·云原生·serverless
键盘鼓手苏苏16 小时前
Kubernetes 安全最佳实践
云原生·kubernetes·k8
小妖同学学AI17 小时前
云原生AI服务新范式:Jina Serve框架,让多模态大模型落地像搭积木一样简单
人工智能·云原生·jina