概述
文章目录
- 问题背景
- 解决过程
- 基础环境恢复
- 恢复etcd集群
- 恢复docker
- 恢复k8s集群
- 总结
问题背景
由三台master节点组成的k8s集群,由于其中一台master节点启动文件异常,将机器重置了,需要重新部署后恢复到原来的集群中。
解决过程
基础环境恢复
- 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
- 关闭防火墙及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节点加入集群问题背景解决过程总结的全部内容,希望文章能够帮你解决k8s集群重新将master节点加入集群问题背景解决过程总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复