本页面介绍如何通过现有容器映像创建和更新现有 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 作业的 Cloud Run Developer (
roles/run.developer
) 角色 -
服务身份的 Service Account User (
roles/iam.serviceAccountUser
) 角色 -
对作业容器映像的 Artifact Registry 仓库(如果适用)授予 Artifact Registry Reader (
roles/artifactregistry.reader
) 角色
如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色和 Cloud Run IAM 权限。如果您的 Cloud Run 作业与Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限和管理访问权限。
支持的容器存储库和映像
您可以直接使用已存储在 Artifact Registry 或 Docker 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 创建新作业。
控制台
如需创建新作业,请执行以下操作:
在 Google Cloud 控制台中,前往 Cloud Run 页面:
点击部署容器,然后选择作业以显示创建作业表单。
点击容器、卷、网络、安全性以设置其他作业属性。
- 在“任务容量”下,执行以下操作:
- 在内存菜单中,指定所需的内存量。默认值为所需的最小值,即 512 MiB。
- 在 CPU 菜单中,指定所需的 CPU 数量。默认值为所需的最小值,即 1 个 CPU。
在“任务超时”下,指定任务可运行的时长上限(以秒为单位),最长为 168 小时(7 天)。对超过 24 小时的超时时间的支持目前处于预览版阶段。每个任务都必须在此时间段内完成。默认值为 10 分钟(600 秒)。
在每个失败任务的重试次数下,指定任务失败时的重试次数。默认值为 3 次重试。
在“并行”下:
- 在大多数情况下,您可以选择尽可能多地运行并发任务。
- 如果您因作业访问的资源存在扩缩限制而需要设置更小的限值,请选择限制并发任务数上限,然后在自定义并行限制字段中指定并发任务的数量。
(可选)在相应的标签页中配置其他设置:
配置完作业后,点击创建以在 Cloud Run 中创建作业。
gcloud
如需使用命令行,您需要先设置 gcloud CLI。
如需创建新作业,请执行以下操作:
运行以下命令:
或者,使用部署命令: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 create
和gcloud run jobs execute
。除了上述选项之外,您还可以指定更多配置,例如环境变量或内存限制。
如需查看创建作业时可用的选项的完整列表,请参阅 gcloud run jobs create 命令行文档。
- 将
等待创建作业的操作完成。成功完成后,您会看到一条成功消息。
YAML
您可以将作业规范存储在 YAML
文件中,然后使用 gcloud CLI 进行部署。
使用以下内容创建新的
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 替换为作业容器映像的网址。
您还可以指定更多配置,例如环境变量或内存限制。
使用以下命令部署新作业:
gcloud run jobs replace job.yaml
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
如需创建新的 Cloud Run 作业,请使用 google_cloud_run_v2_job
资源并修改 main.tf
文件,如以下代码段所示。
客户端库
通过以下代码创建作业:
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 价格
asia-east1
(台湾)asia-northeast1
(东京)asia-northeast2
(大阪)asia-south1
(印度孟买)europe-north1
(芬兰)二氧化碳排放量低
europe-southwest1
(马德里)二氧化碳排放量低
europe-west1
(比利时)二氧化碳排放量低
europe-west4
(荷兰)二氧化碳排放量低
europe-west8
(米兰)europe-west9
(巴黎)二氧化碳排放量低
me-west1
(特拉维夫)us-central1
(爱荷华)二氧化碳排放量低
us-east1
(南卡罗来纳)us-east4
(北弗吉尼亚)us-east5
(哥伦布)us-south1
(达拉斯)二氧化碳排放量低
us-west1
(俄勒冈)二氧化碳排放量低
基于层级 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 更新现有作业。
控制台
如需更新现有作业,请执行以下操作:
在 Google Cloud 控制台中,前往 Cloud Run 页面:
点击作业标签页以显示作业列表。
点击该作业以显示作业详情页面。
点击修改。
如果更改了作业代码,请指定新的容器映像摘要。
(可选)根据需要更改作业中的任务数量。
酌情点击容器、卷、网络、安全性以更新任何其他作业属性:
- 在“任务容量”下,执行以下操作:
- 在内存菜单中,指定所需的内存量。默认值为所需的最小值,即 512 MiB。
- 在 CPU 菜单中,指定所需的 CPU 数量。默认值为所需的最小值,即 1 个 CPU。
- 在“任务超时”下,指定任务可运行的时长上限(以秒为单位),最长为 168 小时(7 天)。对超过 24 小时的超时时间的支持目前处于预览版阶段。每个任务都必须在此时间段内完成。默认值为 10 分钟(600 秒)。
- 在每个失败任务的重试次数下,指定任务失败时的重试次数。默认值为 3 次重试。
在“并行”下:
- 在大多数情况下,您可以选择尽可能多地运行并发任务。
- 如果您因作业访问的资源存在扩缩限制而需要设置更小的限值,请选择限制并发任务的数量,然后在自定义并行限制字段中指定并发任务数上限。
(可选)在相应的标签页中配置其他设置:
配置完作业后,点击保存以在 Cloud Run 中创建作业,然后等待作业创建完成。
gcloud
-
In the Google Cloud console, 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.
运行以下命令:
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 命令行文档。
- 将
等待更新作业的操作完成。成功完成后,系统会显示一条成功消息,如下所示:
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
YAML
如果您需要下载或查看现有作业的配置,请使用以下命令将结果保存到 YAML 文件:
gcloud run jobs describe JOB --format export > job.yaml
在作业配置 YAML 文件中,根据需要修改任何 spec.template
子属性以更新配置设置,然后重新部署:
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 作业提取自定义指标,并使用收集器代理(例如 Prometheus 或 Opentelemetry)将其发送到您选择的指定后端。
- 让未内置 Hashicorp Vault 逻辑的应用能够使用 Vault 边车从 Vault 获取静态和动态 Secret。
使用 Sidecar 容器部署作业
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 将多个 Sidecar 部署到 Cloud Run 作业。
点击相应标签页即可获取有关所选工具的使用说明。
控制台
在 Google Cloud 控制台中,转到 Cloud Run 页面。
如需部署到现有作业,请点击作业,在作业列表中找到作业,点击以打开它,然后点击查看和修改配置以显示修改作业表单。
对于新作业,请点击部署容器,然后点击作业。提供作业名称和要部署的主要作业容器映像的网址。
点击容器、卷、网络、安全性
在修改容器卡片中,根据需要配置主作业容器。
点击添加容器,然后配置要添加的边车容器以及主作业容器。如果 Sidecar 依赖于服务中的其他容器,请在容器启动顺序下拉菜单中指明。对您要部署的每个 Sidecar 容器重复此步骤。
点击创建(对于新服务)或更新(对于现有作业),然后等待部署完成。
gcloud
Google Cloud CLI 中的 container
参数为预览版。
-
In the Google Cloud console, 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.
如需将多个容器部署到作业,请运行以下命令:
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
等待作业部署完成。成功完成后,系统会显示一条成功消息。
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 按顺序启动下一个容器之前成功通过健康检查。如果您不使用健康检查,则健康状况良好的容器将会启动,即使其所依赖的容器未在运行也是如此。
单个实例中的多个容器可以访问共享的内存中卷,每个容器都可以使用您创建的装载点访问该卷。
后续步骤
创建或更新作业后,您可以执行以下操作: