将工作器池部署到 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 控制台、Google Cloud CLI 或 Terraform 进行操作。

控制台

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

    转到 Cloud Run

  2. 从菜单中选择工作器池,然后点击部署容器以显示创建工作器池表单。

    1. 在该表单中,指定容器映像。

    2. 输入工作器池名称。工作器池名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。不能与项目中的现有服务名称相同。工作池名称一旦指定便无法更改,并且公开显示。

    3. 选择您希望工作器所在的区域。区域选择器会显示价格层级,并突出显示碳影响最低的区域。

    4. 扩缩下,指定工作器池的实例数。

  3. 点击容器、卷、网络、安全性以在相应的标签页中设置其他可选设置:

  4. 完成工作器池配置后,请点击创建以将映像部署到 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. 如需部署工作器池容器映像,请执行以下操作:

    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
  3. Terraform

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

    resource "google_cloud_run_v2_worker_pool" "default" {
      name     = "WORKER_POOL"
      location = "REGION"
      launch_stage = "BETA"
    
      template {
        containers {
          image = "IMAGE_URL"
        }
      }
    }
    

    替换以下内容:

    • WORKER_POOL:工作器池的名称。
    • REGION: Google Cloud 区域,例如 europe-west1
    • IMAGE_URL:对包含工作器池的容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest

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 导入。只要容器映像的副本由修订版本使用,Cloud Run 就会保留该副本。

按照以下说明,使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 进行操作:

控制台

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

    转到 Cloud Run

  2. 从菜单中选择工作器池,选择要更新的工作器池,然后点击修改和部署新的修订版本以显示部署工作器池修订版本表单。

    1. 如果需要,请指定要部署的新容器映像的网址。

    2. 根据需要配置容器

    3. 如果需要,请更新工作器池的实例数。

  3. 如果需要,请点击容器、卷、网络、安全性以在相应的标签页中设置其他可选设置:

  4. 完成工作池更新后,点击部署

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 会显示一条成功消息以及有关已部署工作器池的修订版本信息。

  3. Terraform

    确保您已按照部署新工作器池示例中的说明设置了 Terraform。

    1. 更改配置文件。

    2. 应用 Terraform 配置:

      terraform apply

      输入 yes,确认您要应用所述操作。

从其他 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 或 Terraform 将多个容器部署到 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_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 会显示一条成功消息。

  4. Terraform

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

    resource "google_cloud_run_v2_worker_pool" "default" {
      name     = "WORKER_POOL"
      location = "REGION"
      launch_stage = "BETA"
    
      template {
        containers {
          name = "CONTAINER_NAME"
          image = "IMAGE_URL"
        }
        containers {
          name = "SIDECAR_CONTAINER_NAME"
          image = "SIDECAR_IMAGE_URL"
        }
      }
    }
    

    替换以下内容:

    • WORKER_POOL:工作器池的名称。
    • REGION: Google Cloud 区域,例如 europe-west1
    • CONTAINER_NAME:容器的名称。
    • IMAGE_URL:对包含工作器池的容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • SIDECAR_CONTAINER_NAME:边车容器的名称。
    • SIDECAR_IMAGE_URL:对边车容器映像的引用。

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

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

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

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

后续步骤

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