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

Spring Boot应用K8s部署失败:Actuator端点返回404

问题排查方案

1. 重点分析Tomcat停止的核心日志

应用日志显示Spring启动后Tomcat停止,这是关键线索,必须定位停止的具体原因:

  • 执行命令抓取Pod启动后Tomcat停止阶段的日志:
    kubectl logs <异常Pod名称> --tail=200 | grep -A 20 -B 5 "Stopping service \[Tomcat\]"
    
  • 查看日志中是否存在异常栈、资源耗尽、依赖服务连接失败等信息,这通常是导致Tomcat退出的直接原因。

2. 验证节点镜像一致性与环境差异

部分节点旧版本正常、部分节点新旧版本均失效,优先排查节点层面的镜像与环境差异:

  • 对比异常节点与正常节点上的应用镜像ID,确认是否拉取到了正确的新版本:
    # 在节点上执行(需节点权限)
    docker images | grep <你的镜像名称>
    
  • 检查节点的容器运行时版本(Docker/containerd)、内核版本是否存在差异,部分运行时更新可能导致兼容性问题:
    # 检查Docker版本
    docker version
    # 检查containerd版本
    containerd --version
    # 检查内核版本
    uname -r
    
  • 查看节点的资源使用情况,确认是否因CPU/内存耗尽导致应用启动失败:
    kubectl describe node <异常节点名称>
    

3. 确认Actuator端点配置与探针正确性

虽然已配置健康探针相关参数,仍需验证配置生效与探针路径的正确性:

  • 进入异常Pod内部,直接访问Actuator端点,确认是否真的返回404:
    kubectl exec <异常Pod名称> -- curl -v http://localhost:<应用端口>/actuator/health/liveness
    
    • 如果返回404,检查Pod内的配置文件是否包含完整的端点暴露配置:
      # 需确保已暴露health端点(子端点liveness/readiness依赖此配置)
      management.endpoints.web.exposure.include=health
      # 或暴露所有端点用于排查
      management.endpoints.web.exposure.include=*
      
  • 检查Kubernetes探针配置的路径、端口、scheme是否与应用实际匹配:
    # 示例正确的探针配置
    livenessProbe:
      httpGet:
        path: /actuator/health/liveness
        port: 8080
        scheme: HTTP # 如果应用启用HTTPS,需改为HTTPS
      initialDelaySeconds: 30
      periodSeconds: 10
    readinessProbe:
      httpGet:
        path: /actuator/health/readiness
        port: 8080
        scheme: HTTP
      initialDelaySeconds: 30
      periodSeconds: 10
    

4. 排查镜像构建的底层依赖变化

使用bootBuildImage构建的镜像依赖Spring Boot Buildpacks的基础镜像,若基础镜像更新可能引入兼容性问题:

  • 对比新旧镜像的基础镜像信息,确认是否存在版本变更:
    docker inspect <新版本镜像ID> | grep -A 10 "Config" | grep -A 5 "Labels"
    
  • 检查构建日志,确认Buildpacks是否使用了预期的Java版本、Tomcat版本:
    # 重新构建时查看日志,重点关注buildpack选择部分
    ./mvnw spring-boot:build-image
    

5. 验证Pod配置与资源限制

  • 检查Pod的资源请求与限制是否合理,避免因资源不足导致应用启动后退出:
    resources:
      requests:
        cpu: "500m"
        memory: "1Gi"
      limits:
        cpu: "1"
        memory: "2Gi"
    
  • 确认ConfigMap/Secret挂载是否正常,避免因配置缺失导致Actuator功能失效:
    kubectl describe pod <异常Pod名称> | grep -A 10 "Volumes"
    kubectl exec <异常Pod名称> -- cat /path/to/挂载的配置文件
    

内容的提问来源于stack exchange,提问作者Ricardo Rubik Ruiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:01:44