我是靠谱客的博主 温婉导师,最近开发中收集的这篇文章主要介绍k8s集群重新将master节点加入集群问题背景解决过程总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

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

问题背景

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

解决过程

基础环境恢复

  1. yum 源配置
    添加网络yum:
mkdir /etc/yum.repos.d

tee /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节点加入集群问题背景解决过程总结的全部内容,希望文章能够帮你解决k8s集群重新将master节点加入集群问题背景解决过程总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部