创建作业

本页面介绍如何通过现有容器映像创建和更新现有 Cloud Run 作业。与监听和处理请求的 Cloud Run 服务不同,Cloud Run 作业仅会运行其任务并在完成后退出。作业不会监听或处理请求。

创建或更新作业后,您可以执行以下操作:

您可以将作业构建为单个任务或多个可并行执行的独立任务(最多 10000 个任务)。每个任务都运行一个容器实例,并且可以配置为在发生故障时重试。每个任务都知道其存储在 CLOUD_RUN_TASK_INDEX 环境变量中的索引。任务的总数存储在 CLOUD_RUN_TASK_COUNT 环境变量中。如果您并行处理数据,则代码负责确定哪个任务处理数据的子集。

您可以设置任务的超时,并指定在任务失败的情况下的重试次数。如果任何任务的重试次数超出上限,则该任务会被标记为失败。如果有任何任务失败,则作业执行也会在 Cloud Run 尝试所有任务后被标记为失败

默认情况下,每个任务最长运行 10 分钟。您可以通过更改任务超时设置来修改默认值,最长可设置为 168 小时(7 天)。对超过 24 小时的超时时间的支持目前处于预览版阶段。

作业执行没有显式超时限制:所有任务都完成后,作业执行结束。

作业使用第二代执行环境

所需的角色

如需获得创建 Cloud Run 作业所需的权限,请让管理员向您授予以下 IAM 角色:

如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色Cloud Run IAM 权限。如果您的 Cloud Run 作业与Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

支持的容器存储库和映像

您可以直接使用已存储在 Artifact RegistryDocker Hub 中的容器映像。Google 建议使用 Artifact Registry。

您可以通过设置 Artifact Registry 远程代码库,使用其他公共或私有注册表(如 JFrog Artifactory、Nexus 或 GitHub Container Registry)中的容器映像。

您应仅考虑使用 Docker Hub 部署常用的容器映像,例如 Docker 官方映像Docker 赞助的 OSS 映像。为了获得更高的可用性,Google 建议您通过 Artifact Registry 远程代码库部署这些 Docker Hub 映像。

从 Docker Hub 或具有外部注册库的 Artifact Registry 远程代码库部署时,Cloud Run 不支持大于 9.9 GB 的容器映像层。

创建新作业

您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 创建新作业。

控制台

如需创建新作业,请执行以下操作:

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

    转到 Cloud Run

  2. 点击部署容器,然后选择作业以显示创建作业表单。

    1. 在该表单中,指定包含作业代码的容器映像,或从之前部署的容器列表中选择容器映像。
    2. 作业名称是系统根据容器映像自动生成的。您可以根据需要修改或更改作业名称。 创建作业后,便无法再更改作业名称。
    3. 选择作业所在的区域。区域选择器会突出显示碳影响最低的区域。
    4. 指定要在作业中运行的任务的数量。所有任务都必须成功完成,这样作业才能成功完成。默认情况下,这些任务是并行执行的。
  3. 点击容器、卷、网络、安全性以设置其他作业属性。

    • 在“任务容量”下,执行以下操作:
    1. 内存菜单中,指定所需的内存量。默认值为所需的最小值,即 512 MiB。
    2. CPU 菜单中,指定所需的 CPU 数量。默认值为所需的最小值,即 1 个 CPU。
    3. 在“任务超时”下,指定任务可运行的时长上限(以秒为单位),最长为 168 小时(7 天)。对超过 24 小时的超时时间的支持目前处于预览版阶段。每个任务都必须在此时间段内完成。默认值为 10 分钟(600 秒)。

    4. 每个失败任务的重试次数下,指定任务失败时的重试次数。默认值为 3 次重试。

    • 在“并行”下:

      1. 在大多数情况下,您可以选择尽可能多地运行并发任务
      2. 如果您因作业访问的资源存在扩缩限制而需要设置更小的限值,请选择限制并发任务数上限,然后在自定义并行限制字段中指定并发任务的数量。
  4. (可选)在相应的标签页中配置其他设置:

  5. 配置完作业后,点击创建以在 Cloud Run 中创建作业。

  6. 如需执行作业,请参阅执行作业按计划执行作业

gcloud

如需使用命令行,您需要先设置 gcloud CLI

