说明:

该方法是通过kubeadm rest 方法进行恢复,比较适合自己搭建测试环境后,恢复测试使用,跟进自己的情况参看使用。
查询了部分参看文章,因为我部署时,使用的是

kubeadm init \
--apiserver-advertise-address=10.0.2.40 \
--image-repository registry.aliyuncs.com/google_containers 

进行部署的,不是通过kubeadm-config.yaml配置文件进行部署,本篇文章应该不算如何恢复环境,只能够是重新初始化k8s环境。

1. 理解说明:

1). 当集群ip发生变化后,k8s的master和node节点的通信就会有异常,因为之前的配置文件中,存储的ip地址都是旧的ip地址,所以当ip发生变化后,集群的master和node是无法感知到,所以就需要重新初始化环境,告知master和node节点。

2). 因为之前部署k8s环境,相关的yum源和工具,镜像源其实都已经下载安装完毕了,当集群ip被修改后,需要做的就是重新初始化环境,让master和node节点感知到ip变化了,需要重新进行通信协商。

2. 具体的操作说明:

1) 修改/etc/hosts的主机名称和IP的对应关系,好像初始化后,启动的etcd会和主机名对应上,具体细节暂未了解,但是需要修改。

2)删除# rm -rf $HOME/.kube(暂时不知道啥影响,推测是因为node和master协商通信会用到)

3)修改/etc/kubernetes/文件夹里的*.conf文件,把这些文件中有旧IP的地方全都替换成你的新IP(好像进行kubeadm reset的时候会清除掉,不修改也无所谓,但是我操作了)

4) 备份旧证书(好像没用,kubeadm reset好像会清除,kubeadm init初始化时,好像也会生成新的)

mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/apiserver.key.old 
mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.old 
mv /etc/kubernetes/pki/apiserver-kubelet-client.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt.old 
mv /etc/kubernetes/pki/apiserver-kubelet-client.key /etc/kubernetes/pki/apiserver-kubelet-client.key.old 
mv /etc/kubernetes/pki/front-proxy-client.crt /etc/kubernetes/pki/front-proxy-client.crt.old 
mv /etc/kubernetes/pki/front-proxy-client.key /etc/kubernetes/pki/front-proxy-client.key.old

5)在master,node节点执行kubeadm reset,清除环境。

  • 运行这条命令将会还原当前节点上 kubeadm init 或者 kubeadm join 所做的所有更改。且如果使用外部 etcd,kubeadm reset 将不会删除任何 etcd 数据。这意味着如果再次使用相同的 etcd 节点运行 kubeadm init,你将看到以前的集群状态
  • 推测正常的修改IP的集群环境,不需要执行这个一步kubeadm reset,应该kubeadm init就可以,kubeadm reset有啥影响,暂时不确定,所以这一步,参看执行。

6)在master节点,执行kubeadm init命令,命令如下(节点保存kubeadm join 内容,后续node节点注册需要):

kubeadm init \
--apiserver-advertise-address=10.0.2.40 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.100.0.0/16 \
--pod-network-cidr=10.244.0.0/16
  • 执行kubeadm init 需要指定一下cluster Ip 网段和pod的IP网段,不然后续安装flannel时,master和node之前的网络通信可能会有异常,指定网段时,选择适合自己的网段,避免出现ip地址冲突。

7)执行完毕init后,执行一下(不确定有啥用):

mkdir -p $HOME/.kube 
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
chown $(id -u):$(id -g) $HOME/.kube/config

8)安装Pod网络插件(CNI)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

9)检查部署情况,所有pod都处于running状态:

 kubectl get pods -n kube-system

10) 在node节点上执行 kubeadm join(这个是在执行kubeadm init时生成的。)

kubeadm join 10.0.20.40:6443 --token ks0l71.ia2neg4uw00xxd3p \
   --discovery-token-ca-cert-hash sha256:56958d442a88b1c3c04fc37078bf264f243f752f8ec83a8eb387d5c825fb5104 

11)检查部署成功情况,我,所有的node节点和master节点都处于ready状态

[root@master kubernetes]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
242 Ready 74m v1.14.2
243 Ready 74m v1.14.2
master Ready master 83m v1.14.2

总结:

  • 安装上面的步骤把k8s的环境恢复,可以正常的通过yaml文件进行启动相关的容器业务,该方法只是进行参看,欢迎交流讨论。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