【Kubernetes】k8s删除master节点后重新加入集群
目录
- 前言
- 一、思路
- 二、实战
- 1.安装etcdctl指令
- 2.重置旧节点的k8s
- 3.旧节点的的 etcd 从 etcd 集群删除
- 4.在 master03 上,创建存放证书目录
- 5.把其他控制节点的证书拷贝到 master01 上
- 6.把 master03 加入到集群
- 7.验证 master03 是否加入到 k8s 集群,检查业务
- 三、总结
前言
各位小伙伴们好鸭,小涛又来了,分享一个近期遇到的Kubernetes运维案例
有3个控制节点(master)和n个工作节点(node),有一个控制节点 master03 出问题并关机,修复不成功,执行 kubectl delete node master03 把 master03 移除
移除之后(过了一周),机器恢复了重新上架,打算还把个机器加到k8s 集群,还是做控制节点,如何做?
小涛陷入了沉思……
一、思路
总的来说,需要操作的步骤如下:
- 把 master03 这个节点的 etcd 从 etcd 集群删除
- 在 master03 上,创建存放证书目录
- 把其他控制节点的证书拷贝到 master03 上
- 把 master03 节点加入到集群
- 验证 master03 是否加入到 k8s 集群
二、实战
口说无凭,下面跟着小涛一块实操吧,亲测有效
1.安装etcdctl指令
如果已安装,这步跳过
etcdctl链接:https://pan.baidu.com/s/1TvXSoVeTDKAJfcN4shnmPw
提取码:etcd
注意:如果是用kubeadm安装的k8s,etcd是跑在pod里面的,所以我们没有etcd、etcdctl指令的,大家可以yum 安装一下,如果是内网环境,可以把这个安装包里的etcd、etcdctl,赋权后cp 到 /use/bin 目录下
#把etcdctl目录解压后,放入k8s-master节点中【每个master节点都执行】
tar -zxvf etcd-v3.4.13-linux-amd64.tar.gz
cd ./etcd-v3.4.13-linux-amd64/
chmod +x etcd etcdctl
cp etcd /usr/bin/
cp etcdctl /usr/bin/

2.重置旧节点的k8s
目的:保证其是一个干净的节点【以免脏数据影响重新加入集群】
ssh master03
kubeadm reset #检查是不是需要重置的旧节点再执行,慎重!!!

3.旧节点的的 etcd 从 etcd 集群删除
切记,任何操作前提前备份,这是一个好的工作习惯
#备份ETCD数据
ETCDCTL_API=3 etcdctl \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--endpoints=127.0.0.1:2379 \
snapshot save ./etcd-snapshot-`date +%Y%m%d%H%M`.db#查看ETCD备份文件是否正常【查看备份文件不用指定证书目录】
ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 \
snapshot status ./etcd-snapshot-`date +%Y%m%d%H%M`.db -w table

#以下是小涛整理一个每天自动备份脚本【大家可自行取用】
# 0 1 * * * /bin/bash /backup/etcd_backup.sh > /dev/null 2>&1cat etcd_backup.sh
#!/bin/bashsource /etc/profile
date;ENDPOINTS="127.0.0.1:2379" #IP换成etcd所在节点IP
SNAPSHOT_DIR="/backup/snapshot" #备份文件存放路径
SNAPSHOT_LOG="/backup/log" #备份产生的日志存放路径ETCDCTL_API=3 /usr/bin/etcdctl \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--endpoints=${ENDPOINTS} \
snapshot save ${SNAPSHOT_DIR}/etcd-snapshot-`date +%Y%m%d%H%M`.db >> ${SNAPSHOT_LOG}/etcd-snapshot-`date +%Y%m%d%H%M`.logETCDCTL_API=3 /usr/bin/etcdctl --endpoints=${ENDPOINTS} \
snapshot status ${SNAPSHOT_DIR}/etcd-snapshot-`date +%Y%m%d%H%M`.db -w table >> ${SNAPSHOT_LOG}/etcd-snapshot-`date +%Y%m%d%H%M`.log# 备份文件保留30天后删除
find ${SNAPSHOT_DIR} -name *.db -mtime +30 -exec rm -f {} \;
find ${SNAPSHOT_LOG} -name *.log -mtime +30 -exec rm -f {} \;
#找到 master03 这个机器的etcd 的id 是cd4a68ab2c608bfb 【具体id以实际为准】
ETCDCTL_API=3 etcdctl member list
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --endpoints=127.0.0.1:2379 member list -w table

