k8s~Kubernetes PDB

在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的核心字段,直接定义应用的高可用底线。
  • 适用性:适合有状态服务或对可用性敏感的无状态服务。
  • 平衡:需根据业务需求在“可维护性”和“可用性”之间权衡(如设置过高可能导致维护困难)。
posted @ 2025-12-29 12:57  张占岭  阅读(0)  评论(0)    收藏  举报