根据etcd备份文件,重建etcd,恢复k8s
4)为每台机器配置外接etcd的前期配置,安装参考文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/5) 由于etcd为外接集群,所以当我们更换集群时,我们的kubadm-config在初始化时添加的etcd集群的配置无法更新,需要我们手动更新,更新
操作步骤:
1、每天定时从etcd集群中备份数据文件 etcdctl snapshot save snapshotdb
2、利用备份的文件重构etcd集群
3、修改k8s master节点的etcd集群以及认证的证书文件,修改calico的etcd_servers和认证文件
-----------------------------------------------------------------
1、备份:k8s etcd集群定时备份数据,15分钟一次,可以通过k8s的cronjob来实现。并将备份的文件通过到任意其他机器,做灾备。
2、重构:
1)生产环境挑选5台高性能稳定的机器来重构etcd集群
2)在挑选的机器上面跑基础的初始化脚本 bash -x init_master.sh (用于k8s环境基础配置、安装kubelet、kubeadm、kubectl)
3)在每台机器安装etcdctl命令,安装参考如下文档:https://www.huweihuang.com/kubernetes-notes/etcd/etcdctl-v3.html
4)为每台机器配置外接etcd的前期配置,安装参考文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/
5)修改etcd.yaml文件 /etc/kubernetes/manifests/etcd.yaml 中的镜像地址为harbor.test.com/kubernetes_1_18_9
6)拉取基础镜像
docker pull harbor.test.com/kubernetes_1_18_9/pause:3.2
docker tag harbor.test.com/kubernetes_1_18_9/pause:3.2 k8s.gcr.io/pause:3.2
7)按照第四步骤操作完成后,开始利用备份的etcd的数据进行恢复etcd的恢复
ETCDCTL_API=3 etcdctl snapshot restore snapshotdb_2020-10-21-11-20 --name etcd1 --initial-cluster=etcd1=https://192.168.0.1:2380,etcd2=https://192.168.0.2:2380,etcd3=https://192.168.0.3:2380 --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls https://192.168.0.1:2380
ETCDCTL_API=3 etcdctl snapshot restore snapshotdb_2020-10-21-11-20 --name etcd2 --initial-cluster=etcd1=https://192.168.0.1:2380,etcd2=https://192.168.0.2:2380,etcd3=https://192.168.0.3:2380 --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls https://192.168.0.2:2380
ETCDCTL_API=3 etcdctl snapshot restore snapshotdb_2020-10-21-11-20 --name etcd3 --initial-cluster=etcd1=https://192.168.0.1:2380,etcd2=https://192.168.0.2:2380,etcd3=https://192.168.0.3:2380 --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls https://192.168.0.3:2380
8)启动etcd集群
systemctl start kubelet
9)通过查看docker容器日志确认etcd是否正常,通过执行etcd的命令确认etd是否正常
3、恢复k8s
1)将新的etcd集群的认证文件,copy到master节点对应的目录,涉及文件及路径为:
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key
2)修改kube-apiserver的yaml配置文件中--etcd-servers=https://192.168.0.1:2379,https://192.168.0.2:2379,https://192.168.0.3:2379
,文件路径为/etc/kubernetes/manifests/kube-apiserver.yaml,etcd-servers替换以后,kube-apiserver由于为static pod,所以容器会被重新创建,此时,kube-apiserver的docker容器应该启动成功
注意:千万不要在同一目录备份文件,否则修改文件不生效,另外,由于我们是ha的master集群,所以三个节点都要对yaml的新的etcd-servers做修改。
3)由于我们的calico和k8s采用一套集群,所以要修改calico的配置文件中的etcd_endpoints和证书
然后重建calico-kube-controllers 的pod以及所有calico-node的pod
4)观察所有的pod对于一些失败的pod,删除重建即可
5) 由于etcd为外接集群,所以当我们更换集群时,我们的kubadm-config在初始化时添加的etcd集群的配置无法更新,需要我们手动更新,更新的configmaps为kubeadm-config
命令:
kubectl edit cm kubeadm-config -n kube-system -oyaml
-----------------------------------------------------
以上就是etcd灾难恢复的过程,至此k8s恢复完成
-----------------------------------------------------
更多推荐
所有评论(0)