一、背景
由3master+1worker组成的测试环境,之前一直未加电,由于适配服务需求,启用该测试环境,登录节点后发现:一个管理节点下线,由于多master,导致集群能正常使用,在适配完服务后,进行排故。
二、故障现象
首先ping故障节点,发现能ping通且能正常登录,在登录故障节点后发现服务器状态正常,那就是组件层面导致的节点下线。
$ kubectl get node The connection to the server localhost:8080 was refused - did you specify the right host or port? #说明kubelet无法访问api-server接口,导致获取节点信息失败; $ systemctl status docker | grep Active #docker状态也正常,处于runnning状态 $ docker ps -a #执行该命令发现未启动静态pod---这也是为什么kubectl命令执行失败原因 |
三、排故
#k8s集群内部组件中kubelet负责拉起静态pod,查看kubelet状态 $ systemctl status kubelet #发现服务在不断重启(EXITED bad code) $ journalctl -fu kubelet #查看日志,发现在访问api-server接口的时候访问失败,报错如下: k8s.io/Kubernetes/pkg/kubelet/kubelet.go:536: Filed to list *v1.Node: Get “https://********:****/api/v1/nodes?filedSelector=metadata.name%2...:dial tcp *******:****:connect :connection refused ” |
静态pod创建如下图所示:
图一:静态pod创建流程
四、解决方法
#检查kubelet的配置文件及启动参数----------正常 #基于kubelet的启动原理,是不是systemd原因导致的kubelet不断重启,于是检查systemd的rpm包版本,果不其然,版本与其他节点的版本不匹配,经查官网,确实有此bug,经过升级systemd版本后,重启,集群恢复正常,节点正常上线。 |
五、参考文献
Kubernetes官网:https://kubernetes.io/