操作步骤:

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恢复完成

-----------------------------------------------------

Logo

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

更多推荐