pod异常无法启动的排查过程

背景

一大早收到业务方说自己的服务挂了,一直起不来,然后就开始了排查之路。

现象

pod无法启动,然后查看pod的event也正常,没看到什么异常信息,就卡在create pod.
png1

操作

  1. 查看当前这个pod调度到的机器,发现基础监控异常,怀疑机器初始化有问题。

我们登录到机器上查看docker初始化日志:

1
journalctl -n 100查看最新的100条日志

最终看到机器的磁盘挂载有问题。

  1. 然后临时把pod调度到其他正常的机器上,发现问题还是存在。

只能接着看event日志了,

1
kubectl get events -n my-namespace

最终看到如下信息:
png2

从日志中看到,失败是在FailedPostStartHook这一步,也就是服务的poststart脚本启动有问题。
其实也可以在日志里看到更详细的报错:

1
Redis::connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known

字面上错误是跟redis相关,我们看了配置文件,发现redis其实正常,只不过读取了错误的redis配置文件,最终是在环境变量上发现了突破口,我们是根据环境变量来读取不同环境的配置文件,环境变量丢失了,最终读取到了dev环境的配置文件,导致服务一直无法启动。