AWS Kubernetes集群中Spring Boot Pod重启失败排查求助
排查步骤
以下是针对该问题的具体排查方向:
1. 确认容器退出核心原因(禁用探针仍重启的关键)
禁用探针后Pod仍重启,说明容器本身主动退出或被系统杀死,先查退出码:
kubectl get pod <异常Pod名称> -o jsonpath='{.status.containerStatuses[0].exitCode}'
- 退出码
137:容器被OOM(内存不足)杀死,检查Pod的resources.limits配置,对比节点剩余内存,或用kubectl top pod <异常Pod名称>查看实际内存占用。 - 退出码
1:应用自身启动失败,需深挖启动日志细节。 - 其他退出码:对应不同系统或应用错误,结合容器日志进一步分析。
2. 对比异常Pod与正常Pod的配置差异
即使全局配置一致,单个Pod可能存在配置同步问题:
- 导出环境变量对比:
kubectl exec <异常Pod名称> -- printenv > bad-pod-env.txt kubectl exec <正常Pod名称> -- printenv > good-pod-env.txt diff bad-pod-env.txt good-pod-env.txt - 检查Secret/ConfigMap挂载:通过
kubectl describe pod <异常Pod名称>查看Volumes和VolumeMounts,确认数据库密码的Secret是否被正确加载。
3. 验证Web容器启动状态
日志显示Hikari连接池正常,但Web容器可能未完成启动:
- 查找应用日志中Web容器启动的关键日志,比如Tomcat的启动标识:
若没有此类日志,说明Spring Boot应用上下文未完全初始化,可临时将日志级别调整为Starting ProtocolHandler ["http-nio-8080"] Tomcat started on port(s): 8080 (http) with context path ''DEBUG,排查是否有Bean初始化失败被隐藏。
4. 检查节点资源与状态
异常Pod所在节点可能存在资源瓶颈或异常:
- 查看节点资源使用:
kubectl top node <异常Pod所在节点名称> - 检查节点状态:
确认节点是否有kubectl describe node <异常Pod所在节点名称>NotReady状态、磁盘已满、kubelet异常等情况。
5. 排查端口绑定与网络问题
- 若容器能短暂运行,进入容器检查8080端口监听状态:
kubectl exec -it <异常Pod名称> -- netstat -tulpn | grep 8080 - 检查节点安全组/iptables规则:确认节点是否允许容器内部8080端口通信,或是否有网络策略阻止端口访问。
6. 校验Spring Boot健康端点配置
虽然配置了management.endpoint.health.probes.enabled=true,仍需确认:
server.port是否被意外覆盖,导致健康端点未在8080端口暴露。- 是否有自定义健康指示器(如
flyway)导致健康端点异常,可临时关闭非必要指示器测试。
内容的提问来源于stack exchange,提问作者Som
相关产品推荐
相关产品推荐

