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 集群中的节点并验证结果。

相关推荐
Wpa.wk7 小时前
容器编排 - 了解K8s(pod, deployment,service,lable等概念)
经验分享·测试工具·docker·云原生·容器·kubernetes
江畔何人初7 小时前
kubernet与docker的关系
linux·运维·云原生
xuefuhe8 小时前
Kubernetes基础入门4 应用的扩展与收缩
云原生·容器·kubernetes
Wpa.wk9 小时前
容器编排 - K8s - 配置文件参数说明和基础命令
经验分享·测试工具·docker·云原生·容器·kubernetes
掘根13 小时前
【即时通讯系统】项目框架与微服务拆分设计
微服务·云原生·架构
杭州杭州杭州13 小时前
Docker
运维·docker·容器
一体化运维管理平台13 小时前
容器监控难题破解:美信监控易全面支持K8s、Docker
云原生·容器·kubernetes
江畔何人初14 小时前
service发现
linux·运维·云原生
造夢先森14 小时前
Clawdbot(OpenClaw)安装部署教程
人工智能·微服务·云原生
qiubinwei15 小时前
kubeadm部署K8S集群(踩坑实录)
云原生·容器·kubernetes