快速启动解决方案:在 Kubernetes 上部署电子商务 Web 应用

Last reviewed 2023-08-29 UTC

本指南可帮助您了解、部署和使用在 Kubernetes 上部署电子商务 Web 应用快速启动解决方案。此解决方案演示了如何为一家零售企业构建和运行简单的电子商务应用,以提供一个可公开访问的购物网站。您将了解如何创建一个可通过扩容来处理用量高峰(例如在促销等峰值事件期间)的应用。该应用还可以根据访问者的地理位置管理请求,从而帮助网上商店为分布在不同地理位置的广大客户群提供一致的服务。

应用部署为多个小型服务或微服务,这些服务在 Google Cloud 中由 Google 管理的 Kubernetes 集群上运行。每个服务都会执行特定任务,例如提供 Web 前端或管理购物车。

如果您需要在管理网站时利用 Kubernetes 功能提供的可配置性和灵活性,此解决方案是一个很好的起点。如果您拥有大型工程团队,则类似这样的微服务架构也特别实用,因为它允许不同的团队或开发者分别创建和管理应用的不同部分。如果您的组织不符合上述情况,或者您不确定是否符合,请考虑试用我们的在 Cloud Run 上部署电子商务 Web 应用解决方案。它使用 Cloud Run 部署类似的网上商店应用,不需要 Kubernetes,也不使用微服务。

本文档假定您熟悉基本的云概念,但不一定熟悉 Google Cloud。拥有 Terraform 经验会很有帮助。

Cymbal Shops 简介

此解决方案为虚构的连锁零售店 Cymbal Shops 创建一个网上商店示例应用,访问者可以在网站上浏览该公司的商品,将商品添加到购物车,前往结账页面并购买商品。您可以在部署解决方案后亲自试用,但遗憾的是,您无法真正购买商品。Cymbal Shops 的客户来自美国和欧洲,因此该公司需要一个能够使所有客户体验到相同访问速度的网站解决方案。Cymbal Shops 还经常进行促销,节假日期间购物人数会大大增加,因此该公司要求网站能够应对激增的流量,访问速度不会下降或出现其他问题。此外,该公司还希望不需要为没有实际使用的 Cloud 资源付费。

使用的产品

此解决方案使用以下 Google Cloud 产品:

  • Google Kubernetes Engine (GKE):一个代管式环境,可以使用 Google 基础架构在其中部署、管理和扩缩容器化应用。
  • 多集群 Ingress:Google 托管的一项服务,支持跨集群和区域部署共享的负载均衡资源。

如需了解这些产品的配置方式和交互方式,请查看下一部分。

架构

此解决方案部署一个具有可公开访问的网页界面的电子商务应用。下图展示了此解决方案部署的 Google Cloud 资源的架构:

“在 Kubernetes 上部署电子商务 Web 应用”快速启动解决方案的示意图

请求流程

以下是已部署应用的请求处理流程。流程中的步骤在前面的架构图中进行了编号。

  1. 用户通过浏览器与 Cymbal Shops 网站交互,浏览器向 Google Cloud 负载均衡器发送 HTTP 请求。这是一种位于 Google 网络边缘的负载均衡器,会将流量定向到 Google Cloud 中的适当目的地。
  2. 用户请求被定向到运行应用前端的两个 GKE 集群中的一个。默认情况下,这是距离用户最近的集群:在上图中,距离用户最近的集群在欧洲,因此请求会被定向到该集群。下一部分将详细介绍如何使用多集群 Ingress 服务进行这种配置。
  3. 构成 Cymbal Shops 应用其余部分的一个或多个后端微服务处理请求。
  4. 当用户访问网站时,应用的 cartservice 使用 Redis 数据库存储用户购物车的状态。仅有一个 Redis 数据库,并且部署在美国集群中。

组件和配置

Cymbal Shops 应用在 Google Kubernetes Engine (GKE) 集群上运行。Kubernetes 是一个开源系统,用于自动部署、扩缩和管理容器化应用。应用与其依赖项封装在一起(也称为容器化),并且独立于其环境。Kubernetes 集群是一组用于运行容器的机器,这些机器被称为节点。GKE with Autopilot 是 Google 完全自动化的可扩缩 Kubernetes 服务,集群由 Google Cloud 上的 Compute Engine 虚拟机组成。

Cymbal Shops 解决方案由以下部分组成:

  • 三个 GKE 集群,具体如下所述:
    • 一个集群用于管理应用的多集群 Ingress 服务,称为配置集群。多集群 Ingress 服务让您可以使用应用的单个虚拟 IP 地址在一组指定集群中实现流量负载均衡。
    • 两个位于不同区域的集群用于运行 Cymbal Shops 微服务。每个集群具有相同的 Cymbal Shops 服务,并且在相同的 Kubernetes 命名空间中运行。因此,多集群 Ingress 会将这两个前端服务视为同一个服务,并根据网站访问者的距离选择要将流量发往的集群。多集群 Ingress 还可用于确保仅将流量发送到健康状况良好的集群、在升级时执行逐步发布等等。
  • 所有三个 GKE 集群都启用了 Autopilot。Autopilot 是一项 GKE 功能,可让您创建集群并由 Google 管理集群配置,包括节点、扩缩、安全性和其他预配置设置。对于 Cymbal Shops,这意味着当网站的访问者数量比平常多时,集群可以根据应用的需求自动增加使用的 CPU、内存和存储空间。启用 Autopilot 后,Cymbal Shops 平台管理员无需担心请求(并支付)的 Cloud 资源超出大多数时候实际需要的数量,也不会出现集群的资源不足以应对繁忙时段激增流量的风险。

费用

请参阅在 Kubernetes 上部署电子商务 Web 应用页面,查看根据默认资源位置和预计使用时间估算的每月费用。您可以在 GKE 价格页面详细了解 GKE、Autopilot 和多集群 Ingress 的价格。

部署解决方案

本部分将引导您完成解决方案部署过程。

创建或选择 Google Cloud 项目

部署解决方案时,您需要选择部署资源的 Google Cloud 项目。在决定是使用现有项目还是创建新项目时,请考虑以下因素:

  • 如果您为解决方案创建了项目,那么当您不再需要部署时,可以删除该项目以避免继续计费。如果您使用的是现有项目,则必须删除不再需要的部署。
  • 使用新项目有助于避免与先前预配的资源(例如用于生产工作负载的资源)发生冲突。

如果要在新项目中部署解决方案,请在开始部署之前创建项目。

如需创建项目,请完成以下步骤:

  1. 在 Google Cloud Console 中,转到项目选择器页面。

    转到“项目选择器”

  2. 要开始创建 Google Cloud 项目,请点击创建项目

  3. 为您的项目命名。记下生成的项目 ID。

  4. 根据需要修改其他字段。

  5. 如需创建项目,请点击创建

获取所需的 IAM 权限

如需开始部署过程,您需要下表中列出的 Identity and Access Management (IAM) 权限。如果您拥有计划在其中部署解决方案的项目的 roles/owner 基本角色,则您已经拥有所有必要的权限。如果您没有 roles/owner 角色,请让管理员授予您这些权限(或包含这些权限的角色)。

所需的 IAM 权限 包含所需权限的预定义角色

serviceusage.services.enable

Service Usage Admin
(roles/serviceusage.serviceUsageAdmin)

iam.serviceAccounts.create

Service Account Admin
(roles/iam.serviceAccountAdmin)

resourcemanager.projects.setIamPolicy

Project IAM Admin
(roles/resourcemanager.projectIamAdmin)
config.deployments.create
config.deployments.list
Cloud Infrastructure Manager Admin
(roles/config.admin)

为解决方案创建的服务账号

如果您通过控制台启动部署过程,则 Google 会创建一个服务账号,用于代表您部署解决方案(以及稍后删除部署)。系统会临时为此服务账号分配某些 IAM 权限;也就是说,在解决方案部署和删除操作完成后,会自动撤消这些权限。Google 建议您在删除部署后删除服务账号,如本指南后面部分所述。

