You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的启动标识:
    Starting ProtocolHandler ["http-nio-8080"]
    Tomcat started on port(s): 8080 (http) with context path ''
    
    若没有此类日志,说明Spring Boot应用上下文未完全初始化,可临时将日志级别调整为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:16:16