将工作器池部署到 Cloud Run

本页面介绍如何将容器映像部署到新的 Cloud Run 工作器池或现有 Cloud Run 工作器池的新修订版本。

工作器池是一种专门为非请求工作负载设计的 Cloud Run 资源。与 Cloud Run 服务相比,工作器池不具备以下功能:

  • 公共端点/网址
  • 公开入站流量端口的要求
  • 请求驱动型自动扩缩

如需查看部署新工作器池的示例演示,请参阅部署示例工作器池快速入门

所需的角色

如需获得部署 Cloud Run 工作器池所需的权限,请让您的管理员为您授予以下 IAM 角色:

  • Cloud Run 工作器池的 Cloud Run Developer (roles/run.developer) 角色
  • 工作器池用于与其他 Google Cloud 服务进行交互的身份的 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 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 的容器映像层。

部署工作器池

您可以通过以下方式部署工作器池:

部署新的工作器池

您可以使用标记(例如 us-docker.pkg.dev/my-project/container/my-image:latest)或确切摘要(例如 us-docker.pkg.dev/my-project/container/my-image@sha256:41f34ab970ee...)指定容器映像。

首次部署工作器池时会创建第一个修订版本。请注意,修订版本是不可变的。如果使用容器映像标记进行部署,则该标记会被解析为摘要,并且修订版本将始终提供此特定摘要。

使用 Google Cloud CLI,按照说明进行操作。

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. 如需部署工作器池容器映像,请执行以下操作:

    1. 运行以下命令:

      gcloud beta run worker-pools deploy WORKER_POOL --image IMAGE_URL 

      您需要进行如下替换:

      • WORKER_POOL 替换为要部署到的工作器池的名称。如果工作器池尚不存在,则此命令会在部署期间创建工作器池。您可以完全省略此参数,但如果省略它,系统会提示您输入工作器池名称。工作器池名称不得超过 49 个字符,在每个区域和项目中必须使用唯一的名称,并且不得与项目中的现有服务名称相同。
      • IMAGE_URL 替换为对包含工作器池的容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。请注意,如果您未提供 --image 标志,则部署命令将尝试从源代码进行部署
    2. 等待部署完成。成功完成后,Cloud Run 会显示一条成功消息以及有关已部署工作器池的修订版本信息。

      如需将映像部署到其他位置,而不部署到使用 run/region gcloud 属性设置的位置,请使用以下命令:

      gcloud beta run worker-pools deploy WORKER_POOL --region REGION

部署现有工作器池的新修订版本

请注意,更改工作器池的配置设置会导致创建新修订版本,即使未更改容器映像也是如此。创建的每个修订版本都是不可变的。

容器映像在部署时由 Cloud Run 导入。只要容器映像的副本由修订版本使用,Cloud Run 就会保留该副本。

使用 Google Cloud CLI,按照以下说明进行操作:

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. 要部署容器映像,请执行以下操作:

    1. 运行以下命令:

      gcloud beta run worker-pools deploy WORKER_POOL --image IMAGE_URL 

      您需要进行如下替换:

      • WORKER_POOL 替换为要部署到的工作器池的名称。如果工作器池尚不存在,则此命令会在部署期间创建工作器池。您可以完全省略此参数,但如果省略它,系统会提示您输入工作器池名称。工作器池名称不得超过 49 个字符,在每个区域和项目中必须使用唯一的名称,并且不得与项目中的现有服务名称相同。
      • IMAGE_URL 替换为对包含工作器池的容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。请注意,如果您未提供 --image 标志,则部署命令将尝试从源代码进行部署

      系统会自动为新修订版本分配后缀。如果您要提供自己的修订版本后缀,请使用 gcloud CLI 参数 --revision-suffix

    2. 等待部署完成。成功完成后,Cloud Run 会显示一条成功消息以及有关已部署工作器池的修订版本信息。

从其他 Google Cloud 项目部署映像

