4.5. 启动探测
启动探测验证服务是否已成功启动,有助于降低启动进程的容器的冷启动时间。启动探测仅在容器初始化阶段运行,且不会定期执行。如果启动探测失败,则容器遵循定义的 restartPolicy
。
4.5.1. 进度期限
默认情况下,服务有一个进度期限,用于定义服务的时间限制,以完成其初始启动。使用启动探测时,请确保将进度截止时间设置为超过启动探测所需的最长时间。如果进度截止时间设置得太低,启动探测可能无法在达到截止时间前完成,这可能会阻止服务启动。
如果您在部署中遇到这些条件,请考虑增加进度期限:
- 服务镜像的大小需要很长时间才能拉取。
-
由于初始缓存 priming,该服务需要很长时间才能变为
READY
。 - 集群依赖于自动扩展来为新 pod 分配资源。
4.5.2. 配置启动探测
对于 OpenShift Serverless Serving,默认情况下不定义启动探测。您可以在部署配置中为容器定义启动探测。
流程
通过修改部署配置,为您的服务定义启动探测。以下示例显示了有两个容器的配置:
定义的星号探测示例
apiVersion: serving.knative.dev/v1 kind: Service # ... spec: template: spec: containers: - name: first-container image: <image> ports: - containerPort: 8080 # ... startupProbe: 1 httpGet: port: 8080 path: "/" - name: second-container image: <image> # ... startupProbe: 2 httpGet: port: 8081 path: "/"
4.5.3. 配置进度期限
您可以配置进度截止时间设置,以指定在系统报告 Knative Revision 失败前部署的最长时间。此时间限制可以以秒为单位或分钟为单位。
要有效地配置进度期限,请考虑以下参数:
-
initialDelaySeconds
-
failureThreshold
-
periodSeconds
-
timeoutSeconds
如果没有在指定的时间限制内实现初始扩展,Knative Autoscaler 组件会将修订版本扩展到 0,
Knative 服务会进入终端 Failed
状态。
默认情况下,进度期限设置为 600 秒。这个值被指定为 Golang time.Duration
字符串,且必须舍入到最接近的秒。
流程
要配置 progress deadline 设置,请在部署配置中使用注解。
进程截止时间设置为 60 秒的示例
apiVersion: serving.knative.dev/v1 kind: Service ... spec: template: metadata: annotations: serving.knative.dev/progress-deadline: "60s" spec: containers: - image: ghcr.io/knative/helloworld-go:latest