部署 Cloud Run 服务或作业

本文档介绍了如何部署应用,包括 Cloud Run 服务和 Cloud Run 作业。

借助 Cloud Deploy,您可以将基于容器的工作负载部署到任何 Cloud Run 服务作业。当您将 Cloud Run 服务部署到 Cloud Run 目标时,Cloud Deploy 支持所有功能,但 Cloud Run 作业不支持 Canary 部署。

本文档介绍了您需要完成的三个主要配置,以便部署到 Cloud Run:

限制

  • 每个目标只能部署一个 Cloud Run 服务或作业。

  • 您无法针对 Cloud Run 作业运行Canary 部署

    不过,Cloud Run 服务可以使用 Canary 部署。

准备工作

创建目标配置

您可以在交付流水线 YAML 中配置目标,也可以在单独的文件中配置目标。此外,您还可以在同一文件中配置多个目标。

目标必须在与传送流水线相同的项目和区域中定义。不过,目标部署到的服务或作业可以位于不同的项目和区域,前提是服务账号对这些项目拥有访问权限。

在目标定义中,创建一个 run 诗节,以确定将创建 Cloud Run 服务的位置。

在目标定义中指定 Cloud Run 服务或作业的语法如下所示:

run:
 location: projects/[project_name]/locations/[region_name]

此资源标识符使用以下元素:

  • [project_name] 是将用于创建 Cloud Run 服务或作业的 Google Cloud 项目的名称。

    您需要为每个目标执行此操作。我们建议为每个 Cloud Run 服务或作业使用不同的项目。如果您希望在同一项目中部署多个服务或作业,则需要在 skaffold.yaml 配置文件中使用 Skaffold 配置文件

  • [region_name] 是将创建服务或作业的区域。您的服务或作业可以位于任何Cloud Run 支持的区域

以下是目标配置示例,用于定义要创建的 Cloud Run 服务或作业:

      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
       name: dev
      description: development service
      run:
       location: projects/my-app/locations/us-central1

您可以在 Cloud Deploy 交付流水线定义中定义此目标,也可以单独定义此目标。无论采用哪种方式,您都必须先注册目标平台,然后才能创建用于部署 Cloud Run 服务或作业的版本。

创建 Skaffold 配置

以下是 Cloud Run 部署skaffold.yaml 文件示例

apiVersion: skaffold/v4beta7
kind: Config
metadata: 
  name: cloud-run-application
manifests:
  rawYaml:
  - service.yaml
deploy:
  cloudrun: {}

在此 skaffold.yaml 文件中...

  • manifests.rawYaml 提供 Cloud Run 服务定义的名称。

    在此示例中,service.yaml 是用于定义 Skaffold 将部署的 Cloud Run 服务的文件。此文件名可以是任何名称,但按照惯例,服务的文件名为 service.yaml,作业的文件名为 job.yaml

  • deploy 诗节指定了您希望如何部署清单,具体而言,是指项目和位置。deploy 是必需的。

    我们建议您将 {} 保留为空。Cloud Deploy 会在渲染期间根据目标定义中的项目和位置填充此字段。

    不过,对于本地开发,您可以在此处提供值。不过,无论是否在此处提供值,Cloud Deploy 始终会使用目标定义中的项目和位置。

创建 Cloud Run 服务定义

如需创建 Cloud Run 服务定义,您可以手动创建,也可以从现有服务中复制。本部分将介绍这两种方法。

方案 1:创建新的 Cloud Run service.yaml

service.yaml 用于定义 Cloud Run 服务。创建版本时,Skaffold 会使用此定义部署您的服务。

下面是一个简化示例:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
 name: [SERVICE_NAME]
spec:
 template:
  spec:
   containers:
   - image: [IMAGE_PATH]

其中:

  • [SERVICE_NAME] 是此 Cloud Run 服务的名称。

  • [IMAGE_PATH] 指向您要通过此服务部署的容器映像。

方案 2:使用 Google Cloud 控制台从现有服务中复制 service.yaml

您可以使用 Google Cloud 控制台创建服务,也可以使用现有服务,然后从中复制 service.yaml

如需使用 Google Cloud CLI 获取 service.yaml,请执行以下操作:

gcloud run services describe [service_name] --format=export

如需从 Google Cloud 控制台中获取 service.yaml,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Cloud Run 服务页面。

  2. 选择您要使用的现有服务的定义。

或者,您也可以新建一个,然后选择该维度。选择服务后,系统会显示“Service 详情”页面:

Google Cloud 控制台的“服务详情”页面,其中显示了“YAML”标签页

  1. 选择 YAML 标签页。

  2. 点击修改,然后将 YAML 的内容复制到文件系统中名为 service.yaml 的新文件中,以便 Skaffold 在您创建版本时使用它。

创建 Cloud Run 作业定义

如需部署 Cloud Run 作业定义,您可以手动创建一个,也可以从现有作业中复制一个。本部分将介绍这两种方法。

请注意,作业不一定会在通过 Cloud Deploy 部署后运行。这与服务不同,服务是指在部署后运行的应用。调用作业的方式取决于作业本身。

方案 1:创建新的 Cloud Run job.yaml

job.yaml 用于定义 Cloud Run 作业。创建版本时,Skaffold 会使用此定义来部署作业。

下面是一个简化示例:

apiVersion: run.googleapis.com/v1
kind: Job
metadata:
 name: [JOB_NAME]
spec:
  template:
  spec:
   containers:
   - image: [IMAGE_PATH]

其中:

  • [JOB_NAME] 是此 Cloud Run 作业的名称。

  • [IMAGE_PATH] 指向您要为此作业部署的容器映像。

方案 2:使用 Google Cloud 控制台从现有作业复制 job.yaml

您可以使用 Google Cloud 控制台创建作业,也可以使用现有作业,然后从中复制 job.yaml

如需使用 Google Cloud CLI 获取 job.yaml,请执行以下操作:

gcloud run jobs describe [job_name] --format=export

如需从 Google Cloud 控制台中获取 job.yaml,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Cloud Run 作业页面。

  2. 选择要使用的现有作业的定义。

或者,您也可以新建一个,然后选择该维度。选择作业后,系统会显示“作业详情”页面:

Google Cloud 控制台上的作业详情页面,其中显示了 YAML 标签页

  1. 选择 YAML 标签页。

  2. 点击修改,然后将 YAML 的内容复制到文件系统中名为 job.yaml 的新文件中,以便 Skaffold 在您创建版本时使用该内容。

综合应用

现在,您已经有了 Cloud Run 服务或作业定义、skaffold.yaml 配置和 Cloud Deploy 目标定义,并且已将目标注册为 Cloud Deploy 资源,现在可以调用交付流水线来创建版本,并使其在流水线中定义的目标序列中推进。

使用 Cloud Deploy 将应用部署到 Cloud Run 快速入门介绍了所有这些操作。

不同修订版本中的服务行为

重新部署服务时,新修订版本会基于新部署的 service.yaml。除非新部署的 YAML 中与先前修订版本相同,否则系统不会保留先前修订版本的任何内容。例如,如果上一个修订版本中有配置设置或标签不在新的 YAML 中,那么这些设置或标签也不会出现在新修订版本中。

触发 Cloud Run 作业

部署作业后,您可以按照 Cloud Run 文档中的说明触发作业。

在多个项目中部署 Cloud Run 服务和作业

如果您需要部署位于不同项目中的服务或作业,您的执行服务账号需要有权访问定义这些服务或作业的项目。

如需了解详情,请参阅 Cloud Deploy 执行服务账号Identity and Access Management 角色和权限

后续步骤