问题
今天公司的k8s集群突然宕机,各节点上的服务不可用,dashboard 打不开,kubelet命令无法执行,提示连接不上apiserver。
排查发现 api-server 宕机并不断重启,etcd也是不断重启。但是没有更具体的错误信息。
于是直接重启了kubelet 服务,但集群还是起不来,排除了各种各样的原因,google百度了半天,但是始终找不到问题,具体的报错信息也只是etcd不断重启,导致matser启动失败,继而整个集群失败。后来无意中看了一篇博文:
Kubernetes 主节点宕机恢复记录
然后发现和我们的现象有相识,主要原因是服务器磁盘空间不足,导致k8s master节点宕机。而我们的磁盘空间确实使用了92%多,但是还有十多G的冗余。最后尝试了清理,然后重启服务器,确实解决了问题。
原因
事后使用"k8s 磁盘空间不足宕机",进行了搜索,发现不少人遇到这样的问题,但是从相关资料来看,说的是节点资源监控导致的问题。
k8s官方的关于”Eviction Policy”的说明。大致意思就是:每个node上的kubelet都负责定期采集资源占用数据,并与预设的threshold值进行比对,如果超过 threshold值,kubelet就会尝试杀掉一些Pod以回收相关资源,对Node进行保护。
但是从官方资料来看,没说明master节点也会有相关策略,考虑到master也是一个节点,也会有kubelet和pod等服务,所以这个原因还是可能的,但最终问题原因无法验证。