文章目录

  • 问题背景
  • 解决过程
    • 基础环境恢复
    • 恢复etcd集群
    • 恢复docker
    • 恢复k8s集群
  • 总结

问题背景

由三台master节点组成的k8s集群,由于其中一台master节点启动文件异常,将机器重置了,需要重新部署后恢复到原来的集群中。

解决过程

基础环境恢复

  1. 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
  1. 关闭防火墙及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集群。

  1. 先在另外一台好的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
  1. 接着用对应id删除要重新加入的etcd节点(我这里是删第二台):
[root@10-216-115-122 ~]# etcd remove member 40fb2280bd496625
  1. 然后在新的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"
  1. 启动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

  1. 安装docker,并配置。这里注意docker版本号与配置,与之前集群需一致。
[root@10-216-115-123 ~]#yum -y install docker-engine
#如果这里报错目标yum源没有依赖软件对应版本号,需要将默认yum都打开后安装
  1. 配置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
  1. 重置异常节点:
[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/
  1. 将新节点重新作为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节点加入集群相关推荐

  1. 故障转移集群无法连接到节点_Redis集群以及自动故障转移测试

    在Redis中,与Sentinel(哨兵)实现的高可用相比,集群(cluster)更多的是强调数据的分片或者是节点的伸缩性,如果在集群的主节点上加入对应的从节点,集群还可以自动故障转移,因此相比Sen ...

  2. yum安装k8s集群(单master两个node、阿里云镜像源)

    yum安装k8s集群(单master节点方式) 一.环境准备 1.系统要求 按量付费阿里云主机三台 要求:centos7.6~7.8:以下为 https://kuboard.cn/install/in ...

  3. k8s1.18多master节点高可用集群安装-超详细中文官方文档

    kubernetes安装系列文章 kubernetes1.17.3安装-超详细的安装步骤 安装kubernetes1.17.3多master节点的高可用集群 k8s1.18单master节点高可用集群 ...

  4. Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数?

    问题一:Redis集群为什么至少需要三个master节点? 因为新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,当其中一个挂了,是达不到选举新ma ...

  5. K8S——单master节点和基于单master节点的双master节点二进制部署(本机实验,防止卡顿,所以多master就不做3台了)

    K8S--单master节点和基于单master节点的双master节点二进制部署 一.准备 二.ETCD集群 1.master节点 2.node节点 三.Flannel网络部署 四.测试容器间互通 ...

  6. kubeadm安装K8S单master双节点集群

    宿主机: master:172.16.40.97 node1:172.16.40.98 node2:172.16.40.99 # 一.k8s初始化环境:(三台宿主机) 关闭防火墙和selinux sy ...

  7. k8s高可用集群多个主节点_k8s-高可用集群实现(keepalived)

    一 环境规划 大致拓扑: 我这里是etcd和master都在同一台机器上面 二 系统初始化 三 安装k8s和docker 四 安装keepalived 在三台master节点上安装 yum -y in ...

  8. 【云原生】K8S master节点更换IP以及master高可用故障模拟测试

    文章目录 一.前言 二.配置 多个master 节点 1)节点信息 1)安装docker或containerd 2)安装kubeadm,kubelet和kubectl 1.配置k8s yum源 2.修 ...

  9. 博文推荐|Apache Doris 单节点 Docker 集群制作教程

    前言 Apache Doris 是当下非常流行的 MPP 架构 OLAP 数据库,很多同学想自学/测试 Doris 的使用和能力,但是又苦于没有环境或者畏惧冗长的编译+搭建过程,整个过程极大的劝退了很 ...

最新文章

  1. 3W字长文带你轻松入门视觉Transformer
  2. [转载]用数据说话 Pytorch详解NLLLoss和CrossEntropyLoss
  3. require.js基本认识
  4. matlab泰勒图,matlab画泰勒图
  5. 红外传感器_基于红外避障传感器控制无人机
  6. Apollo进阶课程㉕丨Apollo规划技术详解——Optimization Inside Motion Planning
  7. string拼接_String拼接操作-的优化
  8. php中提取现在的时间函数,php中时间函数date及常用的时间计算
  9. 使用Regsvr32命令修复系统故障
  10. 《x86汇编语言:从实模式到保护模式》课后答案
  11. 第二届世界智能大会,看大咖眼中的智能时代
  12. Milano Store OpenCart 2.0 主题模板 ABC-0473
  13. Three.js 学习笔记(1)--坐标体系和旋转
  14. GoLand添加一个已有项目的相关配置
  15. 做一个iframe的弹出框
  16. 带你画uml系统用例图
  17. html5标签含义元素周期表
  18. 基于vue3.0的遮罩
  19. AD7606-4输出数据异常
  20. 「订单」业务的设计与实现

热门文章

  1. 计算机桌面没有打字,打字为什么电脑不显示出来怎么办
  2. 入门学习-Python-小甲鱼学习资料-Day031-永久存储:腌制一缸美味的泡菜
  3. 从命令行中进入云主机及相关操作
  4. 2021河南科技大学计算机考研科目,2021河南科技大学考研参考书目
  5. java应用 cpu占用过高问题分析及解决方法
  6. MindSpore联邦学习框架解决行业级难题
  7. 如何开展性能测试工作
  8. 头同尾合十的算法_头同尾合十的计算规律
  9. java实训报告前言_Java学习第一阶段总结
  10. SWING实现类似微信的泡泡聊天界面