1、查看节点状态
oc get nodes
可以看到出现了节点不可用
2、查看节点详细的描述信息
oc describe node node_name
可以看到节点的状态未知,而处理节点信息的是kubelet进程,明显的异常就是
Kubelet stopped posting node status
在openshift里面,origin-node进程对k8s的kubelet和kube-proxy进程进行了封装,相当于启动一个进程就能启动k8s里面的两个进程,如果不能确定是什么原因导致的,或者想快速恢复集群,那么可以先重启origin-node
systemctl restart origin-node
但是重启的时候,发现启动失败。具体的原因是origin-node服务是以docker的container提供服务的,然而查看docker服务,发现docker是已经挂了。
下面就是origin-node对应的docker container
可以发现,该服务是以container的方式启动的。
查看具体的日志信息:
日志中可以看出,对应的container不存在。当然不会存在了,因为根本就没有创建成功。
3 分析docker为什么不能启动
查看message日志
从日志当中可以看到,当前docker启动失败是由于docker-storage-setup服务启动失败导致,而这个服务是提供docker 存储的。在以前的版本当中,docker底层存储是devicemapper,高版本已经在使用overlay2.
从日志里面还能看到一个异常就是对应的volume group没找到,在devicemapper存储驱动,默认就是使用的loop-lvm(当然这种方式官方是不推荐的),推荐的方式是使用direct-lvm,也就是自己创建lvm,然后转换成thinpool。但是我们这个生产环境在我来的时候就部署上了,应该是以前的同事没用修改。
如果是通过openshift安装的docker,那么在配置lvm的时候,可以使用/etc/sysconfig/docker-storage-setup文件。具体流程如下:
1、打开这个文件
从中可以看到模板文件,就是标红的地方,把这个文件里面的信息拷贝到当前的打开的这个文件。
2、修改文件
主要修改两处
DEVS: 表示使用哪块磁盘来进行lvm的创建
VG:Volume Group名字了
3、直接执行/etc/sysconfig/docker-storage-setup
注:上述方式需要停止docker,同时备份/var/lib/docker下面的数据
那么为什么会提示找不到对应的vg呢?
通过到其他节点查执行docker info命令, 查看pool name信息,如下:
使用dmesg命令查看一下当前的磁盘,是否有存在异常。
可以发现其中有明显的异常。
4、处理解决
第一种方式就是使用direc-lvm替换原先的loop-lvm。然后在启动参数里面加上对应的--storage-opt=dm.thinpooldev参数。
第二种方式就是让硬件看看磁盘问题