← 中文资源

简体中文版本

保护关键负载免受缩容影响

用 PodDisruptionBudget 保护关键工作负载、为可安全驱逐的 Pod 加注解,让自动伸缩器只回收确有把握的空闲节点。

阅读英文原文

概述

自动伸缩器可能回收仍运行关键 Pod 的节点,而工作负载若没有中断预算就无从阻止驱逐。中断预算限制自愿中断的数量,配合 safe-to-evict 注解,可在不牺牲可用性的前提下安全回收节点。

关键步骤

  1. 为必须保持可用的工作负载创建 PodDisruptionBudget。
  2. 为确实不应阻止缩容的 Pod 添加注解。
  3. 确认缩容候选节点上没有本地存储或单副本状态。
  4. 观察缩容事件并确认中断在预算范围内。

验证

  • 无预算保护的关键 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" }