概述
自动伸缩器可能回收仍运行关键 Pod 的节点,而工作负载若没有中断预算就无从阻止驱逐。中断预算限制自愿中断的数量,配合 safe-to-evict 注解,可在不牺牲可用性的前提下安全回收节点。
关键步骤
- 为必须保持可用的工作负载创建 PodDisruptionBudget。
- 为确实不应阻止缩容的 Pod 添加注解。
- 确认缩容候选节点上没有本地存储或单副本状态。
- 观察缩容事件并确认中断在预算范围内。
验证
- 无预算保护的关键 Pod 不会被一并驱逐。
- 缩容可回收符合条件节点。
- 有状态或单副本数据不因缩容丢失。
- 中断次数在预算之内。
注意事项
- PDB 约束自愿中断,不能阻止节点故障或无视它的维护。
- 过严的预算浪费容量,过松则招致中断;平衡二者是持续工作。
适用范围
本条目围绕「保护关键负载免受缩容影响」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata: { name: app-pdb }
spec:
minAvailable: 2
selector: { matchLabels: { app: web } }
---
# let the autoscaler evict a non-critical pod
metadata:
annotations: { cluster-autoscaler.kubernetes.io/safe-to-evict: "true" }