首页/开发/CI/CD 与发布速查/节点排空(drain)与发布穿插
发布策略60 条

节点排空(drain)与发布穿插

节点维护前 cordon 停止调度、drain 驱逐 Pod;驱逐受 PDB 约束,DaemonSet 与使用本地存储的 Pod 需要单独处理,避免数据与可用性事故。

CI/CD 与发布速查开发更新于 2026-10-13

节点排空与发布穿插是什么

节点维护前 cordon 停止调度、drain 驱逐 Pod;驱逐受 Pod 中断预算约束,DaemonSet 与使用本地存储的 Pod 需要单独处理,避免数据与可用性事故。多节点维护串行推进并保留缓冲容量,维护完成 uncordon 恢复调度。发布编排里穿插节点维护时,先确认副本与预算足够,再逐台执行。操作顺序:先检查预算与副本余量,再排空、维护、恢复。

基本信息

cordon标记不可调度,不驱逐现有 Pod
drain驱逐 Pod;对 DaemonSet 需显式忽略
本地数据需显式确认后才删除临时目录数据
恢复uncordon 重新可调度
约束驱逐受 Pod 中断预算限制
前置检查确认副本数与中断预算余量充足
本地存储使用本地盘的 Pod 迁移前备份或确认可重建

命令与作用

命令作用注意
cordon停止新调度现有工作负载不动
drain驱逐并等待迁移按预算排队,可能较慢
uncordon恢复可调度维护完成后执行
查看观察 Pod 迁移状态确认无卡住对象

安全排空流程

安全排空流程
# 安全排空流程
kubectl cordon node-1   # 停止新调度
kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data
# 观察 Pod 迁移至其他节点
kubectl get pods -o wide --field-selector spec.nodeName=node-1
# 维护完成后恢复调度
kubectl uncordon node-1

典型使用场景

  • 内核与运行时升级:逐台排空、升级、恢复,保持集群容量
  • 节点替换:新节点加入后逐台迁移工作负载
  • 硬件维护:磁盘或网卡检修前的安全排空
  • 发布穿插:滚动发布与节点维护交错执行时控制节奏
  • 容量评估:排空前确认其他节点能承接迁移的副本
  • 维护窗口规划:把节点维护排进发布日历,避免与重大变更叠加
  • 异常处理:驱逐长期阻塞时先查预算与调度约束,再决定调整编排
多节点维护串行推进并保留缓冲容量:同时 drain 多台会把中断预算逼到边界,驱逐排队等待。驱逐顺序与副本调度互相影响:按预算余量决定并发台数。
本地存储的 Pod 驱逐后不保证回来:先确认数据可丢弃或有备份,再执行删除参数。

易错点

  • 无节制批量 drain:可用容量骤降,服务延迟上升
  • 忽略本地存储 Pod:强驱逐造成数据丢失或 Pod 无法迁移
  • 忽略中断预算:强行驱逐被阻塞或服务短暂不可用
  • 未确认缓冲容量:其他节点资源不足,迁移 Pod 排队待调度

数据来源与参考

  • Kubernetes 文档《Safely Drain a Node》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