如需创建新作业,请执行以下操作:

  1. 运行以下命令:

    gcloud run jobs create JOB_NAME --image IMAGE_URL OPTIONS
    或者,使用部署命令:
    gcloud run jobs deploy JOB_NAME --image IMAGE_URL OPTIONS

    • JOB_NAME 替换为您要创建的作业的名称。如果您省略此参数,则在运行该命令时系统会提示您输入作业名称。
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/job:latest
    • (可选)将 OPTIONS 替换为以下任意选项:

      选项 说明
      --tasks 接受大于或等于 1 的整数。默认为 1;最大值为 10000。每个任务都提供环境变量 CLOUD_RUN_TASK_INDEX(其值介于 0 到任务数减去 1 之间)和 CLOUD_RUN_TASK_COUNT(即任务数)
      --max-retries 失败任务的重试次数。如果有任何任务的失败次数超过此限制,则整个作业会被标记为失败。例如,如果设置为 1,系统将重试失败的任务一次,即总共尝试两次。默认值为 3。接受 0 到 10 的整数。
      --task-timeout 接受类似于“2s”的时长。默认值为 10 分钟;最长为 168 小时(7 天)。对超过 24 小时的超时时间的支持目前处于预览版阶段。
      --parallelism 可以并行执行的任务的数量上限。默认情况下,任务会尽快并行启动。如需了解值范围,请参阅并行性
      --execute-now 如果设置了此标志,则在创建作业后立即启动作业执行。等同于依次调用 gcloud run jobs creategcloud run jobs execute

      除了上述选项之外,您还可以指定更多配置,例如环境变量或内存限制。

      如需查看创建作业时可用的选项的完整列表,请参阅 gcloud run jobs create 命令行文档。

  2. 等待创建作业的操作完成。成功完成后,您会看到一条成功消息。

  3. 如需执行作业,请参阅执行作业按计划执行作业

YAML

您可以将作业规范存储在 YAML 文件中,然后使用 gcloud CLI 进行部署。

  1. 使用以下内容创建新的 job.yaml 文件:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE

    您需要进行如下替换

    • JOB 替换为 Cloud Run 作业的名称。 作业名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。
    • IMAGE 替换为作业容器映像的网址。

    您还可以指定更多配置,例如环境变量或内存限制。

  2. 使用以下命令部署新作业:

    gcloud run jobs replace job.yaml

Terraform

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

如需创建新的 Cloud Run 作业,请使用 google_cloud_run_v2_job 资源并修改 main.tf 文件,如以下代码段所示。

resource "google_cloud_run_v2_job" "default" {
  name     = "cloud-run-job"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    template {
      containers {
        image = "us-docker.pkg.dev/cloudrun/container/job:latest"
      }
    }
  }
}

客户端库

通过以下代码创建作业:

REST API

如需创建作业,请向 Cloud Run Admin API jobs 端点发送 POST HTTP 请求。

例如,使用 curl

curl -H "Content-Type: application/json" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -X POST \
  -d '{template: {template: {containers: [{image: "IMAGE_URL"}]}}}' \
  https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/jobs?jobId=JOB_NAME

您需要进行如下替换:

  • ACCESS_TOKEN 替换为具有创建作业的 IAM 权限的账号的有效访问令牌。例如,如果您已登录 gcloud,则可以使用 gcloud auth print-access-token 检索访问令牌。在 Cloud Run 容器实例中,您可以使用容器实例元数据服务器检索访问令牌。
  • JOB_NAME 替换为您要创建的作业的名称。
  • IMAGE_URL 替换为作业容器映像的网址,例如 us-docker.pkg.dev/cloudrun/container/job:latest
  • REGION 替换为作业的 Google Cloud 区域。
  • PROJECT_ID 替换为 Google Cloud 项目 ID。

Cloud Run 位置

Cloud Run 是区域级的,这意味着运行 Cloud Run 服务的基础架构位于特定区域,并且由 Google 代管,以便在该区域内的所有可用区以冗余方式提供。

选择用于运行 Cloud Run 服务的区域时,主要考虑该区域能否满足您的延迟时间、可用性或耐用性要求。通常,您可以选择距离用户最近的区域,但除此之外,您还应该考虑 Cloud Run 服务使用的其他 Google Cloud产品的位置。 Google Cloud 跨多个位置使用产品可能会影响服务的延迟时间和费用。

Cloud Run 可在以下区域使用:

基于层级 1 价格

基于层级 2 价格

如果您已创建 Cloud Run 服务,则可以在 Google Cloud 控制台中的 Cloud Run 信息中心内查看区域。

创建新作业时,Cloud Run 服务代理需要能够访问容器(默认情况下能够访问)。

更新现有作业

更改任何配置设置都需要更新作业,即使容器映像没有变化也是如此。请注意,对于任何未更改的设置,系统将继续使用先前的设置。

您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 更新现有作业。

控制台

如需更新现有作业,请执行以下操作:

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

    转到 Cloud Run

  2. 点击作业标签页以显示作业列表。

  3. 点击该作业以显示作业详情页面。

  4. 点击修改

  5. 如果更改了作业代码,请指定新的容器映像摘要

  6. (可选)根据需要更改作业中的任务数量。

  7. 酌情点击容器、卷、网络、安全性以更新任何其他作业属性:

    • 在“任务容量”下,执行以下操作:
    1. 内存菜单中,指定所需的内存量。默认值为所需的最小值,即 512 MiB。
    2. CPU 菜单中,指定所需的 CPU 数量。默认值为所需的最小值,即 1 个 CPU。
    3. 在“任务超时”下,指定任务可运行的时长上限(以秒为单位),最长为 168 小时(7 天)。对超过 24 小时的超时时间的支持目前处于预览版阶段。每个任务都必须在此时间段内完成。默认值为 10 分钟(600 秒)。
    4. 每个失败任务的重试次数下,指定任务失败时的重试次数。默认值为 3 次重试。
    • 在“并行”下:

      1. 在大多数情况下,您可以选择尽可能多地运行并发任务
      2. 如果您因作业访问的资源存在扩缩限制而需要设置更小的限值,请选择限制并发任务的数量,然后在自定义并行限制字段中指定并发任务数上限。
  8. (可选)在相应的标签页中配置其他设置:

  9. 配置完作业后,点击保存以在 Cloud Run 中创建作业,然后等待作业创建完成。

  10. 如需执行作业,请参阅执行作业按计划执行作业

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 运行以下命令:

    gcloud run jobs update JOB_NAME

    您需要进行如下替换:

    • JOB_NAME 替换为您要更新的作业的名称。
    • (可选)将 OPTIONS 替换为以下选项:

      选项 说明
      --tasks 接受不小于 1 的整数。默认为 1;最大值为 10000。每个任务都提供环境变量 CLOUD_RUN_TASK_INDEX(其值介于 0 到任务数减去 1 之间)和 CLOUD_RUN_TASK_COUNT(即任务数)
      --max-retries 失败任务的重试次数。如果有任何任务的失败次数超过此限制,则整个作业会被标记为失败。例如,如果设置为 1,系统将重试失败的任务一次,即总共尝试两次。默认值为 3。 接受 0 到 10 的整数。
      --task-timeout 接受类似于“2s”的时长。默认值为 10 分钟;最长为 168 小时(7 天)。对超过 24 小时的超时时间的支持目前处于预览版阶段。
      --parallelism 可以并行执行的任务的数量上限。默认情况下,任务会尽快并行启动。如需了解值范围,请参阅并行性

    除了上述选项之外,您还可以设置其他可选的配置设置:

    如需查看创建作业时可用的选项的完整列表,请参阅 gcloud run jobs create 命令行文档。

  3. 等待更新作业的操作完成。成功完成后,系统会显示一条成功消息,如下所示:

    Job [JOB_NAME] has been successfully updated.
    View details about this job by running `gcloud run jobs describe JOB_NAME`.
    See logs for this execution at: https://console.cloud.google.com/logs/viewer?project=PROJECT_ID&resource=cloud_run_revision/service_name/JOB_NAME
  4. 如需执行作业,请参阅执行作业按计划执行作业

YAML

如果您需要下载或查看现有作业的配置,请使用以下命令将结果保存到 YAML 文件:

gcloud run jobs describe JOB --format export > job.yaml

在作业配置 YAML 文件中,根据需要修改任何 spec.template 子属性以更新配置设置,然后重新部署:

  1. 更新现有作业配置:

    gcloud run jobs replace job.yaml
  2. 如需执行作业,请参阅执行作业按计划执行作业

Terraform

可以使用 terraform apply 命令在 main.tf 文件中更改作业配置。详细的 Terraform 说明适用于:

如需了解详情,请参阅 terraform apply 命令行选项。

客户端库

如需通过代码更新现有作业,请使用以下客户端库:

REST API

如需更新作业,请向 Cloud Run Admin API jobs 端点发送 PATCH HTTP 请求。

例如,使用 curl

curl -H "Content-Type: application/json" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -X PATCH \
  -d '{template: {template: {containers: [{image: "IMAGE_URL"}]}}}' \
  https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/jobs/JOB_NAME

您需要进行如下替换:

  • ACCESS_TOKEN 替换为具有更新作业的 IAM 权限的账号的有效访问令牌。例如,如果您已登录 gcloud,则可以使用 gcloud auth print-access-token 检索访问令牌。在 Cloud Run 容器实例中,您可以使用容器实例元数据服务器检索访问令牌。
  • JOB_NAME 替换为您要更新的作业的名称。
  • IMAGE_URL 替换为作业容器映像的网址,例如 us-docker.pkg.dev/cloudrun/container/job:latest
  • REGION 替换为作业的 Google Cloud 区域。
  • PROJECT_ID 替换为 Google Cloud 项目 ID。

示例代码

如需查看展示作业的代码示例,请参阅特定于语言的快速入门

将多个容器部署到作业 (Sidecar)

在包含多个容器(边车)的 Cloud Run 作业部署中,有一个封装作业配置的主要作业容器,以及一个或多个边车容器。

每个实例最多可以部署 10 个容器,包括主作业容器。实例中的所有容器共用同一网络命名空间,并且可以使用内存中共享卷来共享文件。

使用场景

侧车通常用于以下用例:

  • 从 Cloud Run 作业提取自定义指标,并使用收集器代理(例如 PrometheusOpentelemetry)将其发送到您选择的指定后端。
  • 让未内置 Hashicorp Vault 逻辑的应用能够使用 Vault 边车从 Vault 获取静态和动态 Secret。

使用 Sidecar 容器部署作业

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 将多个 Sidecar 部署到 Cloud Run 作业。

点击相应标签页即可获取有关所选工具的使用说明。

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud Run 页面。

    转到 Cloud Run

  2. 如需部署到现有作业,请点击作业,在作业列表中找到作业,点击以打开它,然后点击查看和修改配置以显示修改作业表单。

  3. 对于新作业,请点击部署容器,然后点击作业。提供作业名称和要部署的主要作业容器映像的网址。

  4. 点击容器、卷、网络、安全性

  5. 修改容器卡片中,根据需要配置主作业容器。

  6. 点击添加容器,然后配置要添加的边车容器以及主作业容器。如果 Sidecar 依赖于服务中的其他容器,请在容器启动顺序下拉菜单中指明。对您要部署的每个 Sidecar 容器重复此步骤。

  7. 点击创建(对于新服务)或更新(对于现有作业),然后等待部署完成。

gcloud

Google Cloud CLI 中的 container 参数为预览版。

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需将多个容器部署到作业,请运行以下命令:

    gcloud beta run jobs create JOB \
     --container JOB_CONTAINER_NAME \
     --image='JOB_IMAGE' \
     --container SIDECAR_CONTAINER_NAME \
     --image='SIDECAR_IMAGE'

    您需要进行如下替换:

    • JOB 替换为您要部署到的作业的名称。您可以完全省略此参数,但如果省略它,系统将提示您输入作业名称。
    • JOB_CONTAINER_NAME 替换为主作业容器的名称。
    • JOB_IMAGE 替换为对主作业容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/job:latest
    • SIDECAR_CONTAINER_NAME 替换为 Sidecar 容器的名称,例如 sidecar
    • SIDECAR_IMAGE 替换为对 Sidecar 容器映像的引用。

    如果要在部署命令中配置每个容器,请在 container 参数后面提供每个容器的配置,例如:

    gcloud beta run jobs create JOB \
      --container CONTAINER_1_NAME \
      --image='JOB_IMAGE' \
      --set-env-vars=KEY=VALUE \
      --container SIDECAR_CONTAINER_NAME \
      --image='SIDECAR_IMAGE' \
      --set-env-vars=KEY_N=VALUE_N
  3. 等待作业部署完成。成功完成后,系统会显示一条成功消息。

YAML

以下说明介绍了具有 Sidecar 的 Cloud Run 作业的基本 YAML 文件。创建一个名为 job.yaml 的文件,其中包含以下内容:

apiVersion: run.googleapis.com/v1
kind: Job
metadata:
  annotations:
    run.googleapis.com/launch-stage: BETA
  name: JOB
spec:
  template:
    spec:
      containers:
      - image: JOB_IMAGE
      - image: SIDECAR_IMAGE
      

您需要进行如下替换:

  • JOB 替换为 Cloud Run 主要作业容器的名称。 作业名称不得超过 49 个字符。
  • JOB_IMAGE 替换为对主作业容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/job:latest。您可以在此条目后面提供任何所需的容器配置条目。
  • SIDECAR_IMAGE 替换为对 Sidecar 容器映像的引用。(可选)在此条目后面提供任何所需的容器配置条目。您可以通过向 YAML 中的 containers 数组添加更多元素来指定多个 Sidecar。

更新 YAML 以添加入站流量容器和 Sidecar 容器后,使用以下命令部署到 Cloud Run:

gcloud run jobs replace job.yaml

具有 Sidecar 的部署提供的功能

如果在具有容器的部署中您的依赖项要求某些容器在其他容器之前启动,则可以在该部署中指定容器启动顺序

如果您的容器依赖于其他容器,则必须在部署中使用启动健康检查。如果您使用健康检查,Cloud Run 会遵循容器启动顺序并检查每个容器的健康状况,从而确保每个容器在 Cloud Run 按顺序启动下一个容器之前成功通过健康检查。如果您不使用健康检查,则健康状况良好的容器将会启动,即使其所依赖的容器未在运行也是如此。

单个实例中的多个容器可以访问共享的内存中卷,每个容器都可以使用您创建的装载点访问该卷。

后续步骤

创建或更新作业后,您可以执行以下操作: