操作定位
把节点从集群移除是有顺序的动作:先 cordon 阻止新 Pod 调度进来,再 drain 优雅迁移存量负载,确认无残留后删除 Node 对象,最后在节点本机清理 kubelet 配置、容器与本地卷目录。适用平台是 Kubernetes(kubeadm 集群用 kubeadm reset 完成本地清理)。顺序颠倒会留下 Terminating 状态的 Pod 和说不清的残留存储。
基本信息
| 适用平台 | Kubernetes,节点下线与缩容场景 |
|---|---|
| 关键命令 | kubectl cordon、kubectl drain、kubectl delete node |
| 本地清理 | kubeadm 集群用 kubeadm reset,同时清理 CNI 配置与运行时数据 |
| 前置检查 | 确认冗余足够、PDB 不会阻塞、无本地卷独占工作负载 |
典型使用场景
- 缩容集群:业务低峰期安全下线多余节点
- 硬件更换:机器退役前把负载迁空
- 节点重装:重装系统前完成下线,重装后重新加入集群
- 故障节点处理:确认数据已迁移后彻底清理,避免残留对象干扰调度
- 云上降本:配合告警确认无关键负载独占该节点
下线步骤
下线步骤
kubectl get pods -A -o wide --field-selector spec.nodeName=node1 # 先看有什么在上面
kubectl cordon node1 # 停止新调度
kubectl drain node1 --ignore-daemonsets --delete-emptydir-data # 优雅驱逐
kubectl get pdb -A # 确认 PDB 未阻塞排水
kubectl delete node node1 # 删除 Node 对象
kubectl get pv | grep node1 # 核对残留的本地卷
# 节点本机:kubeadm reset、清理 CNI 配置与容器运行时数据每步的作用
| 步骤 | 作用 | 跳过后的后果 |
|---|---|---|
| cordon | 阻止新 Pod 调度 | 排水过程中不断有新 Pod 落上来,永远排不空 |
| drain | 按 PDB 优雅迁移存量 Pod | Pod 被留在 Terminating,失去优雅退出过程 |
| delete node | 移除 Node 对象 | 已下线的机器仍占调度位置,容量统计失真 |
| 本地清理 | 清除 kubelet 与运行时残留 | 重装或重新加入时状态冲突 |
delete node 只删除 API 对象:节点上的 kubelet 配置、容器与本地卷目录需要单独清理(如 kubeadm reset),否则重新加入集群时可能出现状态冲突。
使用本地卷或 hostPath 的工作负载无法迁移,下线前要确认这类 Pod 能否中断,或先安排数据迁移方案。