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

相关推荐
张忠琳17 小时前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia
阿里云云原生19 小时前
让 AI Agent 看见正在发生的业务,阿里云 EventHouse 正式商业化
云原生
Elastic 中国社区官方博客19 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
AOwhisky20 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
风曦Kisaki21 小时前
#企业级docker私有仓库构建:harbor仓库与阿里云镜像仓库
阿里云·docker·容器
期待着20131 天前
docker 安装 ,在centos7.9
运维·docker·容器
微三云 - 廖会灵 (私域系统开发)1 天前
电商系统从单体到微服务拆分实践:拆什么、怎么拆、拆完后怎么办
微服务·云原生·架构
骑上单车去旅行1 天前
Docker Compose 命令完全指南:从构建到运维
docker·容器·eureka
前端Baymax1 天前
K8s PodCrashLoopBackOff假阳性排查
云原生·容器·kubernetes
spider_xcxc1 天前
K8s 部署学习笔记
docker·容器·kubernetes·云计算·k8s