win10强制关机,虚拟机k8s集群崩盘

win10强制关机,虚拟机k8s集群崩盘

Scroll Down

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等一系列的操作

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