k8s集群重新将master节点加入集群
文章目录
- 问题背景
- 解决过程
- 基础环境恢复
- 恢复etcd集群
- 恢复docker
- 恢复k8s集群
- 总结
问题背景
由三台master节点组成的k8s集群,由于其中一台master节点启动文件异常,将机器重置了,需要重新部署后恢复到原来的集群中。
解决过程
基础环境恢复
- yum 源配置
添加网络yum:
mkdir /etc/yum.repos.dtee /etc/yum.repos.d/local.repo <<-'EOF'[local]
name=local
baseurl=http://foreman.lilinlin.science:8080
gpgcheck=0
enable=1
EOF
- 关闭防火墙及swap
systemctl stop firewalld && systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久
setenforce 0 #临时
swapoff -a #临时
sed -i 's/.*swap.*/#&/' /etc/fstab #永久
基础环境需要根据项目需求进行调整,后面再不赘述
恢复etcd集群
etcd集群中存储k8s集群中的配置及节点信息,同样为三节点,由于目前有一台节点挂掉(非master),需要将重新将原来的etcd 节点从集群中踢出后,重新配置后加入到etcd集群。
- 先在另外一台好的master节点查看etcd成员信息
[root@10-216-115-122 ~]# etcdctl member list
170abdccbde1778c: name=etcd61 peerURLs=http://10.216.118.61:2380 clientURLs=http://10.216.118.61:2379 isLeader=true
40fb2280bd496625: name=etcd63 peerURLs=http://10.216.118.63:2380 clientURLs=http://10.216.118.63:2379 isLeader=false
8bdd7d808ea8ca3f: name=etcd62 peerURLs=http://10.216.118.62:2380 clientURLs=http://10.216.118.62:2379 isLeader=false
- 接着用对应id删除要重新加入的etcd节点(我这里是删第二台):
[root@10-216-115-122 ~]# etcd remove member 40fb2280bd496625
- 然后在新的master节点上安装etcd并修改配置文件
将ETCD_INITIAL_CLUSTER_STATE=“new” 中的"new"改为"existing"(为保证配置一致性,可以直接从好的节点scp复制一份过来进行改动),下面以复制过来改动好的配置文件说明:
[root@10-216-115-123 ~]# yum -y install etcd
[root@10-216-115-123 ~]# vim /etc/etcd/etcd.conf
#[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #etcd数据目录,用原来默认即可,不用改
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://10.216.118.62:2380" #改为本节点的ip,端口用原来的即可
ETCD_LISTEN_CLIENT_URLS="http://10.216.118.62:2379,http://127.0.0.1:2379" #改为本机ip
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="etcd62" #改为后面成员列表里面配置的节点名称
#ETCD_SNAPSHOT_COUNT="100000"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.216.118.62:2380" #改为本节点的ip,端口不用动
ETCD_ADVERTISE_CLIENT_URLS="http://10.216.118.62:2379" #改为本节点ip
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
ETCD_INITIAL_CLUSTER="etcd61=http://10.216.118.61:2380,etcd62=http://10.216.118.62:2380,etcd63=http://10.216.118.63:2380" #集群成员列表,注意名称与上面对应,这里不需要改动
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="existing" #这里将原来注释打开,改为existing
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"
- 启动etcd 并验证
[root@10-216-115-123 ~]# systemctl start etcd
[root@10-216-115-123 ~]# etcdctl member list
170abdccbde1778c: name=etcd61 peerURLs=http://10.216.118.61:2380 clientURLs=http://10.216.118.61:2379 isLeader=true
40fb2280bd496625: name=etcd63 peerURLs=http://10.216.118.63:2380 clientURLs=http://10.216.118.63:2379 isLeader=false
8bdd7d808ea8ca3f: name=etcd62 peerURLs=http://10.216.118.62:2380 clientURLs=http://10.216.118.62:2379 isLeader=false
恢复docker
- 安装docker,并配置。这里注意docker版本号与配置,与之前集群需一致。
[root@10-216-115-123 ~]#yum -y install docker-engine
#如果这里报错目标yum源没有依赖软件对应版本号,需要将默认yum都打开后安装
- 配置daemon.json配置文件,要与之前配置一致,建议直接scp拷贝过来即可。这里由于每个集群环境配置可能不同,再不赘述。配置完记得开启服务并设为开机自启动。
恢复k8s集群
由于etcd里面存储还有存储之前异常节点的信息,不可以直接加入集群,需要先将异常节点从集群中删除之后再重新加入集群,具体步骤如下:
9. 登录正常master,先将异常节点上的pod驱逐到别的节点上。
[root@10-216-115-122 ~]# kubectl get nodes #先查看集群各节点状态
NAME STATUS ROLES AGE VERSION
10-216-115-119 Ready <none> 3d2h v1.14.10
10-216-115-120 Ready <none> 3d2h v1.14.10
10-216-115-121 Ready <none> 3d2h v1.14.10
10-216-115-122 Ready master 6d20h v1.14.10
10-216-115-123 NotReady master 6h20m v1.14.10 #将要删除的异常节点
10-216-115-124 Ready master 6d20h v1.14.10[root@10-216-115-122 ~]#kubectl drain 10-216-115-123 --delete-local-data --force --ignore-daemonsets #驱逐异常节点的pod,
.......
注意:为了避免daemonset管理的pod又自动拉起会陷入循环,这里用上述参数忽略。这时候会造成终端阻塞,显示一直在驱逐某个pod,这时需要登录另外一台master节点, 强制删除异常pod,这里另外一端驱逐的任务就会执行完毕。
[root@10-216-115-124 ~]#kubectl delete pod coredns-7b7df549dd-fw4sh -n kube-system --grace-period=0 --force
10.将异常节点从集群中删除
[root@10-216-115-122 ~]#kubectl delete node 10-216-115-123
- 重置异常节点:
[root@10-216-115-123 ~]#yum install kubectl-1.14.10 kubelet-1.14.10 kubeadm-1.14.10 -y
#在异常节点重新安装k8s相关软件,注意版本。
[root@10-216-115-123 ~]# kubeadm reset
输入 y
12.为新节点添加证书文件
[root@10-216-115-122 ~]# ll /etc/kubernetes/pki/ 先将以下k8s认证文件scp 拷贝只新节点上(注意甄别,不是全部)
-rw-r--r--. 1 root root 1025 Apr 19 15:02 ca.crt
-rw-------. 1 root root 1675 Apr 19 15:02 ca.key
-rw-r--r--. 1 root root 1038 Apr 19 15:02 front-proxy-ca.crt
-rw-------. 1 root root 1675 Apr 19 15:02 front-proxy-ca.key
-rw-------. 1 root root 1675 Apr 19 15:02 sa.key
-rw-------. 1 root root 451 Apr 19 15:02 sa.pub
[root@10-216-115-122 pki]# scp ca.* front-proxy-ca* sa.* root@10-216-115-123:/etc/kuberneters/pki/
- 将新节点重新作为master加入集群
[root@10-216-115-122 ~]# kubeadm token create --print-join-command #在原来masters上执行生成添加节点的token命令
[root@10-216-115-123 ~]# kubeadm join 125.62.8.88:6443 --token 6bc8v8.8wcix6ef245svuqq --discovery-token-ca-cert-hash sha256:04f8e2e78b16c6943ce733ff0cd05b15f880531c934ab849169b85676c33d96c --experimental-control-plane #根据得到token结合后面参数将master节点重新添加至集群显示成功后, 根据提示执行以下命令mkdir -p $HOME/.kube #该目录保存集群的连接配置,kubectl 与apiserver交互缓存,以及config认证文件sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config #集群管理员的配置文件sudo chown $(id -u):$(id -g) $HOME/.kube/config [root@10-216-115-123 ~]# kubectl get nodes #添加成功后验证是否为ready
NAME STATUS ROLES AGE VERSION
10-216-115-119 Ready <none> 3d2h v1.14.10
10-216-115-120 Ready <none> 3d2h v1.14.10
10-216-115-121 Ready <none> 3d2h v1.14.10
10-216-115-122 Ready master 7d3h v1.14.10
10-216-115-123 Ready master 15m v1.14.10
10-216-115-124 Ready master 7d2h v1.14.10
总结
该过程为现场实际操作及恢复过程,由于每套集群环境不同,包括yum源配置,以及docker配置,机器内核配置等,均有所不通,这里仅供参考整个问题解决流程及思路,如有疑问欢迎评论区留言交流。原创不易,如果对您有帮助,请给我一个大大的赞,谢谢。
k8s集群重新将master节点加入集群相关推荐
- 故障转移集群无法连接到节点_Redis集群以及自动故障转移测试
在Redis中,与Sentinel(哨兵)实现的高可用相比,集群(cluster)更多的是强调数据的分片或者是节点的伸缩性,如果在集群的主节点上加入对应的从节点,集群还可以自动故障转移,因此相比Sen ...
- yum安装k8s集群(单master两个node、阿里云镜像源)
yum安装k8s集群(单master节点方式) 一.环境准备 1.系统要求 按量付费阿里云主机三台 要求:centos7.6~7.8:以下为 https://kuboard.cn/install/in ...
- k8s1.18多master节点高可用集群安装-超详细中文官方文档
kubernetes安装系列文章 kubernetes1.17.3安装-超详细的安装步骤 安装kubernetes1.17.3多master节点的高可用集群 k8s1.18单master节点高可用集群 ...
- Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数?
问题一:Redis集群为什么至少需要三个master节点? 因为新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,当其中一个挂了,是达不到选举新ma ...
- K8S——单master节点和基于单master节点的双master节点二进制部署(本机实验,防止卡顿,所以多master就不做3台了)
K8S--单master节点和基于单master节点的双master节点二进制部署 一.准备 二.ETCD集群 1.master节点 2.node节点 三.Flannel网络部署 四.测试容器间互通 ...
- kubeadm安装K8S单master双节点集群
宿主机: master:172.16.40.97 node1:172.16.40.98 node2:172.16.40.99 # 一.k8s初始化环境:(三台宿主机) 关闭防火墙和selinux sy ...
- k8s高可用集群多个主节点_k8s-高可用集群实现(keepalived)
一 环境规划 大致拓扑: 我这里是etcd和master都在同一台机器上面 二 系统初始化 三 安装k8s和docker 四 安装keepalived 在三台master节点上安装 yum -y in ...
- 【云原生】K8S master节点更换IP以及master高可用故障模拟测试
文章目录 一.前言 二.配置 多个master 节点 1)节点信息 1)安装docker或containerd 2)安装kubeadm,kubelet和kubectl 1.配置k8s yum源 2.修 ...
- 博文推荐|Apache Doris 单节点 Docker 集群制作教程
前言 Apache Doris 是当下非常流行的 MPP 架构 OLAP 数据库,很多同学想自学/测试 Doris 的使用和能力,但是又苦于没有环境或者畏惧冗长的编译+搭建过程,整个过程极大的劝退了很 ...
最新文章
- 3W字长文带你轻松入门视觉Transformer
- [转载]用数据说话 Pytorch详解NLLLoss和CrossEntropyLoss
- require.js基本认识
- matlab泰勒图,matlab画泰勒图
- 红外传感器_基于红外避障传感器控制无人机
- Apollo进阶课程㉕丨Apollo规划技术详解——Optimization Inside Motion Planning
- string拼接_String拼接操作-的优化
- php中提取现在的时间函数,php中时间函数date及常用的时间计算
- 使用Regsvr32命令修复系统故障
- 《x86汇编语言:从实模式到保护模式》课后答案
- 第二届世界智能大会,看大咖眼中的智能时代
- Milano Store OpenCart 2.0 主题模板 ABC-0473
- Three.js 学习笔记(1)--坐标体系和旋转
- GoLand添加一个已有项目的相关配置
- 做一个iframe的弹出框
- 带你画uml系统用例图
- html5标签含义元素周期表
- 基于vue3.0的遮罩
- AD7606-4输出数据异常
- 「订单」业务的设计与实现