Kubernetes 从集群中移除一个节点(Node)
目录
- 1. 移除工作节点(Worker Node)
- 1.1 确定工作节点名称
- 1.2 驱逐工作节点上的Pod
- 1.3 删除工作节点
- 1.4 重置该工作节点
- 2. 移除控制平面节点(Control Plane Node)
- 2.1 确定控制平面节点名称
- 2.2 驱逐控制平面节点上的Pod
- 2.3 更新 etcd 集群
- 2.4 从集群中删除控制平面节点
- 2.5 重置移除的控制平面节点
- 3. 注意事项
Kubernetes
管理的一个重要方面是在必要时从集群中删除节点。无论您是需要用新节点替换旧节点,还是节点变得无响应或出现故障,都必须遵循正确的过程以避免潜在的数据丢失或应用程序中断。
1. 移除工作节点(Worker Node)
移除工作节点较为简单;工作节点(Worker Node
)又称为:子节点,从节点等。
1.1 确定工作节点名称
获取所有节点的名称,并确认要移除的节点(Node)
kubectl get nodes
1.2 驱逐工作节点上的Pod
使用 kubectl drain
命令驱逐节点上的 Pod:
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
参数说明:
--ignore-daemonsets
:忽略 DaemonSet 管理的 Pod, DaemonSet 通常在每个节点上运行一个 Pod 副本,无法被迁移。--delete-emptydir-data
:如果 Pod 使用 emptyDir 卷,此选项允许删除这些卷中的数据。旧版本的 k8s 为--delete-local-data
。
排空(drain)过程:
- 将节点标记为不可调度(
Ready
,SchedulingDisabled
),防止新的 Pod 被调度到该节点。 - 逐个终止节点上的 Pod(除了 DaemonSet 的 Pod)。
- Kubernetes 调度器会在集群的其他节点上重新创建这些 Pod。
【注】如果是临时系统维护或者突然不想移除了
,可以使用下面的命令,恢复节点的调度能力:
kubectl uncordon <node-name>
1.3 删除工作节点
从集群中删除节点。
kubectl delete node <node-name>
1.4 重置该工作节点
在被移除的控制平面节点中操作。
# 重置该节点,
kubeadm reset
kubeadm reset
命令用于将节点恢复到安装 kubeadm 之前的状态。这个命令会清除所有与 Kubernetes 相关的配置和数据。
执行过程如下:
- 停止并移除所有
Kubernetes
相关的容器。 - 移除
/etc/kubernetes/
目录中的所有配置文件。 - 移除
/var/lib/kubelet
/ 目录中的内容。 - 移除
/var/lib/etcd
目录(如果存在)。 - 删除
Kubernetes
相关的系统服务配置(如kubelet.service
)。
常用参数:
--force,-f
: 即使出现错误也继续执行重置操作。
一般来说使用
kubeadm reset
命令可以满足很多场景;但是如果使用了自定义的 CNI
、iptables 规则
以及IPVS 模式的 kube-proxy
,可能还需要手动清理这些配置。
2. 移除控制平面节点(Control Plane Node)
移除控制平面节点(Control Plane Node
)比较复杂,毕竟相当于是大脑;控制平面节点又称为主节点,从节点等。
移除主节点涉及更新控制平面组件配置,步骤如下:
2.1 确定控制平面节点名称
获取所有节点的名称,并确定要删除的控制平面节点名称。
kubectl get nodes
2.2 驱逐控制平面节点上的Pod
与工作节点类似,驱逐主节点上的Pod。
kubectl drain <master-node-name> --ignore-daemonsets --delete-emptydir-data
参数说明:
--ignore-daemonsets
:忽略DaemonSet管理的Pod,简化驱逐过程,确保关键服务 Pod 在节点被驱逐时不会中断--delete-emptydir-data
:如果 Pod 使用 emptyDir 卷,此选项允许删除这些卷中的数据。旧版本的 k8s 为--delete-local-data
。
【注】如果是临时系统维护或者突然不想移除了
,可以使用下面的命令,恢复节点的调度能力:
kubectl uncordon <master-node-name>
2.3 更新 etcd 集群
在其他任意一个控制平面节点中操作,如果是外置的则在相应的机器上操作。
【注】Look here! 如果该节点中包含 etcd,还需要确保更新 etcd 集群配置以移除该节点。如果不包含的话可以跳过此步。
下面的示例为任意控制平面节点中操作:
# 查看 etcd
kubectl get pods -n kube-system | grep etcd# 登录集群的任意一个 ETCD Pod(通常位于其他控制平面节点)
kubectl exec -it etcd-master001 sh -n kube-system# Pod 中设置登录 ETCD 的命令(临时设置别名,退出后失效)
export ETCDCTL_API=3
alias etcdctl='etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key'# 查看集群节点列表
etcdctl member list# 示例:
669bc6472fb13679, started, master1, https://192.168.1.19:2380, https://192.168.1.19:2379, false
959c93e3261aadcb, started, master2, https://192.168.1.20:2380, https://192.168.1.20:2379, false
ca5f1f6f780545ba, started, master3, https://192.168.1.23:2380, https://192.168.1.23:2379, false# 删除master3节点
etcdctl member remove ca5f1f6f780545ba
🥹 如果没有在 etcd 中移除删除节点,可能会造成下面的问题:
- 集群不一致:etcd 集群将继续尝试与已经不存在的成员通信,可能导致性能下降。在做出决策时,etcd 仍会考虑这个不再活跃的成员,可能影响到达成共识的速度。
- 潜在的稳定性问题:如果不移除inactive成员,etcd集群可能无法正确管理其成员关系,导致稳定性问题。
- 扩展性受限:etcd 集群有成员数量限制。保留不活跃的成员会占用这个限额,影响未来添加新成员的能力。
- 错误日志和告警:系统可能会持续生成关于无法连接到已移除节点的错误日志和告警。
- 恢复和灾难恢复复杂化:在需要恢复 etcd 集群时,存在的无效成员可能会使过程变得更加复杂。
- 性能影响:etcd 可能会持续尝试与不存在的成员通信,浪费资源并可能影响整体性能。
【注】虽然短期内不移除 etcd 成员可能不会导致立即的故障,但长期来看,它可能会影响集群的健康、性能和可管理性。
2.4 从集群中删除控制平面节点
在其他控制平面节点中操作。
# 从集群中删除该 node 节点
kubectl delete node master3
2.5 重置移除的控制平面节点
在被移除的控制平面节点中操作。
# 重置该节点,
kubeadm reset
执行过程与移除工作节点一样,详细说明参考 1.4 重置该工作节点
。
3. 注意事项
- 确保高可用性:移除主节点之前,确保集群有足够的高可用性,至少有一个以上的备用主节点;如果是移除工作节点,确保应用支持高可用,防止出现业务中断。
- 检查配置文件:根据安装方式(如 kubeadm、kops、kubespray 等),可能需要额外检查和更新配置文件,以保证节点的移除工作。
- 清理节点:在实际从物理或虚拟机中移除节点之前,清理节点上的Kubernetes配置和数据;如果服务器有快照的话,可以还原快照。
- 保持敬畏之心:如果是线上环境,还是要有一个敬畏之心,保障业务系统的可用性。
相关文章:

