尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
15-Pod 中断预算(PDB)
Pod Disruption Budget概念引入你用过 Deployment#04管理多副本应用——即使某个节点挂了Pod 也会在其他节点重建。但集群升级时主动驱逐 Poddrain如果所有副本都在同一个节点上呢你的应用有 3 个副本某天管理员要升级节点❌ 没有 PDB 节点 drain → 3 个 Pod 同时被驱逐 → 应用全部下线 ✅ 有 PDBminAvailable: 2 节点 drain → 最多驱逐 1 个 → 至少 2 个始终在线 → 用户无感知Pod Disruption BudgetPDB就是给应用设最低在线人数——驱逐 Pod 时不能低于这个数。✅ 有 PDB: minAvailable2驱逐阻止阻止还有 2 个在跑drain 节点Pod 1Pod 2⏸️ 保持运行Pod 3⏸️ 保持运行服务正常❌ 无 PDB驱逐驱逐驱逐3 个全挂drain 节点Pod 1Pod 2Pod 3服务中断学完本篇你将能够创建 PodDisruptionBudget确保节点维护时应用保持最低可用副本数根据场景选择 minAvailable 或 maxUnavailable 参数在 drain 节点时观察 PDB 如何阻止过度驱逐原理讲解两种计算方式apiVersion:policy/v1kind:PodDisruptionBudgetmetadata:name:app-pdbspec:# 方式 1最少保持可用几个minAvailable:2# 方式 2二选一最多允许几个不可用# maxUnavailable: 1selector:matchLabels:app:my-app参数含义适合场景minAvailable驱逐时至少保持可用的 Pod 数你明确知道最少需要几个maxUnavailable驱逐时最多允许不可用的 Pod 数你不管总数只关心最多挂几个minAvailable: 2 和 maxUnavailable: 1 的区别3 副本为例3 副本时两者等价minAvailable2 ↔ maxUnavailable1 但副本数变化时 - minAvailable2副本数扩到 5 → 可同时驱逐 3 个 - maxUnavailable1副本数扩到 5 → 还是只能同时驱逐 1 个PDB 覆盖的场景PDB 保护的是自愿中断Voluntary Disruption不是意外故障场景自愿中断PDB 管不管kubectl drain✅ 是✅ 管集群自动缩容CA✅ 是✅ 管滚动更新Deployment✅ 是✅ 管Pod 崩溃OOMKilled❌ 否非自愿❌ 不管节点宕机❌ 否非自愿❌ 不管手动kubectl delete pod✅ 是⚠️ 不管delete 绕过 PDB⚠️重要kubectl delete pod是直接删除不会检查 PDB。只有 Eviction APIdrain 背后用的会检查 PDB。PDB 和 HPA 的配合集群缩容到底至少保证HPAminReplicas: 2maxReplicas: 10PDBminAvailable: 22 个 Pod2 个在线⚠️ drain 节点时HPA 只剩 2 个 PodPDB 也要 2 个→ 无法驱逐任何 Pod建议minAvailable要小于 HPA 的minReplicas否则缩容后 drain 会卡住。常见配置推荐副本数minAvailable说明1不设 PDB设了反而会阻止 drain永远达不到 minAvailable21保证至少 1 个在线32保证多数在线5replicas - 1或floor(replicas × 0.75)保证大多数在线动手实验配套实验位于docs/labs/beginner/pdb/步骤 1部署实验环境cddocs/labs/beginner/pdbbashsetup.sh步骤 2查看 PDB 状态kubectl get pdb# 输出NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE# pdb 2 N/A 1 10skubectl describe pdb app-pdb步骤 3测试 drain 被 PDB 阻止# 查看 Pod 分布在哪些节点kubectl get pods-owide# 预期3 个 Pod 分布在 2 个 worker 上其中一个 worker 有 2 个 Pod# 找到有 2 个 Pod 的 worker 节点对它执行 drain# 把下面的节点名换成你实际有 2 个 Pod 的节点kubectl drain有2个Pod的节点名--delete-emptydir-data --ignore-daemonsets--timeout5s# 预期输出关键行# evicting pod default/my-app-aaa ...# error when evicting pods/my-app-bbb ...: Cannot evict pod as it would violate the pods disruption budget.# ↑ 第 2 个 Pod 被 PDB 阻止# evicting pod default/my-app-aaa ...# error: unable to drain node ...: global timeout reached: 5s# ↑ drain 因 PDB 阻止而超时失败# 恢复节点kubectl uncordon节点名# 等待 Pod 恢复kubectlwait--forconditionready pod-lappmy-app--timeout60s关于 ALLOWED DISRUPTIONS这个值是实时计算的当前 Ready Pod 数 - minAvailable不是消耗型计数器。drain 期间它确实变为 0但 replacement Pod 在其他节点就绪后又回到 1。如果你在 drain 超时前快速执行kubectl get pdb能看到 0。步骤 4验证滚动更新也受 PDB 约束# 触发滚动更新kubectl rollout restart deployment/my-app# 观察 Pod 替换过程——同时不可用的 Pod 不会超过 maxUnavailablekubectl get pods-w步骤 5清理bashteardown.sh自检问题[基础]PDB 是保证 Pod 不挂掉吗它真正的保护范围是什么[理解]如果 Deployment 的 strategy 是maxSurge: 2, maxUnavailable: 1PDB 设了maxUnavailable: 0。RollingUpdate 会怎样[应用]生产环境一个 10 副本的关键服务要升级节点。你希望 drain 过程中至少 8 个 Pod 始终在线。PDB 怎么写副本数从 10 缩到 5非高峰期时会不会出问题查看答案PDB不保证Pod 不挂掉。它只保护自愿中断Voluntary Disruption——包括kubectl drain、集群自动缩容Cluster Autoscaler、滚动更新等受控驱逐操作。Pod 自身崩溃、节点宕机、OOMKilled 这些非自愿中断 PDB 完全不管。kubectl delete pod直接绕过 PDB。PDB 会阻止 RollingUpdate 进行。maxUnavailable: 0表示不允许任何 Pod 不可用。但 RollingUpdate 本身是通过终止旧 Pod、创建新 Pod 来实现的——这期间旧 Pod 是不可用的。如果 PDB 坚持 0 个不可用更新就卡住了。解决方案PDB 的maxUnavailable至少要 ≥ Deployment 策略中的maxUnavailable。spec:minAvailable:8selector:matchLabels:app:critical-service10 副本 → drain 最多驱逐 2 个 → ✅ 至少 8 个在线。如果缩到 5 副本 → 满打满算只能驱逐 0 个5 8→ ❌ drain 被永远阻止。解决方案minAvailable用百分比minAvailable: 75%副本数变小时自动调整5 的 75% 3.75 → 取整为 3允许驱逐 2 个。下一步应用高可用保证了。接下来深入理解 Pod 如何获得身份、如何认证→ 26. Pod 身份与认证机制 本文来自 K8s Guide —— 开源免费的 Kubernetes 中文学习指南️ 初学者轨道 面试轨道从零基础到拿 Offer 一站式覆盖 每篇文章配套 Kind 实验脚本本地一键运行 本文源码docs/beginner/20-gateway-api.md⭐ 如果对你有帮助欢迎 Star github.com/callmebg/k8s-guide
RELATED

