创建作业

本页面介绍如何通过现有容器映像创建和更新现有 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 RegistryDocker 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 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_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 命令行文档。