如需从其他 Google Cloud 项目部署映像,您或您的管理员必须为部署者账号和 Cloud Run 服务代理授予所需的 IAM 角色。

如需了解部署者账号所需的角色,请参阅必需的角色

如需为 Cloud Run 服务代理授予所需的角色,请参阅以下说明:

  1. 在 Google Cloud 控制台中,打开 Cloud Run 工作器池对应的项目。

    转到 IAM 页面

  2. 选择包括 Google 提供的角色授权

  3. 复制 Cloud Run 服务代理的电子邮件。该电子邮件的后缀为 @serverless-robot-prodiam.gserviceaccount.com

  4. 打开您要使用的容器注册表所属的项目。

    进入 IAM 页面

  5. 点击添加以添加新的主账号。

  6. 新的主账号字段中,粘贴您之前复制的服务账号的电子邮件地址。

  7. “选择角色”下拉菜单中,如果您使用的是 Container Registry,请选择 Storage -> Storage Object Viewer 角色。如果您使用的是 Artifact Registry,请选择 Artifact Registry -> Artifact Registry Reader 角色。

  8. 将容器映像部署到包含您的 Cloud Run 工作器池的项目。

从其他注册表中部署映像

如需部署未存储在 Artifact Registry 或 Docker Hub 中的公共或私有容器映像,请设置 Artifact Registry 远程代码库

借助 Artifact Registry 远程代码库,您可以执行以下操作:

  • 部署任何公共容器映像,例如 GitHub Container Registry (ghcr.io)。
  • 从需要身份验证的私有代码库(例如 JFrog Artifactory 或 Nexus)部署容器映像。

如果您无法使用 Artifact Registry 远程仓库,可以使用 docker push 将容器映像部署到 Cloud Run,从而暂时拉取容器映像并将其推送到 Artifact Registry。Cloud Run 会在部署期间导入容器映像,之后您可以从 Artifact Registry 中删除映像

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

在具有边车的 Cloud Run 部署中,有一个主工作器池容器以及一个或多个边车容器。边车可以使用 localhost 端口相互通信以及与工作器池容器通信。localhost 端口因您使用的容器而异。

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

您可以通过创建自定义组织政策,要求所有部署都使用特定边车。

使用边车容器部署服务

使用 Google Cloud CLI,按照以下说明将多个容器部署到 Cloud Run 工作器池:

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 beta run worker-pools deploy WORKER_POOL \
     --container WORKER_POOL_CONTAINER_NAME \
     --image='WORKER_POOL_IMAGE' \
     --container SIDECAR_CONTAINER_NAME \
     --image='SIDECAR_IMAGE'

    您需要进行如下替换:

    • WORKER_POOL 替换为要部署到的工作器池的名称。如果省略此参数,系统会提示您输入工作器池名称。
    • WORKER_POOL_CONTAINER_NAME 替换为工作器池容器的名称。
    • IMAGE_URL 替换为对包含工作器池的容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • SIDECAR_CONTAINER_NAME 替换为 Sidecar 容器的名称,例如 sidecar
    • SIDECAR_IMAGE 替换为对边车容器映像的引用。

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

    gcloud beta run worker-pools deploy WORKER_POOL \
      --container CONTAINER_1_NAME \
      --image='WORKER_POOL_IMAGE' \
      --set-env-vars=KEY=VALUE \
      --container SIDECAR_CONTAINER_NAME \
      --image='SIDECAR_IMAGE' \
      --set-env-vars=KEY_N=VALUE_N
  3. 等待部署完成。成功完成后,Cloud Run 会显示一条成功消息。

具有 Sidecar 的部署提供的显著功能

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

如果您的容器依赖于其他容器,则必须在部署中使用健康检查。如果您使用健康检查,Cloud Run 会遵循容器启动顺序,在启动下一个容器之前验证每个容器的健康状况。如果不使用健康检查,Cloud Run 会尝试启动所有容器,即使它们所依赖的容器未在运行或无法启动也是如此。

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

后续步骤

部署新的工作器池后,您可以执行以下操作: