创建作业

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

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

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

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

默认情况下,每个任务最长运行 10 分钟。您可以通过更改任务超时设置来修改默认值,最长为 168 小时(7 天)。对于使用 GPU 的任务,最长超时时间为 1 小时。

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

作业使用第二代执行环境。

所需的角色

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

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

支持的容器存储库和映像

您可以直接使用已存储在 Artifact Registry 或 Docker Hub 中的容器映像。Google 建议使用 Artifact Registry。 Docker Hub 映像的缓存时间最长为一小时。

您可以通过设置 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. 从 Cloud Run 导航菜单中选择作业,然后点击部署容器以显示创建作业表单。

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

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

    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 天)。对于使用 GPU 的任务,最长超时时间为 1 小时。
      --parallelism 可以并行执行的任务的数量上限。默认情况下,任务会尽快并行启动。如需了解值范围,请参阅并行性。
      --execute-now 如果设置了此标志,则在创建作业后立即启动作业执行。等同于依次调用 gcloud run jobs create 和 gcloud 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_URL

    替换以下内容:

    • JOB:Cloud Run 作业的名称 作业名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。
    • IMAGE_URL:对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/job:latest。

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

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

    gcloud run jobs replace job.yaml

Terraform

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

将以下内容添加到 Terraform 配置中的 google_cloud_run_v2_job 资源:
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 价格

  • africa-south1(约翰内斯堡)
  • asia-east2(香港)
  • asia-northeast3(韩国首尔)
  • asia-southeast1(新加坡)
  • asia-southeast2 (雅加达)
  • asia-south2(印度德里)
  • australia-southeast1(悉尼)
  • australia-southeast2(墨尔本)
  • europe-central2(波兰,华沙)
  • europe-west10(柏林)
  • europe-west12(都灵)
  • europe-west2(英国伦敦) 叶形图标 二氧化碳排放量低
  • europe-west3(德国法兰克福)
  • europe-west6(瑞士苏黎世) 叶形图标 二氧化碳排放量低
  • me-central1(多哈)
  • me-central2(达曼)
  • northamerica-northeast1(蒙特利尔) 叶形图标 二氧化碳排放量低
  • northamerica-northeast2(多伦多) 叶形图标 二氧化碳排放量低
  • southamerica-east1(巴西圣保罗) 叶形图标 二氧化碳排放量低
  • southamerica-west1(智利圣地亚哥) 叶形图标 二氧化碳排放量低
  • us-west2(洛杉矶)
  • us-west3(盐湖城)
  • us-west4(拉斯维加斯)

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

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

更新现有作业

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

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

控制台

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

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

    前往 Cloud Run

  2. 在 Cloud Run 导航菜单中,点击作业以显示作业列表。

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

  4. 点击修改。

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

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

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

    • 在“任务容量”下,执行以下操作:
    1. 在内存菜单中,指定所需的内存量。默认值为所需的最小值,即 512 MiB。
    2. 在 CPU 菜单中,指定所需的 CPU 数量。默认值为所需的最小值,即 1 个 CPU。
    3. 在任务超时下,指定任务可运行的时长上限(以秒为单位),最长为 168 小时(7 天)。每个任务都必须在此时间段内完成。默认值为 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 天)。
      --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. 如需执行作业,请参阅执行作业或按计划执行作业。

  5. 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。

示例代码

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

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

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

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

使用场景

边车通常用于以下应用场景:

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

使用边车容器部署作业

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

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

控制台

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

    前往 Cloud Run

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

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

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

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

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

  7. 如为新服务,点击创建;如为现有作业,点击更新,然后等待部署完成。

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 create JOB \
     --container JOB_CONTAINER_NAME \
     --image='IMAGE_URL' \
     --container SIDECAR_CONTAINER_NAME \
     --image='SIDECAR_IMAGE'

    替换以下内容:

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

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

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

  4. YAML

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

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

    替换以下内容:

    • 将 JOB 替换为 Cloud Run 主作业容器的名称。 作业名称不得超过 49 个字符。
    • IMAGE_URL:对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/job:latest。
    • SIDECAR_IMAGE:对边车容器映像的引用。

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

    gcloud run jobs replace job.yaml

    Terraform

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

    将以下内容添加到 Terraform 配置中的 google_cloud_run_v2_job 资源:
    resource "google_cloud_run_v2_job" "default" {
      name     = "JOB_NAME"
      location = "europe-west1"
    
      template {
        template {
          containers {
            name = "CONTAINER_NAME"
            image = "IMAGE_URL"
          }
          containers {
            name = "SIDECAR_CONTAINER_NAME"
            image = "SIDECAR_IMAGE_URL"
          }
        }
      }
    }
    
    

    替换以下内容:

    • JOB_NAME:Cloud Run 作业的名称
    • CONTAINER_NAME:容器的名称。
    • IMAGE_URL:对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/job:latest。
    • SIDECAR_CONTAINER_NAME:边车容器的名称。
    • SIDECAR_IMAGE_URL:对边车容器映像的引用。

具有边车的部署可使用的功能

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

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

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

限制

如果您的作业使用 Cloud Run 的内置功能连接到 Cloud SQL 实例,请参阅内置 Cloud SQL 连接中的已知问题。

后续步骤

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