定义和使用自定义目标类型
本快速入门介绍如何使用 Cloud Deploy 创建自定义目标类型,然后部署到该类型的自定义目标。
在本快速入门中,您将执行以下操作:
创建 Skaffold 配置。
您可以在 Skaffold 配置文件中配置目标的行为。此配置引用了容器映像以及要在这些映像上运行的 shell 命令,这些命令是渲染和部署操作的操作。
定义自定义目标类型,以及引用该类型的目标。
定义 Cloud Deploy 交付流水线。
此流水线仅包含一个阶段,并且仅使用一个目标。在该阶段,您将引用已配置的目标。
创建版本,系统会自动创建发布,从而执行自定义渲染和部署操作。
在此版本和发布过程中,系统会同时运行 Skaffold 配置中定义的渲染和部署操作。
查看自定义操作的结果。这包括上传到 Cloud Storage 的已渲染配置文件、写入该文件的字符串,以及包含操作状态的结果文件。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 确保默认 Compute Engine 服务账号具有足够的权限。
服务账号可能已经拥有必要的权限。针对默认服务账号停用自动角色授予的项目包含这些步骤。
- 首先,添加
clouddeploy.jobRunner
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner"
- 为您的特定运行时添加开发者角色。
-
添加
iam.serviceAccountUser
角色,该角色可提供用于部署到运行时的actAs
权限:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
如果您已安装 Google Cloud CLI,请确保您运行的是最新版本:
gcloud components update
准备 Skaffold 配置
Cloud Deploy 使用 Skaffold 提供要部署的内容的详细信息,以及如何将这些内容部署到您的目标。
在本快速入门中,您将创建一个 skaffold.yaml
文件,用于定义表示自定义目标类型渲染和部署操作的自定义操作。
请注意,本快速入门中提供的自定义操作实际上不会将任何应用部署到运行时。渲染操作和部署操作都会将结果文件上传到 Cloud Storage,以履行 Cloud Deploy 与用户定义的渲染和部署之间的自定义目标合同。
打开一个终端窗口。
创建一个新目录,并导航至该目录。
mkdir custom-target-quickstart cd custom-target-quickstart
创建名为
skaffold.yaml
且包含以下内容的文件:apiVersion: skaffold/v4beta7 kind: Config customActions: - name: custom-render containers: - name: render image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:484e8266c1cfc84b283bc6d4eec1f6b61223115178cce76fb59f77b223f26e8e command: ['/bin/bash'] args: - '-c' - |- echo "Sample manifest rendered content" > manifest.txt gcloud storage cp manifest.txt $CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt echo {\"resultStatus\": \"SUCCEEDED\", \"manifestFile\": \"$CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt\"} > results.json gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json - name: custom-deploy containers: - name: deploy image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:484e8266c1cfc84b283bc6d4eec1f6b61223115178cce76fb59f77b223f26e8e command: ['/bin/bash'] args: - '-c' - |- echo {\"resultStatus\": \"SUCCEEDED\"} > results.json gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
此文件包含
customActions:
stanza,用于定义自定义渲染操作和自定义部署操作。每个自定义操作都引用一个要运行的容器映像,以及要在该容器上运行的命令。如需详细了解此配置文件,请参阅
skaffold.yaml
参考文档。
创建交付流水线、自定义目标类型和目标
您可以在一个文件中或在单独的文件中定义交付流水线、自定义目标类型和目标。在本快速入门中,您将创建一个包含所有这三项内容的单个文件。
在 custom-target-quickstart 目录中,创建一个新文件
clouddeploy.yaml
,其中包含以下内容:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: custom-targets-pipeline serialPipeline: stages: - targetId: sample-env --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: sample-env customTarget: customTargetType: basic-custom-target --- apiVersion: deploy.cloud.google.com/v1 kind: CustomTargetType metadata: name: basic-custom-target customActions: renderAction: custom-render deployAction: custom-deploy
在 Cloud Deploy 服务中注册流水线和目标:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
您现在有了一个交付流水线,其中包含一个目标。这是使用自定义目标类型的目标,并且此流水线不会将应用部署到运行时。
确认您的流水线和目标:
在 Google Cloud 控制台中,导航到 Cloud Deploy 交付流水线页面,以查看可用交付流水线的列表。
此时将显示您刚刚创建的交付流水线,并且目标列会列出了一个目标。
创建版本
版本是表示要部署的更改的中央 Cloud Deploy 资源。交付流水线定义该版本的生命周期。请参阅 Cloud Deploy 服务架构,详细了解该生命周期。
从 custom-target-quickstart
目录运行以下命令,以创建表示要部署的自定义操作的 release
资源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=custom-targets-pipeline
与所有版本一样(除非它们包含 --disable-initial-rollout
),Cloud Deploy 还会自动创建部署资源。并且会执行该发布的所有阶段,包括渲染和部署。
在 Google Cloud 控制台中查看结果
几分钟后,部署即会完成。在这种情况下,由于这两个自定义操作是将字符串回显到文件并上传到 Cloud Storage 的命令,因此不会将任何内容部署到任何目标运行时。
不过,您可以查看该文件以及其中的字符串:
在 Google Cloud 控制台中,导航到 Cloud Deploy 交付流水线页面,以查看您的交付流水线 (
custom-targets-pipeline
)。点击交付流水线的名称 (
custom-targets-pipeline
)。流水线直观显示将显示应用的部署状态。由于流水线中只有一个阶段,因此可视化图表仅显示一个节点。
您的版本列在版本标签页中交付流水线详细信息下。
点击发布版本名称。
系统会显示发布版本详情页面。
点击工件标签页。
在目标制品下,点击查看制品链接。
系统会显示呈现的清单文件。在本例中,该文件是您在
skaffold.yaml
配置文件中定义的自定义渲染操作的输出,其中包含字符串“Sample manifest rendered content”。查找此版本创建的 Cloud Storage 存储分区。
系统会显示存储分区页面,其中显示了为此版本创建的两个存储分区。一个存储桶包含交付流水线配置文件和渲染的
skaffold.yaml
。另一个包含自定义操作配置为创建的输出文件。点击名称以
us-central1.deploy-artifacts
开头的存储桶...点击名称以
custom-targets-pipeline-
开头的文件夹,然后点击test-release-001
文件夹。点击名称为您的发布名称的文件夹,该名称应为
test-release-001-to-sample-env-0001
。点击显示的文件夹(即 UUID),然后点击
custom-output
文件夹。点击
results.json
,然后点击经过身份验证的网址字段中的超链接网址。此文件包含您在
skaffold.yaml
中配置为custom-deploy
操作输出的字符串:
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
删除交付流水线、目标、版本和发布:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
删除 Cloud Deploy 创建的两个 Cloud Storage 存储分区。
恭喜,您已经完成快速入门!