使用 Cloud Deploy 将应用部署到 GKE
本页面介绍如何使用 Cloud Deploy 将名为 nginx
的示例应用映像传送到两个 Google Kubernetes Engine 集群的序列。
在本快速入门中,您将执行以下操作:
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
启用 Cloud Deploy, Cloud Build, GKE, and Cloud Storage API。
- Install the Google Cloud CLI.
-
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.
-
启用 Cloud Deploy, Cloud Build, GKE, and Cloud Storage API。
- Install the Google Cloud CLI.
-
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"
- 添加 Kubernetes 开发者权限:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer"
如果您在添加其中任一角色时遇到问题,请与您的项目管理员联系。
-
添加
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 Kubernetes Engine 集群
使用默认设置创建两个集群 qsdev
和 qsprod
。集群的 Kubernetes API 端点必须可通过公共互联网访问。默认情况下,GKE 集群可从外部访问。
gcloud container clusters create-auto quickstart-cluster-qsdev --project=PROJECT_ID --region=us-central1 && gcloud container clusters create-auto quickstart-cluster-qsprod --project=PROJECT_ID --region=us-central1
准备 Skaffold 配置和 Kubernetes 清单
Cloud Deploy 使用 Skaffold 提供有关要部署的内容以及如何针对您的各个目标进行正确部署的详细信息。
在本快速入门中,您将创建一个 skaffold.yaml
文件,以标识要用于部署示例应用的 Kubernetes 清单。
打开一个终端窗口。
创建名为
deploy-gke-quickstart
的新目录并导航至该目录。mkdir deploy-gke-quickstart cd deploy-gke-quickstart
创建名为
skaffold.yaml
且包含以下内容的文件:apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - k8s-* deploy: kubectl: {}
此文件是最低的 Skaffold 配置,用于标识您的清单。在本快速入门中,您需要创建该文件。但是,您也可以让 Cloud Deploy 为简单的非生产应用创建一个帐号。
如需详细了解此文件,请参阅
skaffold.yaml
参考文档。创建一个名为
k8s-pod.yaml
的文件,其中包含以下内容:apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: nginx image: my-app-image
此文件是一个简单的 Kubernetes 清单,会应用于集群以部署应用。
创建交付流水线和目标
您可以在一个文件中或在单独的文件中定义流水线和目标。在本快速入门中,您将创建一个文件。
在
deploy-gke-quickstart
目录中,创建包含以下内容的新文件clouddeploy.yaml
:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-gke-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: qsdev profiles: [] - targetId: qsprod profiles: [] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsdev description: development cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsdev --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod description: production cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod
向 Cloud Deploy 服务注册流水线和目标:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
现在,您已经有了包含目标的流水线,可以将应用部署到第一个目标了。
确认您的流水线和目标:
在 Google Cloud 控制台中,前往 Cloud Deploy 交付流水线页面,以查看可用交付流水线列表。
此时将显示您刚刚创建的交付流水线,并且目标列会列出了两个目标。
创建版本
版本是 Cloud Deploy 的中心资源,代表要部署的更改。交付流水线定义该版本的生命周期。如需详细了解该生命周期,请参阅 Cloud Deploy 服务架构。
从 deploy-gke-quickstart
目录运行以下命令,以创建表示要部署的容器映像的 release
资源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-gke-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
与所有版本一样(除非它们包含 --disable-initial-rollout
),Cloud Deploy 也会自动创建发布资源。应用会自动部署到该过程中的第一个目标中。
提升版本
在交付流水线页面中,点击
my-gke-demo-app-1
流水线。交付流水线详情页面显示交付流水线进展的图形表示。在本示例中,它显示版本已部署到
qsdev
目标。在交付流水线直观显示中的第一个目标上,点击提升。
此时将显示提升版本对话框。它会显示您要提升到的目标的详细信息。
点击提升。
该版本现已加入队列以部署到
qsprod
。部署完成后,交付流水线直观显示会将它显示为已部署:
在 Google Cloud 控制台中查看结果
在 Google Cloud 控制台中,前往 Cloud Deploy 交付流水线页面,以查看您的 my-gke-demo-app-1 交付流水线。
点击交付流水线的名称“my-gke-demo-app-1”。
流水线直观显示将显示应用在流水线中进展。
您的版本列在版本标签页中交付流水线详细信息下。
点击版本名称
test-release-001
。您的发布会显示在发布下。您可以点击发布以查看其详细信息,包括部署日志。
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
删除
qsdev
集群:gcloud container clusters delete quickstart-cluster-qsdev --region=us-central1 --project=PROJECT_ID
删除
qsprod
集群:gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
删除交付流水线、目标、版本和发布:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
删除 Cloud Deploy 创建的 Cloud Storage 存储分区。
一个以
_clouddeploy
结尾,另一个是[region].deploy-artifacts.[project].appspot.com
。
恭喜,您已经完成快速入门!