当前位置: 首页 > news >正文

Kubernetes 节点摘除指南

目录

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

1. 确认节点名称及状态

2. 标记节点为不可调度

3. 排空(Drain)节点

4. 删除节点

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

1. 检查节点列表

2. 检查节点详细信息

3. 验证 Pod 状态

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

1. 停止并重置 kubelet

2. 清理残留文件

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

四、常见问题

1. 节点状态一直为 NotReady

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

http://www.lryc.cn/news/609416.html

相关文章:

  • 模型预估打分对运筹跟踪的影响
  • SaProt 模型部署与运行教程
  • 从0搭建YOLO目标检测系统:实战项目+完整流程+界面开发(附源码)
  • 数据结构学习(day01)
  • 1、docker容器命令 | 生命周期管理
  • 多模态后训练反常识:长思维链SFT和RL的协同困境
  • Spring Batch的2种STEP定义方式
  • 最新Android Studio汉化教程--兼容插件包
  • c++ --- priority_queue的使用以及简单实现
  • 时序论文44 | TwinsFormer:通过两个交互组件重构时间序列内在依赖关系
  • 算法竞赛阶段二-数据结构(39)数据结构栈模拟实现
  • 06.Redis 配置文件说明
  • 第13章 文件输入/输出
  • MySQL半同步复制机制详解:AFTER_SYNC vs AFTER_COMMIT 的优劣与选择
  • 前后端交流
  • Git常用命令详解
  • RSA 解密逻辑
  • 微服务的使用
  • AI生成图片工具分享!
  • 常见框架漏洞靶场攻略
  • 【LeetCode刷题指南】--对称二叉树,另一颗树的子树
  • C++入门自学Day5-- C/C++内存管理(续)
  • C语言数据结构(7)贪吃蛇项目2.贪吃蛇项目实现
  • Linux 文件系统基本管理
  • python 12 install jupyter时zmq.h或libzmq报错处理
  • 基于springboot的在线考试系统/考试信息管理平台
  • 苍穹外卖项目学习——day1(项目概述、环境搭建)
  • 团队独立思考的力量
  • 机器学习——决策树(DecisionTree)
  • 波士顿房价预测工具 - XGBoost实现