配置容器健康检查(作业)

本页介绍了如何为新的和现有的 Cloud Run 作业配置 HTTP、TCP 和 gRPC 启动探测。具体配置会因探测类型而异。

使用场景

您可以配置启动健康检查探测。启动探测确定容器是否已启动并已准备好执行作业。

当作业反复无法启动时,Cloud Run 会限制任务重启,以防止不受控制的崩溃循环。

探测要求和行为

探测类型 要求 行为
TCP 启动 如果 Cloud Run 无法建立连接,则表示探测失败。

如果启动探测在指定时间间隔内未成功,Cloud Run 会关闭容器。此时间间隔的计算方式为 failureThreshold * periodSeconds,且不得超过 240 秒。
HTTP 启动 创建 HTTP 健康检查端点
使用 HTTP/1
您配置探测后,Cloud Run 会向作业健康检查端点(例如 /ready)发出 HTTP GET 请求。介于 200400 之间的任何响应都表示成功,其余响应值均表示失败。

如果启动探测在指定时间 (failureThreshold * periodSeconds) 内未成功(不超过 240 秒),则容器会关闭
gRPC 启动 在 Cloud Run 作业中实现 gRPC 健康检查协议 如果启动探测在指定时间 (failureThreshold * periodSeconds) 内未成功(不超过 240 秒),则容器会关停

配置探测

使用 Google Cloud 控制台或 YAML 配置 HTTP、TCP 和 gRPC 探测:

控制台

重要提示:如果您要为 Cloud Run 作业配置 HTTP 探测,则还必须在作业代码中添加 HTTP 健康检查端点以响应探测。如果要配置 gRPC 探测,则还必须在 Cloud Run 作业中实现 gRPC 健康检查协议

  1. 在 Google Cloud 控制台中,前往 Cloud Run 页面。

    转到 Cloud Run

  2. 对于新作业,请点击部署容器,然后点击作业。对于现有作业,请点击作业标签页,点击所需作业,然后点击查看和修改作业配置

  3. 展开容器、卷、网络、安全性

  4. 容器部分,请转到健康检查然后点击添加健康检查以打开添加健康检查配置面板。

  5. 选择健康检查类型菜单中,选择健康检查启动类型。

  6. 选择探测类型菜单中,选择探测类型,例如 HTTP 或 gRPC。此时会显示探测配置表单。

  7. 请注意,探测配置因探测类型而异。配置探测设置:

    • 如果您使用的是 HTTP 探测:
      • 使用路径字段指定端点的相对路径,例如 /
      • 选中 HTTP 标头复选框以指定可选的自定义标头。然后在名称字段中指定标头名称,在字段中指定标头值。点击添加 HTTP 标头以指定更多标头。
    • 对于端口,指定作业容器监听探针的端口。
    • 对于初始延迟时间,指定容器启动后执行首次探测之前等待的秒数。指定一个介于 0 秒到 240 秒之间的值。默认值为 0 秒。
    • 对于周期,指定执行探测的时间间隔(以秒为单位)。例如,2 表示每 2 秒执行一次探测。指定一个介于 1 秒到 240 秒之间的值。默认值为 10 秒。
    • 对于失败阈值,指定在关停容器之前重试探测的次数。默认值为 3。
    • 对于超时,指定等待探测超时的秒数。此值不能超过为 periodSeconds 指定的值。指定 1 至 240 之间的值。默认值为 1。
  8. 点击添加以添加新的阈值

YAML

重要提示:如果您要为 Cloud Run 作业配置 HTTP 探测,则还必须在作业代码中添加端点以响应探测。如果要配置 gRPC 探测,则还必须在 Cloud Run 作业中实现 gRPC 健康检查协议

TCP 启动

  1. 如果您要创建新的作业,请跳过此步骤。如果您要更新现有作业,请下载其 YAML 配置

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. 配置 startupProbe 属性,如下所示:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
     name: JOB
    spec:
     template:
       metadata:
       spec:
         containers:
         - image: IMAGE_URL
           startupProbe:
             tcpSocket:
               port: CONTAINER_PORT
             initialDelaySeconds: DELAY
             timeoutSeconds: TIMEOUT
             failureThreshold: THRESHOLD
             periodSeconds: PERIOD

    执行以下变量替换操作:

    • JOB 替换为 Cloud Run 作业的名称。
    • IMAGE_URL 替换为作业容器映像的网址,例如 us-docker.pkg.dev/cloudrun/container/job:latest
    • 可选:将 CONTAINER_PORT 替换为作业容器监听探测的端口。
    • DELAY 替换为容器启动后执行首次探测之前等待的时长(秒数)。指定一个介于 0 秒到 240 秒之间的值。默认值为 0 秒。
    • 可选:将 TIMEOUT 替换为等待探测超时的时长(秒数)。此值不能超过为 periodSeconds 指定的值。指定 1 至 240 之间的值。默认值为 1。
    • THRESHOLD 替换为关停容器之前重试探测的次数。默认值为 3。
    • PERIOD 替换为要在其中执行探测的时间段(以秒为单位)。例如,2 表示每 2 秒执行一次探测。指定一个介于 1 秒到 240 秒之间的值。默认值为 10 秒。
  3. 使用以下命令创建或更新作业:

    gcloud run jobs replace job.yaml

