侧边栏壁纸
博主头像
枕头下放双臭袜子博主等级

今我何功德,曾不事农桑

  • 累计撰写 162 篇文章
  • 累计创建 30 个标签
  • 累计收到 0 条评论
k8s

win10强制关机,虚拟机k8s集群宕机,etcd集群崩溃

枕头下放双臭袜子
2020-12-24 / 0 评论 / 0 点赞 / 1,046 阅读 / 3,093 字 / 正在检测是否收录...

1、前

因为内存条问题,电脑蓝屏了,并且强制干掉了我的k8s集群,当我重新打开虚拟机的时候,master 节点不能使用kubectl命令,经排查master节点的API-Server、Scheduler、Controller、Kubelet、kube-proxy等组件都重新启动了,但是etcd无法重启,且Kubelet会报错无法找到当前node

Dec 24 09:13:34 k8s-master1 kubelet: E1224 09:13:34.075124    1741 kubelet.go:2267] node "k8s-master1" not found

image.png

2、尝试解决

这种情况的话属于一个特殊个例,一般的生产环境的k8s集群都不会说突然给你搞个强制关机啥的,所以网上的经验贴也还是挺少的。

2.1 首先需要确定自己机器的swap是临时关闭的,还是永久关闭的

# 临时关闭
# swapoff -a
# 永久关闭
# sed -ri 's/.*swap.*/#&/' /etc/fstab

关于为什么要关闭swap

2.2 解决方法

看到了这么一个解决方法

找到自己的etcd的配置文件,我的路径在/opt/etcd/cfg/etcd.conf

image.png

2.2.1第一种解决方案( 并未解决 )

ETCD_INITIAL_CLUSTER_STATE="new" 修改成 ETCD_INITIAL_CLUSTER_STATE="existing",表示加入已有的集群,然后重新启动etcd

2.2.2 第二种解决方案( 解决,引新思考 )

如上配置图,其中有一行ETCD_DATA_DIR="/var/lib/etcd/default.etcd",这个目录是用来存储etcd数据的目录(后知),这种解决方案就是删除所有etcd节点这里的数据,但本着不删库不跑路的思想,我给它备份到了另一个目录下,然后痛快删除了etcd集群所有节点这里的数据,

image.png

image.png

然后etcd算是重启成功了,

# 检查etcd集群健康状况也都是healthy
# ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.52.10:2379,https://192.168.52.20:2379,https://192.168.52.21:2379" endpoint health

image.png

但是问题是,现在重新创建Pod资源直接Pending,我感觉不对劲,于是又get pod -n kube-system发现系统的Pod也一个都没有了!

怪不得我觉得不对劲,数据可以随便删嘛?这etcd存放的是不是Kubernetes所有集群数据?然后我咨询了大佬

image.png

image.png

果不其然,这个数据果然是存储etcd数据的目录,我这一下算是把啥都删完了

前面当我看到etcd都健康,我就随手把cp的数据给删了……

没办法,我就重新一步一步的,重新安装了flennel、重新授权apiserver访问kubelet、重新部署了coreDNS等,还好证书什么都是在的,不用重新弄了,node节点重新加入集群。完成这些,重新部署自己写的Pod算是正常了,但我这也相当于一个新的k8s集群了,所以涉及到数据,一定要谨慎一些,虽然生产环境数据会有备份,会做持久化,但还是要避免这些操作!

3、总结

将etcd配置文件中的ETCD_INITIAL_CLUSTER_STATE="new"改为ETCD_INITIAL_CLUSTER_STATE="existing"的解决方法并没有生效,后期我电脑又蓝屏了,又发生了一遍事故,我测试了一下,将etcd路径下的数据备份出去再拷回来重新启动ETCD集群的方法也并没有生效。我当下并没有找到很好的解决办法,所以,

目前我的解决办法就是:

删除了etcd集群的所有数据,然后分别启动etcd节点,其实相当于重新建立了一个etcd集群,之前的etcd的数据都没有了。就需要重新安装flannel、重新授权apiserver访问kubelet等一系列的操作

后期如果我找到了更好的解决方法(肯定不能让数据丢失嘛,是吧),会来更新的~

参考:

1、http://code2life.top/2018/04/12/0023-etcd-thinking/

2、https://www.infoq.cn/article/bjmr2l1gmuvjr5riva7v

3、https://blog.csdn.net/weixin_43905458/article/details/105593877

0

评论