Loading

k8s集群ETCD数据不一致处理

一:前言

公司k8s集群规模为3master+7node,3master前面使用haproxy做负载均衡,使用自定义域名解析,公司内部路由器上做DNS解析。

前段时间无意中发现同时间多次get pod资源时,返回的结果不一致,通过查询发现ETCD节点数据不一致,现进行修复

主机名 IP
master1 192.168.0.211
master2 192.168.0.212
master3 192.168.0.213

二:修复

1:查询集群状态

ETCD状态查询得知3台master的ETCD数据均不一致,这里保险起见,以数据最多的节点(master1)作为数据恢复节点。

image-20240508190057884

2:确定需要恢复数据的节点,切换leader

上图可见现在的leader为master3,我们需要将leader切换到master1

image-20240508191222303

3:数据备份

备份leader节点数据

image-20240508192704904

保险起见,将数据物理目录也备份

image-20240508193136284

将另外两个异常节点的ETCD数据按照以上方式备份。

4:停止etcd服务,删除旧数据

停止master2节点上的etcd服务,由于我们的集群是通过kubeadm部署的,所以ectd是以static pod方式运行,只需要将/etc/kubernetes/manifests/etcd.yaml文件删除或者移至其他目录即可。

image-20240508194748865

etcd集群删除master2节点

image-20240508194849457

image-20240508194905654

image-20240508194917460

删除master2节点上etcd数据

image-20240508195005164

5:恢复etcd服务,自动同步leader节点数据

修改etcd.yaml文件, 修改参数,并添加参数: - --initial-cluster-state=existing

原参数:

image-20240508195640602

修改后的参数:

image-20240508195502164

把master2节点再次加入etcd集群,需要先添加至etcd集群再启动ectd服务,不然会报错。

image-20240508200207177

再次查看leafer是否为master1,如果自动选举至其他节点,需再次手动切换为master1

image-20240508200418041

master2启动ectd服务,将修改后的etcd.yaml移动至/etc/kubernetes/manifests/即可。

等待一段时间后,查看集群状态,发现master2数据已经和leader master1一致。

image-20240508201040051

按照上述步骤将master3节点ECTD数据同步。

posted @ 2024-05-10 21:46  鲜小橙  阅读(91)  评论(0编辑  收藏  举报