尚腱埂 发表于 2025-12-29 13:45:00

k8s~Kubernetes PDB

在Kubernetes(k8s)中,PodDisruptionBudget(PDB)是一种资源对象,用于限制在自愿中断(voluntary disruptions)期间同时终止的Pod数量,从而保障应用的可用性。以下是详细说明:
我们为Deployment配置了PDB(PodDisruptionBudget),目的是在自愿中断(如节点维护、升级)时,保证一定数量的Pod副本可用。但是,PDB并不影响非自愿中断(如节点故障、资源不足导致的驱逐)。因此,测试PDB功能是否生效,我们需要模拟自愿中断的场景。

PodDisruptionBudget 的作用


[*]核心目标

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

[*]适用场景

[*]节点维护(kubectl drain)
[*]集群自动扩缩容(如Cluster Autoscaler)
[*]控制器(如Deployment)的滚动更新不适用(PDB仅针对非控制器触发的终止)。

[*]关键字段 spec.minAvailable

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

[*]其他相关字段

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

使用注意事项


[*]选择器(Selector)
PDB通过selector匹配Pod,需确保与目标Pod的标签一致:selector:
matchLabels:
    app: my-app
注意:deployment中的选择器也是这个,它们是一个的,上面的my-app并不是deployment的name
spec:
   selector:
   matchLabels:
       app: my-app
[*]与控制器协作

[*]PDB不控制Pod的创建/删除,需配合Deployment、StatefulSet等使用。
[*]例如:设置minAvailable: 1确保Deployment的Pod至少有一个始终可用。

[*]资源冲突

[*]若minAvailable值过大(如超过副本数),可能导致节点无法排水(需手动调整)。

[*]非自愿中断

[*]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的核心字段,直接定义应用的高可用底线。
[*]适用性:适合有状态服务或对可用性敏感的无状态服务。
[*]平衡:需根据业务需求在“可维护性”和“可用性”之间权衡(如设置过高可能导致维护困难)。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

吉芷雁 发表于 2026-1-6 03:06:47

用心讨论,共获提升!

尹疋 发表于 2026-1-19 12:16:37

懂技术并乐意极积无私分享的人越来越少。珍惜

矛赓宁 发表于 2026-1-21 12:59:16

感谢分享,学习下。

嗅叽 发表于 2026-1-24 10:25:02

谢谢分享,试用一下

菅舛 发表于 2026-1-24 14:00:44

谢谢楼主提供!

貊淀 发表于 2026-1-26 10:22:44

喜欢鼓捣这些软件,现在用得少,谢谢分享!

频鹏凶 发表于 2026-1-27 08:39:23

不错,里面软件多更新就更好了

吮槌圯 发表于 2026-2-1 02:09:28

谢谢分享,辛苦了

梨恐 发表于 2026-2-6 12:43:20

前排留名,哈哈哈

章海 发表于 2026-2-7 21:50:30

懂技术并乐意极积无私分享的人越来越少。珍惜

狞嗅 发表于 2026-2-9 01:22:37

东西不错很实用谢谢分享

卜笑 发表于 2026-2-9 08:38:17

这个好,看起来很实用

裴涛 发表于 2026-2-9 17:32:37

感谢分享,学习下。

驼娑 发表于 2026-2-9 21:28:17

鼓励转贴优秀软件安全工具和文档!

坏级尹 发表于 2026-2-11 00:57:53

前排留名,哈哈哈

卒挪 发表于 2026-2-11 10:15:10

感谢分享,下载保存了,貌似很强大

兮督 发表于 2026-2-12 15:08:36

这个好,看起来很实用

左丘纨 发表于 2026-2-13 05:46:57

谢谢分享,辛苦了

戈森莉 发表于 2026-2-26 14:30:34

前排留名,哈哈哈
页: [1] 2
查看完整版本: k8s~Kubernetes PDB