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

Spring Boot应用Kubernetes就绪探针返回503,本地及镜像运行正常

问题分析与解决方案

核心问题定位

本地及Docker镜像测试时存活/就绪探针均正常,但部署到Kubernetes后就绪探针返回503,存活探针正常。结合配置和日志来看,就绪探针包含了所有健康检查组件(management.endpoint.health.group.readiness.include=*),而Kubernetes环境中存在某个健康指示器检查失败,导致整体就绪状态为未可用。

本地/Docker环境无K8s特有的依赖(如内部配置中心、集群化数据库、消息队列等),所以所有健康组件都能通过检查;而K8s环境中这些依赖可能未就绪,或Spring Boot升级后健康检查逻辑变化导致某些组件默认加入检查但未配置正确。

排查与解决步骤

1. 查看就绪探针详细失败原因

由于配置了management.endpoint.health.group.readiness.show-details=always,可以直接在Pod内执行命令查看具体哪个组件失败:

kubectl exec <你的Pod名称> -- curl http://localhost:8090/actuator/health/readiness

返回的JSON会列出所有健康组件的状态,找到status: DOWN的组件,这就是导致503的根源。

2. 调整就绪探针的健康组配置

根据排查出的失败组件,选择以下处理方式:

  • 排除非必需组件:如果该组件不是应用就绪的必要条件(比如可选的监控组件、非核心的第三方服务),可以从就绪健康组中排除它:
    management.endpoint.health.group.readiness.include=*,-<失败组件的指示器名称>
    
    例如,如果是数据库组件失败,可配置为management.endpoint.health.group.readiness.include=*,-db(具体名称需根据返回的JSON确定)。
  • 配置组件健康检查参数:如果该组件是必需的,调整其健康检查的超时、重试等参数,确保K8s环境中能正常通过检查。比如数据库连接的健康检查:
    spring.datasource.hikari.health-check-properties.connect-timeout=5000
    

3. 适配Spring Boot 2.7.x的健康检查变化

从2.1.8.RELEASE升级到2.7.2,Actuator健康检查有不少默认行为变化:

  • 部分组件的健康指示器从默认关闭变为默认开启(如Redis、MongoDB等),如果K8s环境中这些组件未正确配置,会导致检查失败。
  • 健康组的默认逻辑调整,include=*会包含所有自动配置的健康指示器,需确认是否有新增的指示器未适配。

4. 优化Kubernetes探针配置

如果依赖组件启动较慢,可适当延长初始延迟或调整失败阈值:

readinessProbe:
  failureThreshold: 5
  httpGet:
    path: /actuator/health/readiness
    port: 8090
    scheme: HTTP
  periodSeconds: 10
  initialDelaySeconds: 180

内容的提问来源于stack exchange,提问作者Fay007

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:39:22