部署容器映像

本页面介绍如何将新服务和新修订版本部署到 Cloud Run(全代管式)。

部署所需的权限

您必须拥有下列角色之一:

  • 所有者
  • 编辑者
  • Cloud Run Admin 和 Service Account User 角色
  • 包含此特定权限列表的任何自定义角色。

支持的 Container Registry 和映像

您可以部署的容器映像没有大小限制。

您可以部署已存储在 Container RegistryArtifact Registry 中的容器映像。仅限使用以下类型的容器映像:

如果您将容器映像存储在其他类型的 Container Registry 中,请按照从不支持的注册表部署映像中的说明进行操作。

部署新的服务

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

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

您可以使用 Cloud Console、gcloud 命令行或从 YAML 配置文件部署容器。

点击相应标签页即可获取有关所选工具的使用说明。

控制台

要部署容器映像,请执行以下操作:

  1. 转到 Cloud Run

  2. 点击创建服务以显示“创建服务”页面

    create-service-image

    在此表单中执行以下操作:

    1. 选择 Cloud Run(全代管式)以部署到全代管式环境。

    2. 选择您想要使用的服务地区

    3. 输入所需的服务名称。服务名称在每个地区和项目或每个集群必须是唯一的。服务名称一旦指定便无法更改,并且在使用 Cloud Run(全代管式)时公开可见。

  3. 点击下一步以继续转到“配置服务的第一个修订版本”页面:

    图片

  4. 在此表单中执行以下操作:

    1. 如果要手动部署容器,请选择从现有容器映像部署一个修订版本
    2. 如果要自动进行持续部署,请选择“从源代码库中持续部署新修订版本”并按照持续部署的说明进行操作。
    3. (可选)点击高级设置,然后点击后续标签页以设置:
  5. 点击下一步,以继续转到“配置此服务的触发方式”页面:

    图片

    1. 根据需要设定表单中的 Ingress 设置。

    2. “身份验证”下,

      • 如果您要创建公共 API 或网站,请选择允许未通过身份验证的调用。选中此复选框后,系统会将 IAM Invoker 角色分配给特殊标识符 allUser。您可以在创建服务后使用 IAM 修改此设置
      • 如果您需要通过身份验证加以保护的安全服务,请选择需要身份验证
  6. 点击创建以将映像部署到 Cloud Run,然后等待部署完成。

  7. 点击显示的网址链接,以打开已部署服务的唯一、稳定的端点。

命令行

要部署容器映像,请执行以下操作:

  1. 运行以下命令:

    gcloud run deploy SERVICE --image IMAGE_URL

    • SERVICE 替换为要部署到的服务的名称。如果服务尚不存在,则此命令会在部署期间创建服务。您可以完全省略此参数,但如果省略它,系统将提示您输入服务名称。
    • IMAGE_URL 替换为对容器映像的引用,例如 gcr.io/myproject/my-image:latest

      如果您要创建公共 API 或网站,则可以使用 --allow-unauthenticated 标志来允许在未通过身份验证的情况下调用服务。此操作会Cloud Run Invoker IAM 角色分配给 allUsers。您还可以指定 --no-allow-unauthenticated 以禁止未经身份验证的调用。如果您省略其中任一标志,则系统会在 deploy 命令运行时提示您确认。

  2. 等待部署完成。成功完成后,系统将显示一条成功消息以及已部署服务的网址。

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

  • gcloud run deploy SERVICE --platform managed --region REGION

YAML

您可以将服务规范存储在 YAML 文件中,然后使用 gcloud 命令行进行部署。

  1. 使用以下内容创建新的 service.yaml 文件:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    注意替换如下内容:

    • SERVICE 替换为您的 Cloud Run 服务的名称
    • IMAGE 替换为容器映像的网址。

    您还可以指定更多配置,例如环境变量或内存限制。

  2. 使用以下命令部署新服务:

    gcloud beta run services replace service.yaml
  3. (可选)如果您想允许对服务进行未经身份验证的访问,请将服务设为公开

Cloud Code

如需使用 Cloud Code 进行部署,请阅读 IntelliJVisual Studio Code 指南。

Terraform

如果您使用 Terraform,则可以使用来自 Google Cloud Platform 提供程序google_cloud_run_service 资源在 Terraform 配置中定义服务。

  1. 使用以下内容创建新的 main.tf 文件:

    provider "google" {
        project = "PROJECT-ID"
    }
    
    resource "google_cloud_run_service" "default" {
        name     = "SERVICE"
        location = "REGION"
    
        metadata {
          annotations = {
            "run.googleapis.com/client-name" = "terraform"
          }
        }
    
        template {
          spec {
            containers {
              image = "gcr.io/PROJECT-ID/IMAGE"
            }
          }
        }
     }
    
     data "google_iam_policy" "noauth" {
       binding {
         role = "roles/run.invoker"
         members = ["allUsers"]
       }
     }
    
     resource "google_cloud_run_service_iam_policy" "noauth" {
       location    = google_cloud_run_service.default.location
       project     = google_cloud_run_service.default.project
       service     = google_cloud_run_service.default.name
    
       policy_data = data.google_iam_policy.noauth.policy_data
    }
    

    注意替换如下内容:

    • PROJECT-ID 替换为 Google Cloud 项目 ID
    • REGION 替换为 Google Cloud 地区
    • SERVICE 替换为您的 Cloud Run 服务的名称
    • IMAGE 替换为容器映像的名称。

    上述配置允许公共访问(相当于 --allow-unauthenticated)。如需将该服务设为不公开,请移除 google_iam_policygoogle_cloud_run_service_iam_policy 节。

  2. 初始化 Terraform:

    terraform init
  3. 应用 Terraform 配置:

    terraform apply

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

Cloud Run 位置

Cloud Run 是地区级的,这意味着运行 Cloud Run 服务的基础架构位于特定地区,并且由 Google 代管,以便在该地区内的所有区域以冗余方式提供。

选择用于运行 Cloud Run 服务的地区时,主要考虑该地区能否满足您的延迟时间、可用性或耐用性要求。通常,您可以选择距离用户最近的地区,但除此之外,您还应该考虑 Cloud Run 服务使用的其他 Google Cloud 产品的位置。跨多个位置使用 Google Cloud 产品可能会影响服务的延迟时间和费用。

Cloud Run 可在以下地区使用:

基于层级 1 价格

  • asia-east1(台湾)
  • asia-northeast1(东京)
  • asia-northeast2(大阪)
  • europe-north1(芬兰)
  • europe-west1(比利时)
  • europe-west4(荷兰)
  • us-central1(爱荷华)
  • us-east1(南卡罗来纳)
  • us-east4(北弗吉尼亚)
  • us-west1(俄勒冈)

基于层级 2 价格

  • asia-east2(香港)
  • asia-northeast3(韩国首尔)
  • asia-southeast1(新加坡)
  • asia-southeast2 (雅加达)
  • asia-south1(印度孟买)
  • australia-southeast1(悉尼)
  • europe-central2(波兰,华沙)
  • europe-west2(英国伦敦)
  • europe-west3(德国法兰克福)
  • europe-west6(瑞士苏黎世)
  • northamerica-northeast1(蒙特利尔)
  • southamerica-east1(巴西圣保罗)
  • us-west2(洛杉矶)
  • us-west3(拉斯维加斯)
  • us-west4(盐湖城)

如果您已创建 Cloud Run 服务,则可以在 Cloud Console 的 Cloud Run 信息中心查看相应的地区。

部署时,Cloud Run 服务代理需要能够访问已部署的容器(默认情况)。

每项服务都有一个唯一的永久性网址,该网址在您向其部署新修订版本时不会随着时间改变。

部署现有服务的新修订版本

您可以使用 Cloud Console、gcloud 命令行或 YAML 配置文件部署新的修订版本。

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

点击相应标签页即可获取有关所选工具的使用说明。

控制台

要部署现有服务的新修订版本,请执行以下操作:

  1. 转到 Cloud Run

  2. 在服务列表中找到要更新的服务,然后点击该服务以打开其详细信息。

  3. 点击修改和部署新修订版本。此时会显示修订版本部署表单:

    图片

  4. 如果需要,请提供要部署的新容器映像的网址。

  5. (可选)使用标签页进行设置:

  6. 如需将所有流量都发送到新修订版本,请选中“立即支持此修订版本”复选框。如需逐步发布新修订版本,请取消选中该复选框:这样在部署中,系统将不会向新修订版本发送任何流量(在部署之后,请按照适用于逐步发布的说明进行操作)。

  7. 点击部署并等待部署完成。

命令行

如需使用命令行,您需要先设置 gcloud 命令行

要部署容器映像,请执行以下操作:

  1. 运行以下命令:

    gcloud run deploy SERVICE --image IMAGE_URL

    • SERVICE 替换为要部署到的服务的名称。您可以完全省略此参数,但如果省略它,系统将提示您输入服务名称。
    • IMAGE_URL 替换为对容器映像的引用,例如 gcr.io/myproject/my-image:latest

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

  2. 等待部署完成。成功完成后,系统将显示一条成功消息以及已部署服务的网址。

YAML

如果您需要下载或查看现有服务的配置,请使用以下命令将结果保存到 YAML 文件:

gcloud run services describe SERVICE --format export > service.yaml

在服务配置 YAML 文件中,根据需要修改任何 spec.template 子特性 (Attribute) 以更新修订版本设置,然后部署新修订版本:

gcloud beta run services replace service.yaml

Cloud Code

如需使用 Cloud Code 部署现有服务的新修订版本,请阅读 IntelliJVisual Studio Code 指南。

Terraform

您需要根据部署新服务示例来设置 Terraform。

  1. 更改配置文件。

  2. 应用 Terraform 配置:

    terraform apply

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

Cloud Run 位置

Cloud Run 是地区级的,这意味着运行 Cloud Run 服务的基础架构位于特定地区,并且由 Google 代管,以便在该地区内的所有区域以冗余方式提供。

选择用于运行 Cloud Run 服务的地区时,主要考虑该地区能否满足您的延迟时间、可用性或耐用性要求。通常,您可以选择距离用户最近的地区,但除此之外,您还应该考虑 Cloud Run 服务使用的其他 Google Cloud 产品的位置。跨多个位置使用 Google Cloud 产品可能会影响服务的延迟时间和费用。

Cloud Run 可在以下地区使用:

基于层级 1 价格

  • asia-east1(台湾)
  • asia-northeast1(东京)
  • asia-northeast2(大阪)
  • europe-north1(芬兰)
  • europe-west1(比利时)
  • europe-west4(荷兰)
  • us-central1(爱荷华)
  • us-east1(南卡罗来纳)
  • us-east4(北弗吉尼亚)
  • us-west1(俄勒冈)

基于层级 2 价格

  • asia-east2(香港)
  • asia-northeast3(韩国首尔)
  • asia-southeast1(新加坡)
  • asia-southeast2 (雅加达)
  • asia-south1(印度孟买)
  • australia-southeast1(悉尼)
  • europe-central2(波兰,华沙)
  • europe-west2(英国伦敦)
  • europe-west3(德国法兰克福)
  • europe-west6(瑞士苏黎世)
  • northamerica-northeast1(蒙特利尔)
  • southamerica-east1(巴西圣保罗)
  • us-west2(洛杉矶)
  • us-west3(拉斯维加斯)
  • us-west4(盐湖城)

如果您已创建 Cloud Run 服务,则可以在 Cloud Console 的 Cloud Run 信息中心查看相应的地区。

从其他 Google Cloud 项目中部署映像

如果您设置了正确的 IAM 权限,则可以从其他 Google Cloud 项目中部署容器映像:

  1. 在 Cloud Console 中,打开 Cloud Run 服务对应的项目。

  2. 转到 IAM 页面

  3. 勾选标有“包括 Google 提供的角色授权”的复选框。

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

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

  6. 转到 IAM 页面

  7. 点击添加以添加新成员。

  8. 新成员文本框中,粘贴您之前复制的服务帐号的电子邮件。

  9. 选择角色下拉列表中,如果您使用的是 Container Registry,请选择 Storage -> Storage Object Viewer 角色。如果您使用的是 Artifact Registry,请选择 Artifact Registry -> Artifact Registry Reader 角色。

  10. 将容器映像部署到您的 Cloud Run 服务所属的项目。

从不支持的注册表部署映像

如果您将容器映像存储在不支持的公共或私有容器注册表中,可以使用 docker push 暂时将它们推送到 Artifact Registry,以便将其部署到 Cloud Run(全代管式)。容器映像在部署时由 Cloud Run(全代管式)导入,因此在部署后,您可以使用 docker image rm 从 Artifact Registry 删除映像。

后续步骤

部署新服务后,您可以执行以下操作:

您可以利用 Cloud Build 触发器来实现 Cloud Run 服务的自动构建和部署: