目前我们在推动租户上云的过程中,kubernetes集群的规模越来越大,对于整个集群的稳定性来说,肯定是不言而喻的,我这边维护上云租户使用的kubernetes集群基本上都是采用的虚拟机,各个项目规模达到一定规模,就会首当其冲出现etcd的性能问题,针对这个问题我们对etcd采取了迁移到好的裸金属主机上或者在虚拟机上挂上块存储,以下介绍我们在生产环境上执行etcd的三种迁移方式。

情景一、三台etcd集群所在目录的磁盘性能达不到,分别在三台etcd的虚拟机上单独挂载块存储提供给etcd使用,数据迁移操作如下
1、停掉三台主机上的master/etcd
systemctl stop etcd
systemctl stop kube-apiserver
systemctl stop kube-controller-manage
systemctl stop kube-scheduler
1.1、创建新的etcd数据目录,更改etcd.service和etcd.config的配置文件(只更改etcd的工作目录就行)
我原来的etcd数据目录在/apps目录下,现在需要将etcd的数据迁移到/etcd这个数据盘上,创建etcd的数据目录:
mkdir -p /etcd/etcd_data/etcd
更改etcd的etcd.config配置如下:
在这里插入图片描述更改etcd的etcd.service文件如下:
在这里插入图片描述

2、迁移etcd的数据
rsync -av /apps/etcd_data/etcd /etcd/etcd_data/etcd

3、迁移完重启etcd和master,并查看etcd集群状态和数据
systemctl restart etcd
systemctl restart kube-apiserver
systemctl restart kube-controller-manage
systemctl restart kube-scheduler
检查etcd集群状态和数据:
在这里插入图片描述在这里插入图片描述
情景二、把一个项目上的etcd集群迁移到其它三台裸金属主机上,这种将新三台etcd加入到原有etcd集群的数据同步方式,基本不影响租户使用k8s集群
1、在三台裸金属主机上先部署好etcd,部署过程在这里就忽略了
1.1、先启动安装好的一台etcd,单独起来,然后查看etcd的member的ID
在这里插入图片描述1.2、到原有的三台etcd集群上,将第二部步中起来的etcd添加到集群(添加节点需要用到etcd的member ID 和peer-urls地址)
在这里插入图片描述我是把命令放在脚本中执行的,脚本内容如下:
在这里插入图片描述1.3、查看添加的节点是否加入进来,数据是否同步
这个节点其实现在加入集群中状态是不正常的,需要更改etcd.config配置文件,将原来三台的etcd的ETCD_INITIAL_CLUSTER地址添加进来,将ETCD_INITIAL_CLUSTER_STATE的new改为existing,如图:
在这里插入图片描述
然后删除etcd数据目录下的数据:
rm -rf /apps/etcd_data/etcd/*
重启etcd,查看加入集群情况,并查看数据同步情况:
在这里插入图片描述
发现节点已经加入集群,数据也同步完成,其它两个节点也按照1.1,1.2,1.3步骤去操作加入原来三台etcd集群即可

1.4、裸金属上部署的三台etcd加入到原来的etcd集群中后,在将原来的三台etcd踢出集群
踢出集群操作如下(我用的是脚本):
etcd --endpoints=http://ip:port member remove 在这里插入图片描述
然后在将etcd.config配置文件中的ETCD_INITIAL_CLUSTER_STATE的existing改为new,重启etcd,查看集群数据和状态: 在这里插入图片描述
情景三、直接拿着etcd的快照,进行etcd集群的恢复
etcd可以自身生成快照,拿着这些快照就可以恢复etcd的数据

1.1、到原有的etcd的数据目录下,拿取快照,etcd的快照都是以db的方式,传到另外三台etcd主机上
1.2、 先将新的三台etcd组成集群,启动起来
1.3、 用原来三台etcd的快照进行数据恢复到新的三台etcd集群中
用etcd快照恢复,在新的三台etcd主机上都执行,命令如下:
etcdctl --endpoints=http://127.0.0.1:2379,http://127.0.0.2:2379,http://127.0.0.3:2379 --data-dir=/apps/etcd_data/etcd snapshot restore db

Logo

开源、云原生的融合云平台

更多推荐