定义和使用自定义目标类型
本快速入门介绍如何使用 Cloud Deploy 创建自定义目标类型,然后部署到该类型的自定义目标。
在本快速入门中,您将执行以下操作:
创建 Skaffold 配置。
您可以在 Skaffold 配置文件中配置目标的行为。此配置会引用容器映像以及要在这些映像上运行的 shell 命令,即执行渲染和部署操作的操作。
定义一个自定义目标类型,以及一个引用该类型的目标。
定义 Cloud Deploy 交付流水线。
此流水线仅包含一个阶段,并且仅使用一个目标。在该阶段,您将引用您配置的目标。
创建版本,系统会自动创建发布,从而执行自定义渲染和部署操作。
在此版本和发布过程中,系统会运行 Skaffold 配置中定义的渲染和部署操作。
查看自定义操作的结果。这包括上传到 Cloud Storage 的渲染配置文件、写入该文件的字符串以及包含操作状态的结果文件。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage API。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage API。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
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:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018 command: ['/bin/bash'] args: - '-c' - |- echo "Sample manifest rendered content" > manifest.txt gsutil cp manifest.txt $CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt echo {\"resultStatus\": \"SUCCEEDED\", \"manifestFile\": \"$CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt\"} > results.json gsutil 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:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018 command: ['/bin/bash'] args: - '-c' - |- echo {\"resultStatus\": \"SUCCEEDED\"} > results.json gsutil cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
此文件包含
customActions:
节,用于定义自定义渲染操作和自定义部署操作。每个自定义操作都会引用要运行的容器映像以及要在该容器上运行的命令。如需详细了解此配置文件,请参阅
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
)。流水线可视化会显示应用的部署状态。由于流水线中只有一个阶段,因此可视化结果仅显示一个节点。
您的版本列在版本标签页中交付流水线详细信息下。
点击相应版本名称。
系统随即会显示发布版本详情页面。
点击工件标签页。
在 Targetartifact 下,点击 VIEW ARTIFACTS 链接。
系统随即会显示呈现的清单文件。在这种情况下,该文件是您在
skaffold.yaml
配置文件中定义的自定义呈现操作的输出,其中包含字符串“Sample manifest render 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 存储分区。
恭喜,您已经完成快速入门!