查看分配给服务账号的角色

此处列出了这些角色,以防 Google Cloud 项目或组织的管理员需要此信息。

  • roles/container.admin
  • roles/gkehub.editor
  • roles/compute.networkAdmin
  • roles/iam.serviceAccountAdmin
  • roles/iam.serviceAccountUser
  • roles/resourcemanager.projectIamAdmin
  • roles/serviceusage.serviceUsageAdmin

选择部署方法

为了减少您部署此解决方案所需的工作量,GitHub 中提供了 Terraform 配置。Terraform 配置定义了解决方案需要的所有 Google Cloud 资源。

您可以使用以下任一方法来部署解决方案:

  • 通过控制台:如果您要试用采用默认配置的解决方案并了解其工作原理,请使用此方法。Cloud Build 会部署此解决方案需要的所有资源。如果您不再需要部署的解决方案,可以通过控制台将其删除。您在部署解决方案后创建的任何资源都可能需要单独删除。

    如需使用此部署方法,请按照通过控制台进行部署中的说明操作。

  • 使用 Terraform CLI:如果您要自定义解决方案,或者要使用基础架构即代码 (IaC) 方法自动预配和管理资源,请使用此方法。从 GitHub 下载 Terraform 配置,根据需要选择性地自定义代码,然后使用 Terraform CLI 部署解决方案。部署解决方案后,您可以继续使用 Terraform 来管理解决方案。

    如需使用此部署方法,请按照使用 Terraform CLI 进行部署中的说明操作。

通过控制台进行部署

完成以下步骤以部署预配置的解决方案。

  1. 在 Google Cloud 快速起步解决方案目录中,转到在 Kubernetes 上部署电子商务 Web 应用解决方案。

    转到“在 Kubernetes 上部署电子商务 Web 应用”解决方案

  2. 查看页面上提供的信息,例如解决方案的预计费用和预计部署时间。

  3. 准备好开始部署解决方案后,请点击部署

    此时会显示分步交互式指南。

  4. 完成交互式指南中的步骤。

    请记下您输入的部署名称。在稍后删除部署时需要此名称。

    点击部署后,系统会显示解决方案部署页面。此页面的状态字段显示正在部署

  5. 等待解决方案部署。

    如果部署失败,状态字段将显示失败。您可以使用 Cloud Build 日志来诊断错误。如需了解详情,请参阅通过控制台部署时出错

    部署完成后,状态字段将更改为已部署

如果您不再需要此解决方案,可以将部署删除,以免继续为 Google Cloud 资源计费。如需了解详情,请参阅删除部署

继续探索 Cymbal Shops,了解如何测试和探索您的解决方案。

使用 Terraform CLI 进行部署

本部分介绍如何使用 Terraform CLI 自定义解决方案或自动预配和管理解决方案。使用 Terraform CLI 部署的解决方案不会显示在 Google Cloud 控制台的解决方案部署页面中。

如果您不再需要部署,可以使用 Terraform CLI 将其删除,如使用 Terraform CLI 进行删除中所述。

设置 Terraform 客户端

您可以在 Cloud Shell 或本地主机上运行 Terraform。本指南介绍如何在 Cloud Shell 中运行 Terraform,其中预安装了 Terraform 并将其配置为向 Google Cloud 进行身份验证。

GitHub 代码库中提供了此解决方案的 Terraform 代码。

  1. 将 GitHub 代码库克隆到 Cloud Shell。

    在 Cloud Shell 中打开

    系统会显示一条提示,要求您确认将 GitHub 代码库下载到 Cloud Shell。

  2. 点击确认

    Cloud Shell 会在单独的浏览器标签页中启动,而 Terraform 代码会下载到 Cloud Shell 环境的 $HOME/cloudshell_open 目录中。

  3. 在 Cloud Shell 中,检查当前工作目录是否为 $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra。这是包含此解决方案的 Terraform 配置文件的目录。如果您需要切换到该目录,请运行以下命令:

    cd $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra
    
  4. 通过运行以下命令来初始化 Terraform:

    terraform init
    

    等待系统显示以下消息:

    Terraform has been successfully initialized!
    

配置 Terraform 变量

您下载的 Terraform 代码包含可用于根据需要自定义部署的变量。例如,您可以指定 Google Cloud 项目以及要在其中部署解决方案的区域。

  1. 确保当前工作目录为 $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra。如果不是,请转到该目录。

  2. 在同一目录中,创建一个名为 terraform.tfvars 的文本文件。

  3. terraform.tfvars 文件中,复制以下代码段,并为所需的变量设置值。

    • 按照代码段中作为注释提供的说明进行操作。
    • 此代码段仅包含您必须为其设置值的变量。Terraform 配置包括具有默认值的其他变量。如需查看所有变量和默认值,请参阅 $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra 目录中提供的 variables.tf 文件。
    • 确保您在 terraform.tfvars 文件中设置的每个值都与 variables.tf 文件中声明的变量类型匹配。例如,如果为 variables.tf 文件中的变量定义的类型为 bool,则必须将 truefalse 指定为该变量在 terraform.tfvars 文件中的值。
# This is an example of the terraform.tfvars file.
# The values in this file must match the variable types declared in variables.tf.
# The values in this file override any defaults in variables.tf.

# ID of the project in which you want to deploy the solution
project_id = "PROJECT_ID"

如需了解可分配给 project_id 变量的值,请参阅标识项目

验证并查看 Terraform 配置

  1. 确保当前工作目录为 $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra。如果不是,请转到该目录。

  2. 验证 Terraform 配置没有错误:

    terraform validate
    

    如果该命令返回任何错误,请在配置中进行所需的更正,然后再次运行 terraform validate 命令。重复此步骤,直到命令返回以下消息:

    Success! The configuration is valid.
    
  3. 查看配置中定义的资源:

    terraform plan
    
  4. 如果您未按照上文所述创建 terraform.tfvars 文件,则 Terraform 会提示您为没有默认值的变量输入值。输入必需的值。

    terraform plan 命令的输出是在应用配置时 Terraform 预配的资源列表。

    如果要进行任何更改,请修改配置,然后再次运行 terraform validateterraform plan 命令。

预配资源

如果 Terraform 配置中不需要进一步更改,请部署资源。

  1. 确保当前工作目录为 $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra。如果不是,请转到该目录。

  2. 应用 Terraform 配置:

    terraform apply
    
  3. 如果您未按照上文所述创建 terraform.tfvars 文件,则 Terraform 会提示您为没有默认值的变量输入值。输入必需的值。

    Terraform 会显示将创建的资源列表。

  4. 当系统提示您执行操作时,请输入 yes

    Terraform 展示一些显示部署进度的消息。

    如果无法完成部署,则 Terraform 会显示导致失败的错误。查看错误消息,并更新配置以修复错误。然后,再次运行 terraform apply 命令。如需有关排查 Terraform 错误的帮助,请参阅使用 Terraform CLI 部署解决方案时出错

    创建完所有资源后,Terraform 会显示以下消息:

    Apply complete!
    

如果您不再需要此解决方案,可以将部署删除,以免继续为 Google Cloud 资源计费。如需了解详情,请参阅删除部署

继续探索 Cymbal Shops,了解如何测试和探索您的解决方案。

探索 Cymbal Shops

恭喜!您已成功部署 Cymbal Shops 网站。您可以访问 Cymbal Shops 网站并四处浏览,然后在 Google Cloud 控制台中探索解决方案的工作原理。请注意,成功部署应用后,可能需要大约五分钟时间网站才会在提供的地址中显示。

访问 Cymbal Shops 网站

查找 Cymbal Shops 网站的方式取决于您部署解决方案的方式。

控制台部署

如果您通过控制台部署解决方案,则可以直接从解决方案部署页面访问网站。

  • 如果您刚刚部署完解决方案,请点击查看 Web 应用以访问网站。否则,请点击部署的 操作菜单,然后选择查看 Web 应用

Terraform 部署