Kubernetes 从集群中移除一个节点(Node)
目录 1. 移除工作节点(Worker Node)1.1 确定工作节点名称1.2 驱逐工作节点上的Pod1.3 删除工作节点1.4 重置该工作节点 2. 移除控制平面节点(Control Plane Node)2.1 确定控制平面节点名称2.2 驱逐控制平面节点上的Pod2.3 更新 etcd 集群2.4 从集群中删除控制平面节点2.5 重置移…...

高德地图离线版 使用高德地图api的方法
高德离线包我已经存至Gitee(自行下载即可):高德地图离线解决方案: 高德地图离线解决方案 然因为高德地图的瓦片地图太大,所以要让后端部署下 前端直接调用 如果本地 直接找到瓦片图路径就可以 initMap () {const base_url "…...
springboot 集成私有化Ollama大模型开源框架,搭建AI智能平台
Ollama是一个用于大数据和机器学习的平台,它可以帮助企业进行数据处理、分析和决策制定。 1、在Spring Boot项目pom.xml中添加Ollama客户端库依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-a…...

6.key的层级结构
redis的key允许多个单词形成层级结构,多个单词之间用:隔开,格式如下: 项目名:业务名:类型:id 这个格式并非固定的,可以根据自己的需求来删除或添加词条。 例如: taobao:user:1 taobao:product:1 如果value是一个java对…...

LogonTracer图形化事件分析工具
LogonTracer这款工具是基于Python编写的,并使用Neo4j作为其数据库(Neo4j多用于图形数据库),是一款用于分析Windows安全事件登录日志的可视化工具。它会将登录相关事件中的主机名(或IP地址)和帐户名称关联起…...

【云原生】Prometheus监控Docker指标并接入Grafana
目录 一、前言 二、docker监控概述 2.1 docker常用监控指标 2.2 docker常用监控工具 三、CAdvisor概述 3.1 CAdvisor是什么 3.2 CAdvisor功能特点 3.3 CAdvisor使用场景 四、CAdvisor对接Prometheus与Grafana 4.1 环境准备 4.2 docker部署CAdvisor 4.2.2 docker部署…...

搭建日志系统ELK(二)
搭建日志系统ELK(二) 架构设计 在搭建以ELK为核心的日志系统时,Logstash作为日志采集的核心组件,负责将各个服务的日志数据采集、清洗、过滤。然而缺点也很明显: 占用较多的服务器资源。配置复杂,学习曲线陡峭。处理大数据量时…...

常用排序算法的实现与介绍
常用排序算法的实现与介绍 在计算机科学中,排序算法是非常基础且重要的一类算法。本文将通过C语言代码实现,介绍几种常见的排序算法,包括冒泡排序、选择排序、插入排序和快速排序。以下是这些排序算法的具体实现和简要介绍。 1. 冒泡排序&am…...

仓颉语言 -- 宏
使用新版本 (2024-07-19 16:10发布的) 1、宏的简介 宏可以理解为一种特殊的函数。一般的函数在输入的值上进行计算,然后输出一个新的值,而宏的输入和输出都是程序本身。在输入一段程序(或程序片段,例如表达…...
Nginx代理minIO图片路径实现公网图片访问
1、网络部署情况 VUE前端项目Nginx部署在公司内网,端口7790 后台接口项目部署在公司内网,端口7022 minIO服务部署在公司内网,端口9000 公网IP设备将80端口映射到7790端口(具体映射方式不详),实现通过互…...

从零开始掌握tcpdump:参数详解
Linux tcpdump命令详解 1. 语法 tcpdump [-adeflnnNOpqStvxX] [-c <数据包数目>] [-dd] [-ddd] [-F <表达文件>] [-i <网络界面>] [-r <数据包文件>] [-s <数据包大小>] [-tt] [-T <数据包类型>] [-vv] [-w <数据包文件>] [输出数…...

漏洞挖掘 | edusrc记一次某中学小程序渗透测试
一、搜集渗透目标 现在的EDU挖web端的上分效率远不如小程序,因此这篇文章浅浅记录一次小程序的挖掘吧。如果各位大牛想要快速出洞,不妨跳过大学,学院等小程序,而重点关注小学、中学、幼儿园等,这些小程序的出洞率还是…...

vulhub:nginx解析漏洞CVE-2013-4547
此漏洞为文件名逻辑漏洞,该漏洞在上传图片时,修改其16进制编码可使其绕过策略,导致解析为 php。当Nginx 得到一个用户请求时,首先对 url 进行解析,进行正则匹配,如果匹配到以.php后缀结尾的文件名ÿ…...
备战秋招:2024游戏开发入行与跳槽面试详解
注意:以下为本次分享概要,视频版内容更全面深入,详见文末 1.游戏开发领域秋招准备与面试技巧 本次分享由优梦创客机构的创始人雷蒙德主讲,专注于2024年秋招期间游戏开发领域的入行与跳槽面试准备。本次分享重点在于提供面试技巧…...

红外热成像手持终端:从建筑检测到野外搜救的全方位应用
红外热成像手持终端,凭借其独特的红外探测与夜视功能,广泛应用于多个关键领域。无论是军事侦察、消防救援中的夜间作业,还是电力巡检、野生动物观察等多样场景,其精准的红外热成像技术均能提供至关重要的实时数据,助力…...

day07 项目启动以及git
spring框架 spring 负责整合各种框架,把new对象的部分交给spring去做,对象new不出来,项目就启动不起来,这样可以有效保证所需要的对象都在容器中存在,后续的部分都可以顺利执行控制反转:业务对象创建依赖资…...

学会网络安全:开启广阔职业与责任之旅
在数字化时代,网络安全已成为社会经济发展的重要基石。随着互联网的普及和技术的飞速发展,网络安全威胁日益复杂多变,对国家安全、社会稳定以及个人隐私构成了严峻挑战。因此,掌握网络安全技能不仅意味着拥有了一项高价值的职业技…...
UE5 镜头
只狼镜头 Spring Arm 中 开启 Use Pawn Control Rotation:让镜头跟着鼠标移动BP_Character(Self) 中关闭 Use Controller Rotation Yaw:不要让人物和鼠标移动Character Movement 的 Rotation Setting 中 关闭 Use Controller Desired Rotationÿ…...
SpringBoot如何实现简单的跨域配置
在SpringBoot中实现简单的跨域配置,主要通过全局CORS配置来完成。这通常涉及到实现WebMvcConfigurer接口并覆盖addCorsMappings方法。以下是一个简单的示例,展示了如何在SpringBoot应用中配置CORS策略以允许跨域请求。 首先,需要创建一个配置…...
vue列表进入详情页实现上一篇下一篇功能
概述:需求就是需要可以看列表,然后点击列表的右侧详情看详情,通过详情来实现新增上一份,下一份按钮来实现直接看之后的详情。 网上的解决方法有很多 1.后台获取将全量的id,前台再去直接取下一个id方式。(…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...