首页/云/Kubernetes 速查/节点下线与从集群移除
集群运维与排障54 条

节点下线与从集群移除

下线顺序是先排水后删对象:cordon 阻止新调度、drain 迁移负载、最后删除 Node 对象,并处理残留的卷与本地数据。

Kubernetes 速查云更新于 2026-10-13

操作定位

把节点从集群移除是有顺序的动作:先 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 优雅迁移存量 PodPod 被留在 Terminating,失去优雅退出过程
delete node移除 Node 对象已下线的机器仍占调度位置,容量统计失真
本地清理清除 kubelet 与运行时残留重装或重新加入时状态冲突
delete node 只删除 API 对象:节点上的 kubelet 配置、容器与本地卷目录需要单独清理(如 kubeadm reset),否则重新加入集群时可能出现状态冲突。
使用本地卷或 hostPath 的工作负载无法迁移,下线前要确认这类 Pod 能否中断,或先安排数据迁移方案。

易错点

  • 跳过 drain 直接删节点:Pod 会被留在 Terminating,也失去优雅驱逐过程,业务可能出现连接被硬切
  • 用同样方式下线控制面节点:etcd 成员与控制面证书需要额外步骤,不能简化处理,否则有丢失仲裁的风险
  • 忽略 PDB 阻塞:minAvailable 设得过严时 drain 会长时间无法完成,需要临时评估策略
  • 不做本地清理就重装:残留的 kubelet 与 CNI 配置会让节点重新加入时行为异常,排障成本很高

数据来源与参考

  • Kubernetes 官方文档 · 移除节点
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