#删除 master03 节点的etcd【在ETCD正常的节点执行】
ETCDCTL_API=3 etcdctl member delete id
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --endpoints=127.0.0.1:2379 member remove cd4a68ab2c608bfb

4.在 master03 上,创建存放证书目录
ssh master03
cd /root && mkdir -p /etc/kubernetes/pki/etcd && mkdir -p ~/.kube/

5.把其他控制节点的证书拷贝到 master01 上
export HostName=master03
echo ${HostName}
scp /etc/kubernetes/pki/ca.crt ${HostName}:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/ca.key ${HostName}:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.key ${HostName}:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.pub ${HostName}:/etc/kubernetes/
scp /etc/kubernetes/pki/front-proxy-ca.crt ${HostName}:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.key ${HostName}:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/etcd/ca.crt ${HostName}:/etc/kubernetes/pki/etcd/
scp /etc/kubernetes/pki/etcd/ca.key ${HostName}:/etc/kubernetes/pki/etcd/
6.把 master03 加入到集群
kubeadm token create --print-join-command
显示如下:

#master03节点执行:
#【把刚才获取的token指令粘贴过来,加上"--control-plane --ignore-preflight-errors=SystemVerification"参数】
ssh master03
kubeadm join apiserver.cluster.local:6443 --token hrm6ki.xxxx --discovery-token-ca-cert-hash sha256:449fddxxxxxxxxxxxx \
--control-plane --ignore-preflight-errors=SystemVerification
7.验证 master03 是否加入到 k8s 集群,检查业务
接下来,静观其变,等待加入k8s集群
#查看master03节点是否已正常加入集群,
kubectl get node -o wide
集群节点都是Ready状态后,检查pod状态是否正常,同时检查生产业务是否正常
三、总结
奈斯,Get一个新技能,小伙伴们小本本记得记好了,有帮助大家还请点赞收藏一波😉
下一篇博客再见了,欢迎评论区讨论,我是卑微涛,不断输出,冲冲冲!
相关文章:
【Kubernetes】k8s删除master节点后重新加入集群
目录 前言一、思路二、实战1.安装etcdctl指令2.重置旧节点的k8s3.旧节点的的 etcd 从 etcd 集群删除4.在 master03 上,创建存放证书目录5.把其他控制节点的证书拷贝到 master01 上6.把 master03 加入到集群7.验证 master03 是否加入到 k8s 集群,检查业务…...
HCIP—OSPF虚链路实验
OSPF虚链路—Vlink 作用:专门解决OSPF不规则区域所诞生的技术,是一种虚拟的,逻辑的链路。实现非骨干区域和骨干区域在逻辑上直接连接。注意虚链路条件:只能穿越一个区域,通常对虚链路进行认证功能的配置。虚链路认证也…...
RAxML-NG安装与使用-raxml-ng-v1.2.0(bioinfomatics tools-013)
01 背景 1.1 ML树 ML树,或最大似然树,是一种在进化生物学中用来推断物种之间进化关系的方法。最大似然(Maximum Likelihood, ML)是一种统计框架,用于估计模型参数,使得观察到的数据在该模型参数下的概率最…...
Tomcat内存马
Tomcat内存马 前言 描述Servlet3.0后允许动态注册组件 这一技术的实现有赖于官方对Servlet3.0的升级,Servlet在3.0版本之后能够支持动态注册组件。 而Tomcat直到7.x才支持Servlet3.0,因此通过动态添加恶意组件注入内存马的方式适合Tomcat7.x及以上。…...
pytorch之诗词生成3--utils
先上代码: import numpy as np import settingsdef generate_random_poetry(tokenizer, model, s):"""随机生成一首诗:param tokenizer: 分词器:param model: 用于生成古诗的模型:param s: 用于生成古诗的起始字符串,默认为空串:return: …...
OpenAI的ChatGPT企业版专注于安全性、可扩展性和定制化。
OpenAI的ChatGPT企业版:安全、可扩展性和定制化的重点 OpenAI的ChatGPT在商业世界引起了巨大反响,而最近推出的ChatGPT企业版更是证明了其在企业界的日益重要地位。企业版ChatGPT拥有企业级安全、无限GPT-4访问、更长的上下文窗口以及一系列定制选项等增…...
JS06-class对象
class对象 className 修改样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&quo…...
深度学习1650ti在win10安装pytorch复盘
深度学习1650ti在win10安装pytorch复盘 前言1. 安装anaconda2. 检查更新显卡驱动3. 根据pytorch选择CUDA版本4. 安装CUDA5. 安装cuDNN6. conda安装pytorch结语 前言 建议有条件的,可以在安装过程中,开启梯子。例如cuDNN安装时登录 or 注册,会…...
Node.js与webpack(三)
上一节:Node.js与Webpack笔记(二)-CSDN博客 从0来一遍(webpack项目) 将之前的webpack 的纯开发配置,重新创建空白项目,重新做一遍,捋一遍思路防止加入生产模式时候弄混 1.创建文件夹…...
测试覆盖率那些事
在测试过程中,会出现测试覆盖不全的情况,特别是工期紧张的情况下,测试的时间被项目的周期一压再压,测试覆盖概率不全就会伴随而来。 网上冲浪,了解一下覆盖率的文章,其中一篇感觉写的很不错,将…...
Etcd 介绍与使用(入门篇)
etcd 介绍 etcd 简介 etc (基于 Go 语言实现)在 Linux 系统中是配置文件目录名;etcd 就是配置服务; etcd 诞生于 CoreOS 公司,最初用于解决集群管理系统中 os 升级时的分布式并发控制、配置文件的存储与分发等问题。基…...
Docker 安装 LogStash
关于LogStash Logstash,作为Elastic Stack家族中的核心成员之一,是一个功能强大的开源数据收集引擎。它专长于从各种来源动态地获取、解析、转换和丰富数据,并将这些结构化或非结构化的数据高效地传输到诸如Elasticsearch等存储系统中进行集…...
Selenium笔记
Selenium笔记 Selenium笔记 Selenium笔记element not interactable页面刷新 element not interactable "element not interactable"是Selenium在执行与网页元素交互操作(如点击、输入等)时抛出的一个常见错误。这个错误意味着虽然找到了对应的…...
ChatGPT :确定性AI源自于确定性数据
ChatGPT 幻觉 大模型实际应用落地过程中,会遇到幻觉(Hallucination)问题。对于语言模型而言,当生成的文本语法正确流畅,但不遵循原文(Faithfulness),或不符合事实(Factua…...
linux驱动开发面试题
1.linux中内核空间及用户空间的区别? 记住“22”,两级分段两级权限。 例如是32位的机器,从内存空间看:顶层1G是内核的,底3G是应用的;从权限看:内核是0级特权,应用是3级特权。 2.用…...
【AI】Ubuntu系统深度学习框架的神经网络图绘制
一、Graphviz 在Ubuntu上安装Graphviz,可以使用命令行工具apt进行安装。 安装Graphviz的步骤相对简单。打开终端,输入以下命令更新软件包列表:sudo apt update。之后,使用命令sudo apt install graphviz来安装Graphviz软件包。为…...
AI推介-大语言模型LLMs论文速览(arXiv方向):2024.03.05-2024.03.10—(2)
论文目录~ 1.Debiasing Large Visual Language Models2.Harnessing Multi-Role Capabilities of Large Language Models for Open-Domain Question Answering3.Towards a Psychology of Machines: Large Language Models Predict Human Memory4.Can we obtain significant succ…...
AI解答——DNS、DHCP、SNMP、TFTP、IKE、RIP协议
使用豆包帮助我解答计算机网络通讯问题—— 1、DHCP 服务器是什么? DHCP 服务器可是网络世界中的“慷慨房东”哦🤣 它的全称是 Dynamic Host Configuration Protocol(动态主机配置协议)服务器。 DHCP 服务器的主要任务是为网络中的…...
【TypeScript系列】声明合并
声明合并 介绍 TypeScript中有些独特的概念可以在类型层面上描述JavaScript对象的模型。 这其中尤其独特的一个例子是“声明合并”的概念。 理解了这个概念,将有助于操作现有的JavaScript代码。 同时,也会有助于理解更多高级抽象的概念。 对本文件来讲,“声明合并”是指编…...
zookeeper基础学习之六: zookeeper java客户端curator
简介 Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
