网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 其他技术区 > Kubernetes >

k8s~Kubernetes PDB

时间:2025-12-29 12:57

人气:

作者:admin

标签:

导读:在Kubernetes(k8s)中,PodDisruptionBudget(PDB)是一种资源对象,用于限制在自愿中断(voluntary disruptions)期间同时终止的Pod数量,从而保障应用的可用性。以下是详细说明: 我们为Deploym...

在Kubernetes(k8s)中,PodDisruptionBudget(PDB)是一种资源对象,用于限制在自愿中断(voluntary disruptions)期间同时终止的Pod数量,从而保障应用的可用性。以下是详细说明:


我们为Deployment配置了PDB(PodDisruptionBudget),目的是在自愿中断(如节点维护、升级)时,保证一定数量的Pod副本可用。但是,PDB并不影响非自愿中断(如节点故障、资源不足导致的驱逐)。因此,测试PDB功能是否生效,我们需要模拟自愿中断的场景。

PodDisruptionBudget 的作用

  1. 核心目标

    • 确保在主动运维操作(如节点排水、集群升级、自动缩容等)时,应用始终有指定数量的Pod保持运行。
    • 防止因同时终止过多Pod导致服务不可用。
  2. 适用场景

    • 节点维护(kubectl drain
    • 集群自动扩缩容(如Cluster Autoscaler)
    • 控制器(如Deployment)的滚动更新不适用(PDB仅针对非控制器触发的终止)。
  3. 关键字段 spec.minAvailable

    • 定义:指定必须保持可用的Pod的最小数量(或百分比)。
    • 示例
      spec:
        minAvailable: 2  # 绝对数值
        # 或
        minAvailable: "50%"  # 百分比形式
      
    • 行为:当用户或系统尝试终止Pod时,Kubernetes会确保至少minAvailable个Pod处于运行状态。如果违反此约束,操作会被拒绝。
  4. 其他相关字段

    • maxUnavailable(与minAvailable二选一):允许不可用的Pod的最大数量(或百分比)。
      spec:
        maxUnavailable: 1  # 最多允许1个Pod不可用
      

使用注意事项

  1. 选择器(Selector)
    PDB通过selector匹配Pod,需确保与目标Pod的标签一致:
    selector:
      matchLabels:
        app: my-app
    

注意:deployment中的选择器也是这个,它们是一个的,上面的my-app并不是deployment的name

spec:
   selector:
     matchLabels:
       app: my-app
  1. 与控制器协作

    • PDB不控制Pod的创建/删除,需配合Deployment、StatefulSet等使用。
    • 例如:设置minAvailable: 1确保Deployment的Pod至少有一个始终可用。
  2. 资源冲突

    • minAvailable值过大(如超过副本数),可能导致节点无法排水(需手动调整)。
  3. 非自愿中断

    • PDB仅对自愿中断生效(如节点排水)。硬件故障、OOM Kill等非自愿中断不受PDB约束。

示例配置

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: my-app-pdb
spec:
  minAvailable: "50%"  # 至少50%的Pod保持可用
  selector:
    matchLabels:
      app: hello
---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      deployment: hello  # ← 查找标签为deployment=hello的Pod
  template:
    metadata:
      labels:
        deployment: hello  # ← 创建Pod时给它打上deployment=hello标签
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2

总结

  • minAvailable:是PDB的核心字段,直接定义应用的高可用底线。
  • 适用性:适合有状态服务或对可用性敏感的无状态服务。
  • 平衡:需根据业务需求在“可维护性”和“可用性”之间权衡(如设置过高可能导致维护困难)。

作者:仓储大叔,张占岭,
荣誉:微软MVP
QQ:853066980

支付宝扫一扫,为大叔打赏!

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信