相关推荐

ZLMediaKit流媒体服务器:从协议解析到企业级部署实战

ZLMediaKit流媒体服务器:从协议解析到企业级部署实战

1. 项目概述:为什么我们需要自己的流媒体服务器?如果你正在看这篇文章,大概率是遇到了类似的需求:公司内部需要一个稳定、低延迟的直播培训系统;或者你想搭建一个家庭监控中心,把多个摄像头的画面汇聚到一个…

📅 2026/10/6 15:37:35
reTerminal DM开发板eMMC刷写Raspbian全攻略:告别SD卡不稳定性

reTerminal DM开发板eMMC刷写Raspbian全攻略:告别SD卡不稳定性

1. 项目缘起:为什么需要将Raspbian刷入reTerminal DM的eMMC?如果你手头有一块来自Seeed Studio的reTerminal DM开发板,并且已经用SD卡体验过Raspbian,那你大概率会遇到一个共同的痛点:SD卡的读写速度和可靠性&#xff…

📅 2026/10/8 9:41:00
【单片机毕业设计推荐】基于 STM32 或 51 单片机的智能感应垃圾桶设计与实现,基于 STM32 或 51 单片机的多传感器智能垃圾桶监测系统设计(025004)

【单片机毕业设计推荐】基于 STM32 或 51 单片机的智能感应垃圾桶设计与实现,基于 STM32 或 51 单片机的多传感器智能垃圾桶监测系统设计(025004)

文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案核心功能核心功能 1:红外感应舵机自动开盖控制核心功能 2:超声波垃圾容量检测与满溢锁定核心功能 3:手动 / 自动双模式切换控制核心功能 4:OLED 屏幕多信息可视化显示核…

📅 2026/9/17 13:03:27
MORE NEWS

更多资讯

📰

井下电工证考什么科目 2026河南最新政策下如何顺利拿证

井下电工证考什么科目 2026河南最新政策下如何顺利拿证 学历不高怕报不上名?别担心,2026河南最新政策明确,只要年满18周岁、具备初中及以上学历、身体健康,就可以报考井下电工证。这个证不仅是入行门槛,更是未来薪资和晋升的关键。下面详细讲…

📰

电工证初级中级区别在哪考才不踩坑?实操考试心里没底怕挂科

电工证初级中级区别在哪考才不踩坑?实操考试心里没底怕挂科 实操考试心里没底怕挂科,这几乎是每个准备考电工证的人都会有的想法。尤其是初级和中级电工证的区别,很多人不清楚到底哪个适合自己, 在哪考…

📰

怀宁电工证怎么考?怕考不过白交培训费?这些细节你必须知道

怀宁电工证怎么考?怕考不过白交培训费?这些细节你必须知道 怕考不过白交培训费?现在很多人想考【怀宁电工证】,但对流程一知半解,结果花了钱,最后还是没拿到证。今天就从 周口劳务班组负责人…

📰

建筑特种工年龄要求郑州报考避坑指南:从0到1拿到证的关键步骤

建筑特种工年龄要求郑州报考避坑指南:从0到1拿到证的关键步骤 你是不是也在为找工作发愁?别急,特种作业证就是你进入建筑行业的“敲门砖”。尤其是郑州这边,施工企业对持证上岗要求越来越严格, 建筑特种工年龄要求…

📰

工地太忙根本没时间复习考试?初级电工证考哪种在哪考全攻略

工地太忙根本没时间复习考试?初级电工证考哪种在哪考全攻略 工地太忙根本没时间复习考试,这几乎是每个施工队电工的共同烦恼。尤其在项目赶工期的时候,安全培训、考试复习往往被放在了最不重要的位置。但你知道吗, 初级电工证考哪种…

📰

宿迁哪里能考电工证啊千万别踩坑!别让中介坑了你

宿迁哪里能考电工证啊千万别踩坑!别让中介坑了你 你是不是也正愁着“宿迁哪里能考电工证啊”,怕被那些中介坑了钱还拿不到证?别急,这篇文章就是为你准备的,告诉你怎么避开那些坑,稳稳拿到电工证。 一、宿迁电工证办理现状:别让“假机构”骗了你…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