Kubernetes 节点摘除指南

目录

一、安全摘除节点的标准流程

[1. 确认节点名称及状态](#1. 确认节点名称及状态)

[2. 标记节点为不可调度](#2. 标记节点为不可调度)

[3. 排空(Drain)节点](#3. 排空(Drain)节点)

[4. 删除节点](#4. 删除节点)

二、验证节点是否成功摘除

[1. 检查节点列表](#1. 检查节点列表)

[2. 检查节点详细信息](#2. 检查节点详细信息)

[3. 验证 Pod 状态](#3. 验证 Pod 状态)

三、彻底清理节点(可选)

[1. 停止并重置 kubelet](#1. 停止并重置 kubelet)

[2. 清理残留文件](#2. 清理残留文件)

[3. 删除证书(如果使用 kubeadm)](#3. 删除证书(如果使用 kubeadm))

四、常见问题

[1. 节点状态一直为 NotReady](#1. 节点状态一直为 NotReady)

[2. 无法删除节点](#2. 无法删除节点)


一、安全摘除节点的标准流程

1. 确认节点名称及状态

首先通过以下命令获取节点列表:

复制代码
kubectl get nodes -o wide

找到需摘除的节点名称,并确认其状态为 Ready 。若节点已异常(如 NotReady),需先排查问题或强制操作。

2. 标记节点为不可调度

使用 cordon 命令阻止新 Pod 调度到该节点:

复制代码
kubectl cordon <node-name>

验证节点状态:

复制代码
kubectl get nodes <node-name>
#输出中 "STATUS" 应为 "SchedulingDisabled"
3. 排空(Drain)节点

在移除节点前,需确保该节点上的 Pod 被安全迁移到其他节点,避免服务中断。

复制代码
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
  • --ignore-daemonsets:忽略 DaemonSet 管理的 Pod(如日志收集组件)。

  • --delete-emptydir-data :删除使用 emptyDir 卷的 Pod 数据。

  • 注意 :如果存在无法自动迁移的 Pod(如没有副本的裸 Pod),需手动处理或添加 --force 参数。

4. 删除节点

驱逐完成后,执行以下命令从集群中移除节点:

复制代码
kubectl delete node <node-name>

二、验证节点是否成功摘除

1. 检查节点列表

使用 get nodes 确认节点已消失:

复制代码
kubectl get nodes
  • 如果节点已成功删除,列表中不再显示该节点。

  • 如果节点仍在列表中但状态为 NotReady,可能需检查网络或手动清理。

2. 检查节点详细信息
复制代码
kubectl describe node <node-name>
  • 若节点已删除,会返回错误

复制代码
  Error from server (NotFound): nodes "<node-name>" not found。
3. 验证 Pod 状态

检查原节点上的 Pod 是否已重新调度到其他节点:

复制代码
kubectl get pods -o wide | grep node1
# 应无输出,表示所有 Pod 已迁移

三、彻底清理节点(可选)

如果节点需要从物理/虚拟环境中永久移除,还需在节点本机执行以下操作:

1. 停止并重置 kubelet
复制代码
systemctl stop kubelet
kubeadm reset -f
2. 清理残留文件
复制代码
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/config
3. 删除证书(如果使用 kubeadm)
复制代码
rm -rf /etc/kubernetes/pki/

四、常见问题

1. 节点状态一直为 NotReady
  • 检查节点网络是否正常。

  • 检查节点上的 kubelet 是否在运行:

    复制代码
    systemctl status kubelet
2. 无法删除节点
  • 确认已执行 kubectl drain

  • 强制删除节点(谨慎操作):

    复制代码
    kubectl delete node <node-name> --force --grace-period=0

    通过以上步骤,可以安全摘除 Kubernetes 集群中的节点并验证结果。

相关推荐
阿里云云原生1 天前
研发视角的新突破:当 AI Coding 工具集成全域运维诊断,排查线上故障只需 3 分钟
云原生
小猿姐2 天前
唯品会大规模数据库云原生实践:基于 KubeBlocks 管理数千实例的统一运维之路
运维·elasticsearch·云原生
阿里云云原生2 天前
AgentTeams 和 Claude Tag 都进入群聊模式,是新范式还是新叙事?
云原生·agent
阿里云云原生3 天前
Higress v2.2.3 发布:正式入驻 CNCF Sandbox,AI Gateway 与 Ingress 迁移能力双向加固
云原生
lichenyang4533 天前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4533 天前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4533 天前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
阿里云云原生4 天前
香港站【企业 AI Agent 工程化实战专场】来啦,邀您7月9日见!
云原生·agent
阿里云云原生4 天前
研发域与运维域的“数字握手”:通过 Agentic Skills 实现 DevOps 全链路自动化
云原生
运维开发故事6 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes