时间:2025-12-29 12:57
人气:
作者:admin
在Kubernetes(k8s)中,PodDisruptionBudget(PDB)是一种资源对象,用于限制在自愿中断(voluntary disruptions)期间同时终止的Pod数量,从而保障应用的可用性。以下是详细说明:
核心目标
适用场景
kubectl drain)关键字段 spec.minAvailable
spec:
minAvailable: 2 # 绝对数值
# 或
minAvailable: "50%" # 百分比形式
minAvailable个Pod处于运行状态。如果违反此约束,操作会被拒绝。其他相关字段
maxUnavailable(与minAvailable二选一):允许不可用的Pod的最大数量(或百分比)。spec:
maxUnavailable: 1 # 最多允许1个Pod不可用
selector匹配Pod,需确保与目标Pod的标签一致:selector:
matchLabels:
app: my-app
注意:deployment中的选择器也是这个,它们是一个的,上面的my-app并不是deployment的name
spec:
selector:
matchLabels:
app: my-app
与控制器协作
minAvailable: 1确保Deployment的Pod至少有一个始终可用。资源冲突
minAvailable值过大(如超过副本数),可能导致节点无法排水(需手动调整)。非自愿中断
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
支付宝扫一扫,为大叔打赏!

Ubuntu离线环境部署Kubernetes v1.31.3(ARM64)