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

Spring Boot版Knative Functions启动失败:就绪探针异常问题

解决Knative Functions部署Spring Boot应用后Pod立即关闭的问题

问题概述

使用kn func create创建的默认Java Spring Boot应用,通过kn func deploy部署到Minikube集群时出现以下异常:

  • Spring Boot应用完成初始化启动后无报错直接终止
  • Pod事件记录显示就绪探针多次失败,包含超时、HTTP 503、连接拒绝等错误:
    Warning Unhealthy pod/test1-00001-deployment-59667f6745-xnfvd Readiness probe failed: Get "http://10.244.0.117:8012/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
    Warning Unhealthy pod/test1-00001-deployment-59667f6745-xnfvd Readiness probe failed: HTTP probe failed with statuscode: 503
    Warning Unhealthy pod/test1-00001-deployment-59667f6745-xnfvd Readiness probe failed: Get "http://10.244.0.117:8012/": dial tcp 10.244.0.117:8012: connect: connection refused
    
  • 手动使用pack构建镜像并通过Knative Serving清单部署时应用运行正常
  • 开启BP_NATIVE_IMAGE="true"构建原生镜像后,部署无异常

核心原因

  1. 探针配置不匹配:kn func默认生成的Knative就绪探针端口(如示例中的8012)与Spring Boot默认监听的8080端口不一致,导致探针无法访问应用
  2. 启动延迟不兼容:普通JVM镜像启动耗时较长,Knative默认探针的初始延迟设置过短,在应用就绪前就开始检测,多次失败后触发Pod终止
  3. 构建参数差异:kn func使用的构建环境变量与手动pack构建存在差异,导致应用启动后的监听端口不符合探针预期

解决方案

1. 修正探针端口与路径

在func.yaml中显式配置Knative就绪探针,匹配Spring Boot应用的实际监听端口和健康检查路径:

deploy:
  knative:
    readinessProbe:
      httpGet:
        path: /actuator/health/readiness
        port: 8080
      initialDelaySeconds: 30
      periodSeconds: 10
      failureThreshold: 5

执行kn func deploy重新部署应用。

2. 指定应用监听端口

在func.yaml中设置环境变量,确保Spring Boot应用监听正确的端口:

build:
  env:
    - name: SERVER_PORT
      value: "8080"
    - name: BP_JVM_SERVER_PORT
      value: "8080"

SERVER_PORT用于Spring Boot配置,BP_JVM_SERVER_PORT用于Paketo构建pack指定容器内端口。

3. 延长探针初始延迟

针对普通JVM镜像启动慢的问题,增加探针的初始延迟时间,给应用足够的初始化时间:

deploy:
  knative:
    readinessProbe:
      initialDelaySeconds: 60
      periodSeconds: 15
      failureThreshold: 3

验证步骤

  • 查看Pod日志确认应用监听端口:kubectl logs <pod-name>
  • 在Pod内部测试健康检查端点:kubectl exec <pod-name> -- curl http://localhost:8080/actuator/health/readiness
  • 检查Knative Serving资源的探针配置:kubectl get ksvc <service-name> -o yaml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:47:40