etcd数据失去一致性,导致k8s重复获取pod状态时数据不一致
问题:重复执行 kubectl get pods 执行时获取到的pod节点状态在变化怀疑:etcd中有节点数据不正确验证:1、在目标etcd节点下部署 etcdkeeper 服务(开源的bs架构的etcd数据查看工具)etcdkeeper下载上传只etcd节点,解压后,赋予执行权限,启动程序./etcdkeeper -cacert /etc/kubernetes/pki/etcd/ca.crt -
问题:重复执行 kubectl get pods 执行时获取到的pod节点状态在变化
怀疑:etcd中有节点数据不正确
1、部署 etcd可视化服务查看数据
etcdkeeper下载
上传只etcd节点,解压后,赋予执行权限,启动程序
./etcdkeeper -cacert /etc/kubernetes/pki/etcd/ca.crt -cert /etc/kubernetes/pki/etcd/peer.crt -key /etc/kubernetes/pki/etcd/peer.key -p 8011
登录访问:http://10.10.10.13:8011/etcdkeeper/
2、查看有问题的pod存储在etcd中的数据
可以看到在 10.10.10.13 节点上 etcd中的数据和10.10.10.11 节点上是有差异的。
集群模式,还存在10.10.10.12节点,其数据与10.10.10.11 一致,此处未展示
3、通过容器状态判断哪个节点etcd数据不正确
对应容器启动正常,说明pod也是正常的,所以是10.10.10.13 节点的数据存在问题。
4、处理问题节点的etcd服务恢复数据
通过重启问题节点的数据,让其在重启时去重新同步其他正确节点的数据
停止10.10.10.13 节点的etcd服务
systemctl stop etcd
从集群中删除该节点
etcdctl member list
etcdctl member remove c6eaa306941ff399
再将该节点加入集群
etcdctl member add master3 --peer-urls=“https://10.10.10.13:2380”
修改10.10.10.13 启动文件配置,删除该节点数据(再次启动时从其他节点同步正确的数据过来)
sed -i “s#initial-cluster-state: ‘new’#initial-cluster-state: ‘existing’” /etc/etcd/etcd.config.yml
cd /var/lib/etcd && tar -zcvf 20220106back.tar.gz member/ wal/
rm -rf member/ wal/
再次启动该节点etcd
systemctl start etcd
查看etcd状态
etcdctl member list
5、再次确认节点数据
数据已经恢复正常。
6、问题原因
已有大神进行了详细的分析。
问题详细原因及原理:https://zhuanlan.zhihu.com/p/138424613
更多推荐
所有评论(0)