---
title: Kubernetes PodDisruptionBudget高可用实践
keywords:
- PodDisruptionBudget
- PDB
- drain
- minAvailable
- maxUnavailable
description: 使用PDB限制可中断Pod数量以保障高可用,提供可验证的YAML与排空命令,降低维护对业务的影响。
date: 2025-11-26
tags:
- Kubernetes
- PDB
- PodDisruptionBudget
- drain
- maxUnavailable
- minAvailable
- 云原生
- 高可用
categories:
- 文章资讯
- 技术教程
---
概述
- 目标:在节点升级/维护期间通过PDB限制同时中断的Pod数量,保持服务SLO与请求处理能力。
- 适用:有状态或需最小副本保障的服务。
核心与实战
- PDB定义(按最小可用):
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: api-pdb
namespace: prod
spec:
minAvailable: 2
selector:
matchLabels: { app: api }
- 或按最大不可用:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: web-pdb
namespace: prod
spec:
maxUnavailable: 1
selector:
matchLabels: { app: web }
示例
- 节点排空与验证:
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
kubectl get pdb -n prod
kubectl describe pdb api-pdb -n prod
- 滚动更新配合:
kubectl -n prod rollout restart deployment/api
验证与监控
- PDB状态:
AllowedDisruptions与CurrentHealthy应符合期望;当不足时驱逐会被阻止。- 维护影响:
- 观察在排空期间的请求成功率与延迟;在观测面板中验证SLO保持。
- 例外情况:
- 持久卷的Pod需结合StatefulSet与存储策略;确保安全停机步骤。
常见误区
- PDB过严导致无法进行维护;需与副本数与负载相匹配。
- 忽视选择器与命名空间导致未生效;需精确匹配目标工作负载。
- 仅设置PDB而无就绪探针/滚动策略;必须配合健康探针与更新策略。
结语
- PDB为K8s维护活动提供安全阀,配合滚动与探针可在高可用目标下进行稳定的升级与节点操作。

发表评论 取消回复