美文网首页
kubeadm部署的k8s集群etcd数据不一致如何解决

kubeadm部署的k8s集群etcd数据不一致如何解决

作者: wwq2020 | 来源:发表于2023-09-22 10:53 被阅读0次

背景

生产etcd使用的版本(v3.5.1)出现了数据一致性问题

解决方案

永久

升级etcd到v3.5.9,当时最新版

临时

假设etcd集群可用,挑选一个etcd节点作为基准数据

在基准etcd节点上登录查看etcd的容器id

docker ps |grep etcd |grep -v pause

在基准etcd节点上查看member,找到其他member({containerID} 替换为上一步得到的容器id)

docker exec -it {containerID} ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key member list

在基准etcd节点上删除其他member({containerID} 替换为上一步得到的容器id,{memberid}替换为上一步得到的memberid)

docker exec -it {containerID} ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key member remove {memberid}

在目标member上停止etcd static pod

mv /etc/kubernetes/manifest/etcd.yaml /etc/kubernetes/etcd.yaml

在目标member上删除etcd数据(/data/etcd/member替换为实际的etcd data目录)

rm -rf /data/etcd/member

在基准etcd节点上添加目标member({containerID} 替换为上一步得到的容器id,{memberid}替换为上一步得到的memberid,{nodename}替换为实际的membername,nodeip替换为实际的memberip)

docker exec -it {containerID} ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key member add {membername} --peer-urls=htttps://{memberip}:2380
在故障节点上

在目标member上启动etcd static pod

mv /etc/kubernetes/etcd.yaml /etc/kubernetes/manifest/etcd.yaml

注意点

删除和添加member的步骤逐个member执行,否则会导致集群不可用

相关文章

网友评论

      本文标题:kubeadm部署的k8s集群etcd数据不一致如何解决

      本文链接:https://www.haomeiwen.com/subject/jhrtbdtx.html