如果您使用 Terraform CLI 部署了解决方案,请先找到多集群 Ingress 提供的前端的 IP 地址。您可以使用 Google Cloud CLI 从命令行执行此操作(最简单的方法),也可以使用 Google Cloud 控制台。

gcloud

  1. 确保您已安装最新版本的 Google Cloud CLI。我们建议从已安装该工具的 Cloud Shell 运行命令。
  2. 运行以下命令以获取 IP 地址,将 PROJECT_ID 替换为您的 Google Cloud 项目的 ID:

    gcloud compute addresses list \
       --filter="name=('multi-cluster-ingress-ip-address-1')" \
       --project=PROJECT_ID
    
  3. 复制命令返回的地址并粘贴到浏览器中以访问网站。

控制台

  1. 在 Google Cloud 控制台中,前往 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在导航菜单中选择对象浏览器

  3. 对象浏览器列表中,展开 networking.gke.io 部分,然后选择 MultiClusterIngress。您可能需要向下滚动才能找到此部分。

  4. MultiClusterIngress 页面中,选择 frontend-multi-cluster-ingress

  5. frontend-multi-cluster-ingress 详情页面中,找到 IP 地址。点击此网址即可访问网站。

浏览网站

您现在可以像顾客一样与 Cymbal Shops 网站交互,包括浏览商品、将商品添加到购物车,以及以访客身份结账。

探索您的解决方案

如需查看已部署的 Google Cloud 资源及其配置,请进入交互式导览。

开始导览

删除部署

如果不再需要解决方案部署,为避免继续为创建的资源计费,请删除部署。

通过控制台删除

如果您通过控制台部署了解决方案,请按以下流程操作。

  1. 在 Google Cloud 控制台中,转到解决方案部署页面。

    转到“解决方案部署”

  2. 选择您要删除的部署所在的项目。

  3. 找到您要删除的部署。

  4. 点击 操作,然后选择删除

  5. 输入部署的名称,然后点击确认

    状态字段显示正在删除

    如果删除失败,请参阅删除部署时出错中的问题排查指南。

如果您不再需要用于此解决方案的 Google Cloud 项目,则可以删除该项目。如需了解详情,请参阅可选:删除项目

使用 Terraform CLI 进行删除

如果您使用 Terraform CLI 部署了解决方案,请按照以下步骤操作。

  1. 在 Cloud Shell 中,确保当前工作目录为 $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra。如果不是,请转到该目录。

  2. 移除 Terraform 预配的资源:

    terraform destroy
    

    Terraform 会显示将被销毁的资源列表。

  3. 当系统提示您执行操作时,请输入 yes

    Terraform 会显示显示进度的消息。删除所有资源后,Terraform 将显示以下消息:

    Destroy complete!
    

    如果删除失败,请参阅删除部署时出错中的问题排查指南。

如果您不再需要用于此解决方案的 Google Cloud 项目,则可以删除该项目。如需了解详情,请参阅可选:删除项目

可选:删除项目

如果您在新的 Google Cloud 项目中部署了解决方案,但不再需要该项目,请完成以下步骤来将其删除:

  1. 在 Google Cloud 控制台中,进入管理资源页面:

    打开“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在提示符处,输入项目 ID,然后点击关停

如果您决定保留项目,请删除为此解决方案创建的服务账号,如下一部分所述。

可选:删除服务账号

如果删除了用于解决方案的项目,请跳过此部分。

如本指南前面部分所述,当您部署解决方案时,系统代表您创建了一个服务账号。系统为服务账号临时分配了某些 IAM 权限;也就是说,在解决方案的部署和删除操作完成后,系统会自动撤消这些权限,但不会删除服务账号。Google 建议您删除此服务账号。

  • 如果您通过 Google Cloud 控制台部署了解决方案,请进入解决方案部署页面。(如果您已进入该页面,请刷新浏览器。)系统会在后台触发进程来删除服务账号。无需进一步操作。

  • 如果您使用 Terraform CLI 部署了解决方案,请完成以下步骤:

    1. 在 Google Cloud 控制台中,转到服务账号页面。

      转到“服务账号”

    2. 选择您用于解决方案的项目。

    3. 选择要删除的服务账号。

      为解决方案创建的服务账号的电子邮件 ID 采用以下格式:

      goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
      

      电子邮件 ID 包含以下值:

      • DEPLOYMENT_NAME:部署的名称。
      • NNN:随机 3 位数。
      • PROJECT_ID:部署了解决方案的项目的 ID。
    4. 点击删除

排查错误

可以诊断和解决错误的操作取决于部署方法和错误的复杂程度

通过控制台进行部署时发生错误

如果您使用控制台时部署失败,请执行以下操作:

  1. 转到解决方案部署页面。

    如果部署失败,状态字段将显示失败

  2. 查看导致失败的错误的详细信息:

    1. 点击 操作

    2. 选择查看 Cloud Build 日志

  3. 查看 Cloud Build 日志,并采取适当的措施来解决导致失败的问题。

使用 Terraform CLI 进行部署时发生错误

如果在使用 Terraform 时部署失败,terraform apply 命令的输出将包含错误消息,您可以查看这些错误消息以诊断问题。

以下部分中的示例显示了您在使用 Terraform 时可能会遇到的部署错误。

创建功能时出错:资源已存在

如果将此解决方案部署到已配置多集群 Ingress 的项目中,您将看到如下错误:

Error: Error creating Feature: Resource already exists - apply blocked by lifecycle params: &beta.Feature{Name:(*string)(0xc0017d1d00), Labels:map[string]string{}, ResourceState:(*beta.FeatureResourceState)(0xc001b9d890), Spec:(*beta.FeatureSpec)(0xc001792f00), State:(*beta.FeatureState)(0xc001792f50), CreateTime:(*string)(0xc001792fd0), UpdateTime:(*string)(0xc001792ff0), DeleteTime:(*string)(nil), Project:(*string)(0xc0017d1d40), Location:(*string)(0xc0017d1ca0)}.
running tf apply: terraform apply failed: running terraform failed: exit status 1

这是因为此解决方案会将新的配置 GKE 集群部署到所选项目中。一个项目(具体而言,项目的舰队)只能包含一个用于配置多集群 Ingress 的配置集群。如需解决此问题,请移除现有的多集群 Ingress 配置集群,或在新项目中重新开始。

错误:作业:default/kubernetes-manifests-deployer-job 处于失败状态

此解决方案的 Terraform 会部署一个名为 kubernetes-manifests-deployer-job 的 Kubernetes 作业。此 Kubernetes 作业将此解决方案所需的 Kubernetes 资源(Cymbal Shops 微服务、Redis 数据库等)部署到所有三个集群中。

由于此 Kubernetes 作业非常复杂并且要求所有三个集群都准备就绪,因此它可能偶尔会失败,并显示以下错误消息:

kubernetes_job.kubernetes_manifests_deployer_job: Creation errored after 5m8s
...
Error: job: default/kubernetes-manifests-deployer-job is in failed state

如果您收到此错误,则可能的情况是,虽然部署的剩余部分没有成功完成,解决方案的 Google Cloud 基础架构至少有部分已经预配。我们建议您删除项目,以避免为这些资源付费,并在另一个新项目中重试部署。

“API 未启用”错误

如果您创建了一个项目,然后立即尝试在新项目中部署此解决方案,则部署可能会失败,并显示如下错误:

Error: Error creating Network: googleapi: Error 403: Compute Engine API has not
been used in project PROJECT_ID before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/compute.googleapis.com/overview?project=PROJECT_ID
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.

如果发生此错误,请等待几分钟,然后再次运行 terraform apply 命令。

删除部署时出错

在某些情况下,尝试删除部署可能会失败:

  • 通过控制台部署解决方案后,如果您更改此解决方案预配的任何资源,然后尝试删除部署,则删除操作可能会失败。解决方案部署页面上的状态字段会显示失败,并且 Cloud Build 日志会显示错误原因。
  • 使用 Terraform CLI 部署解决方案后,如果您使用非 Terraform 界面(例如控制台)更改任何资源,然后尝试删除部署,则删除操作可能会失败。terraform destroy 命令输出中的消息会显示错误的原因。

查看错误日志和消息,找出并删除导致错误的资源,然后再次尝试删除部署。

如果基于控制台的部署未删除,并且您无法使用 Cloud Build 日志诊断错误,则可以使用 Terraform CLI 删除该部署,如下一部分所述。

使用 Terraform CLI 删除基于控制台的部署

本部分介绍在尝试通过控制台删除基于控制台的部署出错时如何删除该部署。在此方法中,您可以下载要删除的部署的 Terraform 配置,然后使用 Terraform CLI 删除部署。

  1. 确定部署的 Terraform 代码、日志和其他数据的存储区域。此区域可能与您在部署解决方案时选择的区域不同。

    1. 在 Google Cloud 控制台中,转到解决方案部署页面。

      转到“解决方案部署”

    2. 选择您要删除的部署所在的项目。

    3. 在部署列表中,找到要删除的部署所在的行。

    4. 点击 查看所有行内容

    5. 位置列中,记下第二个位置,如以下示例中突出显示部分所示:

      部署代码、日志和其他工件的位置。

  2. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  3. 为要删除的部署的项目 ID、区域和名称创建环境变量:

    export REGION="REGION"
    export PROJECT_ID="PROJECT_ID"
    export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
    

    在这些命令中,替换以下内容:

    • REGION:您先前在此过程中记下的位置。
    • PROJECT_ID:您在其中部署解决方案的项目的 ID。
    • DEPLOYMENT_NAME:您要删除的部署的名称。
  4. 获取您要删除的最新修订版本部署的 ID:

    export REVISION_ID=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .latestRevision -r)
        echo $REVISION_ID
    

    输出类似于以下内容:

    projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
    
  5. 获取该部署的 Terraform 配置的 Cloud Storage 位置:

    export CONTENT_PATH=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/${REVISION_ID}" \
        | jq .applyResults.content -r)
        echo $CONTENT_PATH
    

    以下是此命令的输出示例:

    gs://PROJECT_ID-REGION-blueprint-config/DEPLOYMENT_NAME/r-0/apply_results/content
    
  6. 将 Terraform 配置从 Cloud Storage 下载到 Cloud Shell:

    gsutil cp -r $CONTENT_PATH $HOME
    cd $HOME/content/infra
    

    等到系统显示 Operation completed 消息,如以下示例所示:

    Operation completed over 45 objects/268.5 KiB
    
  7. 初始化 Terraform:

    terraform init
    

    等待系统显示以下消息:

    Terraform has been successfully initialized!
    
  8. 移除已部署的资源:

    terraform destroy
    

    Terraform 会显示将被销毁的资源列表。

    如果显示的警告与未声明变量有关,请忽略这些警告。

  9. 当系统提示您执行操作时,请输入 yes

    Terraform 会显示显示进度的消息。删除所有资源后,Terraform 将显示以下消息:

    Destroy complete!
    
  10. 删除部署工件:

    curl -X DELETE \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}?force=true&delete_policy=abandon"
    
  11. 等待几秒钟,然后验证部署工件是否已删除:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .error.message
    

    如果输出显示 null,请等待几秒钟,然后再次运行该命令。

    删除部署工件后,系统会显示一条如以下示例所示的消息:

    Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
    

提交反馈

快速起步解决方案仅供参考,并非官方支持的产品。Google 可能会在不事先通知的情况下更改或移除解决方案。

如需排查错误,请查看 Cloud Build 日志和 Terraform 输出。

如需提交反馈,请执行以下操作:

  • 对于文档、控制台教程或解决方案,请使用页面上的发送反馈按钮。
  • 对于未经修改的 Terraform 代码,请在 GitHub 代码库中创建问题。 GitHub 问题会尽量得到查看,且不适用于一般使用问题。
  • 如有关于解决方案中所使用产品的问题,请与 Cloud Customer Care 联系。

    我们还建议您查看此解决方案的 GitHub 代码库中的问题列表,其中包括待解决和已解决的问题。

后续步骤