本页面介绍如何将容器映像部署到新的 Cloud Run 服务或现有 Cloud Run 服务的新修订版本。
部署所需的权限
您必须拥有下列角色之一:
- 所有者
- 编辑者
- Cloud Run Admin 和 Service Account User 角色
- 包含此特定权限列表的任何自定义角色。
支持的 Container Registry 和映像
您可以使用已存储在 Container Registry 或 Artifact Registry 中的容器映像。Google 建议使用 Artifact Registry,而不是 Container Registry。
您只能使用以下类型的容器映像:
- 存储在与要在其中创建作业或服务的同一项目中的容器映像。
- 来自其他 Google Cloud 项目的容器映像(前提是已设置正确的 IAM 权限)。
- 来自 Container Registry 或 Artifact Registry 的公共容器映像。
如果您将容器映像存储在其他类型的 Container Registry 中,请按照从不支持的注册表部署映像中的说明进行操作。
部署新的服务
您可以使用标记(例如 us-docker.pkg.dev/my-project/container/my-image:latest
)或确切摘要(例如 us-docker.pkg.dev/my-project/container/my-image@sha256:41f34ab970ee...
)指定容器映像。
首次部署到服务时会创建第一个修订版本。请注意,修订版本是不可变的。如果使用容器映像标记进行部署,则该标记会被解析为摘要,并且修订版本将始终提供此特定摘要。
您可以使用 Google Cloud 控制台、gcloud
命令行或 YAML 配置文件部署容器。
点击相应标签页即可获取有关所选工具的使用说明。
控制台
要部署容器映像,请执行以下操作:
点击创建服务,以显示“创建服务”表单。
在该表单中选择部署选项:
如果您要手动部署容器,请选择从现有容器映像部署一个修订版本并指定容器映像。
如果要自动进行持续部署,请选择“从源代码库中持续部署新修订版本”并按照持续部署的说明进行操作。
输入所需的服务名称。服务名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。服务名称一旦指定便无法更改,并且公开显示。
根据需要设置 CPU 分配和价格。
根据需要设定表单中的 Ingress 设置。
在“身份验证”下,
- 如果您要创建公共 API 或网站,请选择允许未通过身份验证的调用。选中此复选框后,系统会将 IAM Invoker 角色分配给特殊标识符
allUser
。您可以在创建服务后使用 IAM 修改此设置。 - 如果您需要通过身份验证加以保护的安全服务,请选择需要身份验证。
- 如果您要创建公共 API 或网站,请选择允许未通过身份验证的调用。选中此复选框后,系统会将 IAM Invoker 角色分配给特殊标识符
点击容器、连接、安全性以在相应的标签页中设置其他可选设置:
完成服务配置后,请点击创建以将映像部署到 Cloud Run,然后等待部署完成。
点击显示的网址链接,以打开已部署服务的唯一、稳定的端点。
命令行
要部署容器映像,请执行以下操作:
运行以下命令:
gcloud run deploy SERVICE --image IMAGE_URL
- 将 SERVICE 替换为要部署到的服务的名称。服务名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。如果服务尚不存在,则此命令会在部署期间创建服务。您可以完全省略此参数,但如果省略它,系统将提示您输入服务名称。
将 IMAGE_URL 替换为对容器映像的引用,例如
us-docker.pkg.dev/cloudrun/container/hello:latest
。请注意,如果您未提供--image
标志,部署命令将尝试从源代码进行部署。如果您要创建公共 API 或网站,则可以使用
--allow-unauthenticated
标志来允许在未通过身份验证的情况下调用服务。此操作会将 Cloud Run Invoker IAM 角色分配给allUsers
。您还可以指定--no-allow-unauthenticated
以禁止未经身份验证的调用。如果您省略其中任一标志,则系统会在deploy
命令运行时提示您确认。
等待部署完成。成功完成后,系统将显示一条成功消息以及已部署服务的网址。
请注意,如需将映像部署到其他位置,而不部署到通过 run/region
gcloud
属性设置的位置,请使用以下命令:
gcloud run deploy SERVICE --region REGION
YAML
您可以将服务规范存储在 YAML
文件中,然后使用 gcloud CLI 进行部署。
使用以下内容创建新的
service.yaml
文件:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE
替换
- 将 SERVICE 替换为您的 Cloud Run 服务的名称。 服务名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。
- 将 IMAGE 替换为容器映像的网址。
您还可以指定更多配置,例如环境变量或内存限制。
使用以下命令部署新服务:
gcloud run services replace service.yaml
(可选)如果您想允许对服务进行未经身份验证的访问,请将服务设为公开。
Cloud Code
如需使用 Cloud Code 进行部署,请阅读 IntelliJ 和 Visual Studio Code 指南。
Terraform
如果您使用 Terraform,则可以使用来自 Google Cloud Platform 提供程序的 google_cloud_run_service
资源在 Terraform 配置中定义服务。
使用以下内容创建新的
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 = "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 服务的名称。 服务名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。
- 将 IMAGE 替换为容器映像的网址。
上述配置允许公共访问(相当于
--allow-unauthenticated
)。如需将该服务设为不公开,请移除google_iam_policy
和google_cloud_run_service_iam_policy
节。初始化 Terraform:
terraform init
应用 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-southwest1
(马德里)二氧化碳排放量低
europe-west1
(比利时)二氧化碳排放量低
europe-west4
(荷兰)europe-west8
(米兰)europe-west9
(巴黎)二氧化碳排放量低
me-west1
(特拉维夫)us-central1
(爱荷华)二氧化碳排放量低
us-east1
(南卡罗来纳)us-east4
(北弗吉尼亚)us-east5
(哥伦布)us-south1
(达拉斯)us-west1
(俄勒冈)二氧化碳排放量低
基于层级 2 价格
asia-east2
(香港)asia-northeast3
(韩国首尔)asia-southeast1
(新加坡)asia-southeast2
(雅加达)asia-south1
(印度孟买)asia-south2
(印度德里)australia-southeast1
(悉尼)australia-southeast2
(墨尔本)europe-central2
(波兰,华沙)europe-west2
(英国伦敦)europe-west3
(德国法兰克福)europe-west6
(瑞士苏黎世)二氧化碳排放量低
northamerica-northeast1
(蒙特利尔)二氧化碳排放量低
northamerica-northeast2
(多伦多)二氧化碳排放量低
southamerica-east1
(巴西圣保罗)二氧化碳排放量低
southamerica-west1
(智利圣地亚哥)us-west2
(洛杉矶)us-west3
(盐湖城)us-west4
(拉斯维加斯)
如果您已创建 Cloud Run 服务,则可以在 Google Cloud 控制台中的 Cloud Run 信息中心内查看区域。
部署时,Cloud Run 服务代理需要能够访问已部署的容器(默认情况)。
每项服务都有一个唯一的永久性网址,该网址在您向其部署新修订版本时不会随着时间改变。
部署现有服务的新修订版本
您可以使用 Google Cloud 控制台、gcloud
命令行或 YAML 配置文件部署新的修订版本。
请注意,更改任何配置设置都会导致新修订版本的创建,即使容器映像没有变化也是如此。创建的每个修订版本都是不可变的。
点击相应标签页即可获取有关所选工具的使用说明。
控制台
要部署现有服务的新修订版本,请执行以下操作:
在服务列表中找到要更新的服务,然后点击该服务以打开其详细信息。
点击修改和部署新的修订版本以显示修订版本部署表单。
如需将所有流量都发送到新修订版本,请选中“立即支持此修订版本”复选框。如需逐步发布新修订版本,请取消选中该复选框:这样在部署中,系统将不会向新修订版本发送任何流量(在部署之后,请按照适用于逐步发布的说明进行操作)。
点击部署并等待部署完成。
命令行
如需使用命令行,您需要先设置 gcloud CLI。
要部署容器映像,请执行以下操作:
运行以下命令:
gcloud run deploy SERVICE --image IMAGE_URL
- 将 SERVICE 替换为要部署到的服务的名称。您可以完全省略此参数,但如果省略它,系统将提示您输入服务名称。
将 IMAGE_URL 替换为对容器映像的引用,例如
us-docker.pkg.dev/cloudrun/container/hello:latest
。系统会自动为新修订版本分配后缀。如果您要提供自己的修订版本后缀,请使用 gcloud CLI 参数 --revision-suffix。
等待部署完成。成功完成后,系统将显示一条成功消息以及已部署服务的网址。
YAML
如果您需要下载或查看现有服务的配置,请使用以下命令将结果保存到 YAML 文件:
gcloud run services describe SERVICE --format export > service.yaml
在服务配置 YAML 文件中,根据需要修改任何 spec.template
子特性 (Attribute) 以更新修订版本设置,然后部署新修订版本:
gcloud run services replace service.yaml
Cloud Code
如需使用 Cloud Code 部署现有服务的新修订版本,请阅读 IntelliJ 和 Visual Studio Code 指南。
Terraform
您需要根据部署新服务示例来设置 Terraform。
更改配置文件。
应用 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-southwest1
(马德里)二氧化碳排放量低
europe-west1
(比利时)二氧化碳排放量低
europe-west4
(荷兰)europe-west8
(米兰)europe-west9
(巴黎)二氧化碳排放量低
me-west1
(特拉维夫)us-central1
(爱荷华)二氧化碳排放量低
us-east1
(南卡罗来纳)us-east4
(北弗吉尼亚)us-east5
(哥伦布)us-south1
(达拉斯)us-west1
(俄勒冈)二氧化碳排放量低
基于层级 2 价格
asia-east2
(香港)asia-northeast3
(韩国首尔)asia-southeast1
(新加坡)asia-southeast2
(雅加达)asia-south1
(印度孟买)asia-south2
(印度德里)australia-southeast1
(悉尼)australia-southeast2
(墨尔本)europe-central2
(波兰,华沙)europe-west2
(英国伦敦)europe-west3
(德国法兰克福)europe-west6
(瑞士苏黎世)二氧化碳排放量低
northamerica-northeast1
(蒙特利尔)二氧化碳排放量低
northamerica-northeast2
(多伦多)二氧化碳排放量低
southamerica-east1
(巴西圣保罗)二氧化碳排放量低
southamerica-west1
(智利圣地亚哥)us-west2
(洛杉矶)us-west3
(盐湖城)us-west4
(拉斯维加斯)
如果您已创建 Cloud Run 服务,则可以在 Google Cloud 控制台中的 Cloud Run 信息中心内查看区域。
从其他 Google Cloud 项目中部署映像
如果您设置了正确的 IAM 权限,则可以从其他 Google Cloud 项目中部署容器映像:
在 Google Cloud 控制台中,打开 Cloud Run 服务对应的项目。
勾选标有“包括 Google 提供的角色授权”的复选框。
复制 Cloud Run 服务代理的电子邮件。该电子邮件的后缀为 @serverless-robot-prod.iam.gserviceaccount.com
打开您要使用的容器注册表所属的项目。
点击添加以添加新的主帐号。
在新的主帐号文本框中,粘贴您之前复制的服务帐号的电子邮件。
在选择角色下拉列表中,如果您使用的是 Container Registry,请选择 Storage -> Storage Object Viewer 角色。如果您使用的是 Artifact Registry,请选择 Artifact Registry -> Artifact Registry Reader 角色。
将容器映像部署到您的 Cloud Run 服务所属的项目。
从不支持的注册表部署映像
如果您将容器映像存储在不支持的公共或私有容器注册表中,可以使用 docker push
暂时将它们推送到 Artifact Registry,以便将其部署到 Cloud Run。容器映像在部署时由 Cloud Run 导入,因此在部署后,您可以从 Artifact Registry 删除映像。
后续步骤
部署新服务后,您可以执行以下操作:
- 逐步发布、回滚修订版本、流量迁移
- 查看服务日志
- 监控服务性能
- 设置内存限制
- 设置环境变量
- 更改服务并发设置
- 管理服务
- 管理服务修订版本
- 仅使用 Binary Authorization 部署可信映像(预览)
您可以利用 Cloud Build 触发器来实现 Cloud Run 服务的自动构建和部署:
您还可以使用 Google Cloud Deploy 设置持续交付流水线,以将 Cloud Run 服务部署到多个环境: