Cloud Run 作业

1. 简介

上次更新时间:2022 年 5 月 16 日

Cloud Run 作业

借助 Cloud Run 作业,您可以在 Cloud Run 上运行需要长时间运行的作业。

本 Codelab 仅提供参考信息,旨在让您了解何时以及如何使用 Cloud Run 作业。您将为学习 Cloud Run 作业使用入门 Codelab 做好准备,通过该实操练习,您可以亲身体验如何使用 Google Cloud 控制台构建容器、创建和运行 Cloud Run 作业,以及如何更新和安排作业。

学习内容

  • 什么是 Cloud Run 作业
  • 何时使用 Cloud Run 作业
  • Cloud Run 作业工作流
  • 如何创建 Cloud Run 作业
  • 如何执行 Cloud Run 作业
  • 如何按计划执行作业
  • 如何查看执行状态
  • 如何管理作业和作业执行
  • 如何检测作业完成情况
  • 如何更新作业

最初,Cloud Run 作业仅面向 europe-west9 区域提供。

2. Cloud Run 作业概览

您可以通过两种方法在 Cloud Run 上运行代码。您可以将它作为一项服务持续运行,

c9a6f816087108b9.png

或者,如果您的代码需要在执行工作后停止运行,那么您便可以使用 Cloud Run 作业。

b24cdd6dd7e60e84.png

虽然 Cloud Run 服务非常适合无限期运行以侦听 HTTP 请求的容器,但 Cloud Run 作业则更适合运行以完成操作但不处理请求的容器(例如数据处理和管理作业)。

Cloud Run 作业的其他用例包括:

  • 运行脚本以执行数据库迁移或其他操作任务。
  • 对 Cloud Storage 存储桶中的所有文件执行高度并行化处理。
  • 每月创建并发送账单。
  • 每 4 小时将数据库查询结果保存为 XML 并上传文件。

与其他支持长时间运行的作业的平台相比,Cloud Run 作业在创建后能够更加快速地启动。简单容器只需 10 秒即可启动,所需时间具体取决于容器的复杂性。这使得 Cloud Run 作业非常适合应对需要等待几分钟才能启动虚拟机的问题。

3.Cloud Run 作业工作流

Cloud Run 作业工作流包含两个简单的步骤:

  1. 创建作业 作业会封装执行作业所需的所有配置,例如容器映像。
  2. 执行作业。使用 Cloud 控制台,或使用 gcloud CLI 从命令行执行作业。

作业可以启动一个容器实例来运行代码;也可以指定要运行的任务数量,并行启动多个相同且独立的容器实例来执行这些任务。例如,如果您要从 Cloud Storage 中读取 1000 张图片来调整其大小并进行剪裁,则连续处理图片的速度会比使用多个容器实例同时处理所有图片的速度慢。

4.创建作业

如需创建作业,您可以使用控制台,也可以使用 gcloud CLI 运行以下命令:

gcloud beta run jobs create JOB_NAME --image IMAGE_URL --region europe-west9 OPTIONS

替换:

  • JOB_NAME 替换为您要创建的作业的名称。
  • IMAGE_URL 替换为对容器映像的引用。
  • (可选)将 OPTIONS 替换为任何可用标志。如需查看完整的标志列表,请运行 gcloud beta run jobs create --help

示例标志包括:

  • --tasks,用于指定要运行的任务数量。
  • -–max retries,用于指定失败任务的重试次数。
  • --parallelism,用于指定可并行运行的任务数上限。
  • --execute-now,用于在创建作业后立即执行该作业。
  • --async,用于在执行新作业执行后立即退出作业。

您还可以使用常规的 Cloud Run 功能来保护您的 Cloud Run 作业,并将其连接到 Google Cloud Platform (GCP) 环境中的其余部件。

5. 执行作业

如需执行作业,您可以使用控制台,也可以使用 gcloud CLI 运行以下命令:

  • Cloud 控制台中,点击作业名称,然后点击页面顶部附近的执行
  • 在 gcloud CLI 中,使用以下命令:
gcloud beta run jobs execute JOB_NAME --region europe-west9 EXECUTION_OPTIONS

JOB_NAME 替换为作业的名称。(可选)替换 EXECUTION_OPTIONS 以指定:

  • 创建作业后立即执行作业。
gcloud beta run jobs create JOB_NAME --region europe-west9 --execute-now
  • 是否要等待作业执行完成后再退出。
gcloud beta run jobs create JOB_NAME --region europe-west9 --wait
  • 是否要在创建新作业执行后立即退出
gcloud beta run jobs create JOB_NAME --region europe-west9 --async

6.按计划执行作业

如果要按计划执行作业,请使用 Cloud Scheduler。

例如,您可能想要定期创建并发送账单,或者希望将数据库查询结果保存为 XML 文件,并每隔几小时上传一次该文件。

借助 Cloud Scheduler,您可以在一个位置安排作业和管理所有自动化任务。

  • 在每周、每天或每小时的同一时间运行批量作业和大数据作业,保证执行作业并在失败时重试。
  • 以可靠且完全代管的方式,自动执行与运行云基础架构相关的诸多繁琐任务。
  • 可以自动执行几乎任何操作。
  • 只需使用一个图形界面或命令行界面,即可查看和管理所有作业。

设置环境以使项目能够使用 Cloud Scheduler 后,您便可以创建 Cloud Run 作业,然后通过输入名称、区域、说明、频率和时区来定义时间表。之后,Cloud Scheduler 将按您指定的频率执行 Cloud Run 作业。

7. 查看作业执行状态

执行作业后,您可以在 Cloud Logging 日志中查看日志,并在 Cloud Monitoring 中查看监控数据。

如需查看日志,您可以执行以下操作:

  • 使用 Cloud Console 中的 Cloud Run 页面。
  • 使用 Cloud Console 中的 Cloud Logging 日志浏览器。

这两种查看方法都会检查 Cloud Logging 中存储的相同日志,但 Cloud Logging 日志浏览器提供了更多详细信息和更多过滤功能。

Cloud Monitoring 提供 Cloud Run 性能监控、指标以及提醒功能,以便在超出特定指标阈值时发送通知。Cloud Run 会自动与 Cloud Monitoring 集成,无需任何设置或配置。这意味着系统会在 Cloud Run 作业运行时自动捕获其指标。

您可以在 Cloud Monitoring 或控制台中的 Cloud Run 页面中查看指标。Cloud Monitoring 提供了更多图表和过滤选项。

8. 管理作业和作业执行

如需管理作业,请使用 Cloud 控制台或 gcloud CLI 查看以下各项的列表:

您还可以:

  • 删除正在运行的作业执行,以将其停止。
  • 删除当前未运行的作业执行。
  • 删除职位。

删除作业会取消该作业的所有待处理作业执行,但作业日志和监控数据在日志保留期(通常为 30 天)的剩余时间内仍然可用。Cloud Monitoring 会继续提供数据监控功能。

9. 检测作业执行完成情况

您可以通过多种方式来检测作业执行是否已完成运行:

  • 使用 --wait 标志运行作业;作业完成后,gcloud CLI 将退出。
gcloud beta run jobs execute JOB_NAME --region europe-west9 --wait
  • 轮询 REST API 的 executions.get 端点,检查 Completed 状态条件是否为 True
  • 在执行完成时检查系统是否写入如下所示的日志条目:

Completed condition status changed to True for Execution sleepy-l8zjp.

如需查找此日志消息,请在 Cloud Logging 中运行以下查询:

resource.type="cloud_run_revision"
resource.labels.revision_name="EXECUTION_NAME" log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
protoPayload.response.status.conditions.type="Completed"
protoPayload.response.status.conditions.status="True"

您还可以轮询输出写入到的位置,以检测输出是否出现。不过,只有在写入输出是作业的最后一项操作时,上述方法才有效。例如,如果您的作业在写入输出后还会执行清理操作,那么作业在写入输出后仍有可能会失败。

10. 更新作业

创建作业时,您可以使用标记或确切的摘要来指定容器映像:

  • 标记示例:
gcr.io/my-project/my-image:tag
  • 摘要示例:
gcr.io/my-project/my-image@sha256:41f34ab970ee...

如果这二者均未指定,则系统会使用 :latest 标记。

如何更新作业来运行代码的最新版本取决于您使用标记还是摘要指定容器映像。

如果您使用标记指定容器映像,则 Cloud Run 会在执行作业时将映像解析为特定的摘要。这意味着,您下次运行作业时,无需明确更新作业即可获取容器的最新版本。

如果您希望在每次作业运行时使用特定的容器摘要,则可以使用确切的摘要来指定容器映像。在这种情况下,如果您希望作业获取您所做的代码更改,则必须明确更新作业以使用其他摘要:

gcloud beta run jobs update JOB_NAME --image NEW-IMAGE --region europe-west9

无论您如何指定容器映像,执行的所有任务都始终使用相同的摘要。

应用更新时,无法启动新的执行。您需要等待更新完成,这通常需要几秒钟的时间。如果更新失败,则无法创建新的执行。您需要先通过再次更新使作业恢复到良好的状态。

11. 恭喜

恭喜,您已了解何时以及如何使用 Cloud Run 作业!

您已完成以下内容的学习:

  • 什么是 Cloud Run 作业
  • 何时使用 Cloud Run 作业
  • Cloud Run 作业工作流
  • 如何创建 Cloud Run 作业
  • 如何执行 Cloud Run 作业
  • 如何按计划执行作业
  • 如何查看执行状态
  • 如何管理作业和作业执行
  • 如何检测作业完成情况
  • 如何更新作业

后续操作

Cloud Run 作业使用入门

帮助

如需查看完整的 gcloud 参考,请使用 help 命令:

gcloud beta run jobs --help

gcloud beta run jobs executions --help

参考文档

部署作业

执行作业

按计划执行作业

设置您的环境

记录和查看日志

监控运行状况和性能

Cloud Logging 文档

Cloud Monitoring 文档

Google Cloud 指标

提醒简介

管理作业执行

管理招聘信息

方法:namespaces.executions.get

作业重试和检查点最佳做法