HTTP 启动

  1. 如果您要创建新的作业,请跳过此步骤。如果您要更新现有作业,请下载其 YAML 配置

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. 配置 startupProbe 属性,如下所示:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            startupProbe:
              httpGet:
                path: PATH
                port: CONTAINER_PORT
                httpHeaders:
                  - name: HEADER_NAME
                    value: HEADER_VALUE
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

    执行以下变量替换操作:

    • JOB 替换为 Cloud Run 作业的名称。
    • IMAGE_URL 替换为作业容器映像的网址,例如 us-docker.pkg.dev/cloudrun/container/job:latest
    • PATH 替换为 HTTP 端点的相对路径,例如 /ready
    • 可选:将 CONTAINER_PORT 替换为作业容器监听探测的端口。
    • 可选:httpHeaders 可用于使用 HEADER_NAMEHEADER_VALUE 字段提供多个或重复的自定义标头,如下所示。
    • 可选:将 DELAY 替换为容器启动后执行首次探测之前等待的时长(秒数)。指定一个介于 0 秒到 240 秒之间的值。默认值为 0 秒。
    • 可选:将 TIMEOUT 替换为等待探测超时的时长(秒数)。此值不能超过为 periodSeconds 指定的值。指定 1 至 240 之间的值。默认值为 1。
    • 可选:将 THRESHOLD 替换为在关闭容器之前重试探测的次数。默认值为 3。
    • 可选:将 PERIOD 替换为执行探测的周期(以秒为单位)。 例如,2 表示每 2 秒执行一次探测。指定一个介于 1 秒到 240 秒之间的值。默认值为 10 秒。
  3. 使用以下命令创建或更新作业:

    gcloud run jobs replace job.yaml

gRPC 启动

  1. 如果您要创建新的作业,请跳过此步骤。如果您要更新现有作业,请下载其 YAML 配置

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. 配置 startupProbe 属性,如下所示:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            startupProbe:
              grpc:
                service: GRPC_SERVICE
                port: CONTAINER_PORT
              initialDelaySeconds: DELAY
              timeoutSeconds: TIMEOUT
              failureThreshold: THRESHOLD
              periodSeconds: PERIOD

    执行以下变量替换操作:

    • JOB 替换为 Cloud Run 作业的名称。
    • IMAGE_URL 替换为作业容器映像的网址,例如 us-docker.pkg.dev/cloudrun/container/job:latest
    • 可选:GRPC_SERVICE。如果设置了此属性,则在调用 grpc.health.v1.Health.Check RPC 时,它会用于 grpc.health.v1.HealthCheckRequest 的服务字段。
    • 可选:将 CONTAINER_PORT 替换为作业容器监听探测的端口。
    • 可选:将 DELAY 替换为容器启动后执行首次探测之前等待的时长(秒数)。指定一个介于 0 秒到 240 秒之间的值。默认值为 0 秒。
    • 可选:将 TIMEOUT 替换为等待探测超时的时长(秒数)。此值不能超过为 periodSeconds 指定的值。指定 1 至 240 之间的值。默认值为 1。
    • 可选:将 THRESHOLD 替换为在关闭容器之前重试探测的次数。默认值为 3。
    • 可选:将 PERIOD 替换为执行探测的周期(以秒为单位)。 例如,2 表示每 2 秒执行一次探测。指定一个介于 1 秒到 240 秒之间的值。默认值为 10 秒。
  3. 使用以下命令创建或更新作业:

    gcloud run jobs replace job.yaml

创建 HTTP 健康检查端点

如果您为 Cloud Run 作业配置了 HTTP 启动探测,则必须在作业代码中添加端点以响应探测。您可以为端点使用任何名称,例如 /startup/ready。该名称必须与您在探测配置中为 path 指定的值相匹配。例如,如果您为 HTTP 启动探测指定了 /ready,则应按如下所示在探测配置中指定 path

startupProbe:
  httpGet:
    path: /ready