背景
一大早收到业务方说自己的服务挂了,一直起不来,然后就开始了排查之路。
现象
pod无法启动,然后查看pod的event也正常,没看到什么异常信息,就卡在create pod.
操作
- 查看当前这个pod调度到的机器,发现基础监控异常,怀疑机器初始化有问题。
我们登录到机器上查看docker初始化日志:
1 | journalctl -n 100查看最新的100条日志 |
最终看到机器的磁盘挂载有问题。
- 然后临时把pod调度到其他正常的机器上,发现问题还是存在。
只能接着看event日志了,
1 | kubectl get events -n my-namespace |
最终看到如下信息:
从日志中看到,失败是在FailedPostStartHook
这一步,也就是服务的poststart
脚本启动有问题。
其实也可以在日志里看到更详细的报错:
1 | Redis::connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known |
字面上错误是跟redis相关,我们看了配置文件,发现redis其实正常,只不过读取了错误的redis配置文件,最终是在环境变量上发现了突破口,我们是根据环境变量来读取不同环境的配置文件,环境变量丢失了,最终读取到了dev环境的配置文件,导致服务一直无法启动。