节点排空与发布穿插是什么
节点维护前 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 驱逐后不保证回来:先确认数据可丢弃或有备份,再执行删除参数。