本指南可協助您瞭解、部署及使用「部署在 Kubernetes 上的電子商務網頁應用程式」快速入門解決方案。這個解決方案將示範如何為零售機構建構及執行電子商務應用程式,並提供公開顯示的商店網站。本課程將說明如何建立可因應使用量激增 (例如在特賣等高峰活動期間) 的應用程式,並根據訪客所在位置管理要求,協助網路商店為地理分散的顧客提供一致的服務。
應用程式會部署為多個小型服務 (或「微服務」),在 Google Cloud中由 Google 管理的 Kubernetes 叢集執行。每項服務都會執行特定工作,例如提供網頁前端或管理購物車。
如果您需要在管理網站時使用 Kubernetes 功能提供的可設定性和彈性,這個解決方案就是不錯的起點。如果您擁有較大的工程團隊,這類微服務架構也特別實用,因為這類架構可讓不同團隊或開發人員分別建立及管理應用程式的不同部分。如果這不符合貴機構的需求,或您不確定是否適用,不妨試試我們的部署於 Cloud Run 的電子商務網頁應用程式解決方案。它使用 Cloud Run 部署類似的網路商店應用程式,不需要 Kubernetes,也不使用微服務。
本文假設您熟悉雲端的基本概念,但不一定是 Google Cloud。具備 Terraform 使用經驗會有所幫助。
關於 Cymbal Shops
這個解決方案中使用的應用程式,是虛構連鎖零售商店 Cymbal Shops 的示範線上商店,網站可讓訪客瀏覽公司產品、將產品加入購物車、前往結帳頁面,以及購買產品。部署解決方案後,您可以親自試用 (但很遺憾,您無法實際購買任何產品)。Cymbal Shops 的客戶遍及美國和歐洲,因此他們需要一個網站解決方案,確保所有訪客都能享有相同的速度。Cymbal Shops 經常推出特惠,並在節慶期間吸引許多購物者,因此他們需要的網站必須能夠應付流量激增,且不會發生速度變慢或其他問題,也不必花錢購買實際不需要的雲端資源。
使用的產品
這個解決方案使用下列 Google Cloud 產品:
- Google Kubernetes Engine (GKE):代管環境,可透過 Google 基礎架構部署、管理容器化應用程式並調度資源。
- 多叢集 Ingress:這項由 Google 託管的服務,可在不同叢集和區域中部署共用的負載平衡資源。
如要瞭解這些產品的設定方式和互動方式,請參閱下一節。
架構
這項解決方案會部署具有公開網頁介面的電子商務應用程式。下圖顯示解決方案部署的 Google Cloud資源架構:
要求流程
以下是已部署應用程式的要求處理流程。流程中的步驟會編號,如上方架構圖所示。
- 使用者在瀏覽器中與 Cymbal Shops 網站互動,瀏覽器將 HTTP 要求傳送至 Google Cloud 負載平衡器。這個負載平衡器位於 Google 網路邊緣,會將流量導向 Google Cloud內的���������的地。
- 應用程式前端會在兩個 GKE 叢集內運作,而使用者要求會導向至其中之一。根據預設,這會是距離使用者最近的叢集:在上圖中,最靠近使用者的叢集位於歐洲,因此要求便會傳送至歐洲。您將在下一節中進一步瞭解如何使用多叢集 Ingress 服務設定這項功能。
- 要求會由一或多項後端微服務處理,這類微服務構成了 Cymbal Shops 應用程式的其餘部分。
- 應用程式的
cartservice
會使用 Redis 資料庫,儲存使用者造訪網站時的購物車狀態。美國叢集只會部署一個 Redis 資料庫。
元件和設定
Cymbal Shops 應用程式會在 Google Kubernetes Engine (GKE) 叢集上執行。Kubernetes 是開放原始碼系統,可自動部署、調度資源及管理容器化應用程式,其中應用程式會與其依附元件一起封裝 (或容器化),以不受環境影響的方式進行。Kubernetes 叢集是一組機器 (稱為節點),用於執行容器。GKE 搭配 Autopilot 是 Google 推出的高擴充性全自動 Kubernetes 服務,叢集由 Google Cloud上的 Compute Engine 虛擬機器組成。
Cymbal Shops 解決方案包含下列元件:
- 三個 GKE 叢集,如下所示:
- 一個叢集 (稱為「設定叢集」),用於管理應用程式的多叢集 Ingress 服務。多叢集 Ingress 服務可讓您為應用程式提供單一虛擬 IP 位址,並在指定的叢集組中負載平衡流量。
- 位於不同地區的兩個叢集,用於執行 Cymbal Shops 微服務。每個叢集都提供相同的 Cymbal Shops 服務,並在相同的 Kubernetes 命名空間中執行。這可讓 Multi Cluster Ingress 將兩個前端服務視為相同服務,並根據網站訪客的距離選擇要將流量傳送至哪個叢集。您也可以使用多叢集 Ingress,確保流量只會傳送至健康的叢集,並在升級時逐步推出。
- 所有三個 GKE 叢集都已啟用 Autopilot。Autopilot 是 GKE 的一項功能,可讓您建立叢集,讓 Google 管理您的叢集設定,包括節點、資源調度、安全性和其他預先設定。以 Cymbal Shops 為例,如果網站的訪客人數比平常多,叢集就會根據應用程式需求,自動調高 CPU、記憶體和儲存空間的用量。啟用 Autopilot 後,Cymbal Shops 平台管理員���不必擔心要求 (並支付) 比實際需要更多的雲端資源,或是叢集資源不足以應付繁忙日流量增加的風險。
費用
如要瞭解根據預設資源位置和預估使用時間計算出的月費,請參閱「部署於 Kubernetes 的電子商務網頁應用程式」頁面。如要進一步瞭解 GKE、Autopilot 和多叢集 Ingress 的定價,請前往 GKE 定價頁面。
事前準備
如要部署這項解決方案,您必須先具備 Google Cloud 專案和部分 IAM 權限。
建立或選擇 Google Cloud 專案
部署解決方案時,您會選擇部署資源的 Google Cloud 專案。您���以建立新專案,也可以使用現有專案進行部署。
如要建立新專案,請在開始部署前建立。使用新專案有助於避免與先前佈建的資源發生衝突,例如用於實際工作負載的資源。
如要建立專案,請完成下列步驟:
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
Click Create.
取得必要的 IAM 權限
如要開始部署程序,您必須具備下表所列的 Identity and Access Management (IAM) 權限。
如果您為這個解決方案建立了新專案,則您在該專案中擁有 roles/owner
「基本角色」,並具備所有必要權限。如果您沒有 roles/owner
角色,請要求管理員授予這些權限 (或包含這些權限的角色)。
所需的 IAM 權限 | 包含必要權限的預先定義角色 |
---|---|
|
服務使用情形管理員 ( roles/serviceusage.serviceUsageAdmin ) |
|
服務帳戶管理員 ( roles/iam.serviceAccountAdmin ) |
|
專案 IAM 管理員 ( roles/resourcemanager.projectIamAdmin ) |
config.deployments.create config.deployments.list |
Cloud Infrastructure Manager 管理員 ( roles/config.admin ) |
iam.serviceAccount.actAs |
服務帳戶使用者 ( roles/iam.serviceAccountUser ) |
關於臨時服務帳戶權限
如果您透過控制台啟動部署程序,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 部署」一文中的操作說明進行。
透過控制台部署
完成下列步驟,即可部署預先設定的解決方案。
在 Google Cloud 快速入門解決方案目錄中,前往「部署於 Kubernetes 的電子商務網頁應用程式」解決方案。
查看頁面上提供的資訊,例如解決方案的預估成本和預估部署時間。
準備好開始部署解決方案時,請按一下「Deploy」(部署)。
畫面上會顯示逐步設定窗格。
完成設定窗格中的步驟。
請記下您為部署作業輸入的名稱。日後刪除部署作業時,系統會要求您提供這個名稱。
按一下「Deploy」後,系統會顯示「Solution deployments」頁面。這個頁面上的「狀態」欄位會顯示「部署中」。
等待解決方案部署完成。
如果部署失敗,「狀態」欄位會顯示「失敗」。您可以使用 Cloud Build 記錄來診斷錯誤。詳情請參閱「透過控制台部署時發生錯誤」一文。
部署完成後,「Status」欄位會變更為「Deployed」。
不再需要解決方案時,您可以刪除部署作業,避免繼續產生 Google Cloud 資源費用。詳情請參閱「刪除部署項目」。
請繼續探索 Cymbal Shops,瞭解如何測試及探索解決方案。
使用 Terraform CLI 部署
本節說明如何使用 Terraform CLI 自訂解決方案,或自動佈建及管理解決方案。使用 Terraform CLI 部署的解決方案不會顯示在 Google Cloud 控制台的「Solution deployments」頁面中。
當您不再需要部署作業時,可以使用 Terraform CLI 進行刪除,如「使用 Terraform CLI 刪除」一節所述。
設定 Terraform 用戶端
您可以在 Cloud Shell 或本機主機上執行 Terraform。本指南說明如何在 Cloud Shell 中執行 Terraform,Cloud Shell 已預先安裝 Terraform,並設定為使用 Google Cloud進行驗證。
這個解決方案的 Terraform 程式碼位於 GitHub 存放區中。
將 GitHub 存放區複製到 Cloud Shell。
系統會顯示提示,要求您確認是否要將 GitHub 存放區下載到 Cloud Shell。
按一下「確認」。
Cloud Shell 會在個別的瀏覽器分頁中啟動,Terraform 程式碼會下載至 Cloud Shell 環境的
$HOME/cloudshell_open
目錄。在 Cloud Shell 中,檢查目前的工作目錄是否為
$HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra
。這是含有解決方案 Terraform 設定檔的目錄。如要變更至該目錄,請執行下列指令:cd $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra
執行下列指令,初始化 Terraform:
terraform init
等到畫面顯示下列訊息:
Terraform has been successfully initialized!
設定 Terraform 變數
您下載的 Terraform 程式碼包含變數,可用於根據您的需求自訂部署作業。例如,您可以指定要部署解決方案的 Google Cloud 專案和地區。
請確認目前的工作目錄為
$HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra
。如果不是,請前往該目錄。在同一個目錄中建立名為
terraform.tfvars
的文字檔案。在
terraform.tfvars
檔案中,複製以下程式碼片段,並設定必要變數的值。- 按照程式碼片段中提供的註解操作說明操作。
- 這個程式碼片段只包含您「必須」設定值的變數。Terraform 設定包含其他具有預設值的變數。如要查看所有變數和預設值,請參閱
$HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra
目錄中提供的variables.tf
檔案。 - 請確認您在
terraform.tfvars
檔案中設定的每個值,都與variables.tf
檔案中宣告的變數類型相符。舉例來說,如果variables.tf
檔案中為變數定義的類型為bool
,則您必須在terraform.tfvars
檔案中將true
或false
指定為該變數的值。
# 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 設定
請確認目前的工作目錄為
$HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra
。如果不是,請前往該目錄。確認 Terraform 設定沒有錯誤:
terraform validate
如果指令傳回任何錯誤,請在設定中進行必要的修正,然後再次執行
terraform validate
指令。重複執行這個步驟,直到指令傳回以下訊息為止:Success! The configuration is valid.
檢閱設定中定義的資源:
terraform plan
如果您未按照前述說明建立
terraform.tfvars
檔案,Terraform 會提示您輸入沒有預設值的變數值。輸入必要值。terraform plan
指令的輸出內容是 Terraform 在您套用設定時,所提供資源的清單。如要進行任何變更,請編輯設定,然後再次執行
terraform validate
和terraform plan
指令。
佈建資源
如果 Terraform 設定不需要進一步變更,請部署資源。
請確認目前的工作目錄為
$HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra
。如果不是,請前往該目錄。套用 Terraform 設定:
terraform apply
如果您未按照前述說明建立
terraform.tfvars
檔案,Terraform 會提示您輸入沒有預設值的變數值。輸入必要值。Terraform 會顯示將要建立的資源清單。
系統提示你執行動作時,請輸入
yes
。Terraform 會顯示訊息,說明部署作業的進度。
如果無法完成部署作業,Terraform 會顯示導致失敗的錯誤。請查看錯誤訊息並更新設定,以便修正錯誤。然後再次執行
terraform apply
指令。如需 Terraform 錯誤疑難排解說明,請參閱「使用 Terraform CLI 部署解決方案時發生的錯誤」。所有資源都建立完成後,Terraform 會顯示下列訊息:
Apply complete!
不再需要解決方案時,您可以刪除部署作業,避免繼續產生 Google Cloud 資源費用。詳情請參閱「刪除部署項目」。
請繼續探索 Cymbal Shops,瞭解如何測試及探索解決方案。
探索 Cymbal 商店
恭喜,你已部署 Cymbal Shops 網站!您可以造訪 Cymbal Shops 網站並四處瀏覽,然後在 Google Cloud 控制台中瞭解解決方案的運作方式。請注意,成功部署應用程式後,網站可能需要五分鐘的時間,才會顯示在提供的網址上。
造訪 Cymbal Shops 網站
您可以透過下列方式找到 Cymbal Shops 網站:
主控台部署作業
如果您是透過控制台部署解決方案,可以直接從「Solution deployments」(解決方案部署作業) 頁面造訪網站。
- 如果您剛部署完解決方案,請按一下「查看網頁應用程式」,前往該網站。否則請按一下部署項目的 「Actions」 選單,然後選取「View web app」。
Terraform 部署作業
如果您是使用 Terraform CLI 部署解決方案,請先找出多叢集 Ingress 提供的前端 IP 位址。您可以透過指令列使用 Google Cloud CLI (最簡單的方法),或透過Google Cloud 主控台完成這項工作。
gcloud
- 請確認您已安裝最新版本的 Google Cloud CLI。建議您透過 Cloud Shell 執行指令,因為該工具已為您安裝。
執行下列指令取得 IP 位址,將 PROJECT_ID 替換為 Google Cloud 專案的 ID:
gcloud compute addresses list \ --filter="name=('multi-cluster-ingress-ip-address-1')" \ --project=PROJECT_ID
複製指令傳回的網址,並貼到瀏覽器中,以便造訪網站。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
選取導覽選單中的「物件瀏覽器」。
在「Object Browser」清單中,展開「networking.gke.io」部分,然後選取「MultiClusterIngress」。您可能需要向下捲動才能看到該部分。
在「MultiClusterIngress」頁面中,選取「frontend-multi-cluster-ingress」。
在「frontend-multi-cluster-ingress」詳細資料頁面中,找出「IP 位址」。按一下這個網址即可造訪網站。
瀏覽網站
您現在可以像一般消費者一樣與 Cymbal Shops 網站互動,包括瀏覽產品、將產品加入購物車,以及以訪客身分結帳。
探索解決方案
如要查看已部署的 Google Cloud 資源及其設定,請參閱互動式導覽。
刪除部署作業
不再需要解決方案部署作業時,請刪除部署作業,以免繼續產生您建立的資源費用。
透過控制台刪除
如果您是透過控制台部署解決方案,請使用這個程序。
在 Google Cloud 控制台中,前往「Solution deployments」(解決方案部署項目) 頁面。
選取包含要刪除的部署作業的專案。
找出要刪除的部署。
在部署作業的資料列中,按一下
「Actions」(動作),然後選取「Delete」(刪除)。您可能需要捲動畫面才能看到資料列中的「動作」。
輸入部署名稱,然後按一下「確認」。
「狀態」欄位顯示「刪除中」。
如果刪除作業失敗,請參閱刪除部署作業時發生錯誤一文中的疑難排解指南。
如果您不再需要用於解決方案的 Google Cloud 專案,可以刪除該專案。詳情請參閱「選用:刪除專案」。
使用 Terraform CLI 刪除
如果您是使用 Terraform CLI 部署解決方案,請使用這個程序。
在 Cloud Shell 中,確認目前的工作目錄為
$HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra
。如果不是,請前往該目錄。移除 Terraform 佈建的資源:
terraform destroy
Terraform 會顯示即將刪除的資源清單。
系統提示你執行動作時,請輸入
yes
。Terraform 會顯示訊息,顯示進度。刪除所有資源後,Terraform 會顯示以下訊息:
Destroy complete!
如果刪除作業失敗,請參閱刪除部署作業時發生錯誤一文中的疑難排解指南。
如果您不再需要用於解決方案的 Google Cloud 專案,可以刪除該專案。詳情請參閱「選用:刪除專案」。
選用步驟:刪除專案
如果您在新的 Google Cloud 專案中部署解決方案,且已不再需要該專案,請完成下列步驟將其刪除:
- 前往 Google Cloud 控制台的「管理資源」頁面。
- 在專案清單中選取要刪除的專案,然後按一下「刪除」。
- 輸入提示中的專案 ID,然後按一下「Shut down」。
如果您決定保留專案,請按照下一個章節的說明,刪除為此解決方案建立的服務帳戶。
選用:刪除服務帳戶
如果您已刪除用於解決方案的專案,請略過本節。
如本指南前述,在您部署解決方案時,系統會代您建立服務帳戶。服務帳戶會暫時指派特定的 IAM 權限,也就是在解決方案部署和刪除作業完成後,系統會自動撤銷權限,但不會刪除服務帳戶。Google 建議您刪除這個服務帳戶。
如果您是透過 Google Cloud 控制台部署解決方案,請前往「Solution deployments」頁面。(如果您已在該頁面,請重新整理瀏覽器)。系統會在背景觸發程序來刪除服務帳戶。因此您不需要採取進一步行動。
如果您是使用 Terraform CLI 部署解決方案,請完成下列步驟:
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。
選取用於解決方案的專案。
選取要刪除的服務帳戶。
為解決方案建立的服務帳戶電子郵件 ID 格式如下:
goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
電子郵件 ID 包含下列值��
- DEPLOYMENT_NAME:部署作業的名稱。
- NNN:隨機的 3 位數字。
- PROJECT_ID:您部署解決方案的專案 ID。
點選「刪除」。
排解錯誤
您可以採取的診斷和解決錯誤的行動,取決於部署方法和錯誤的複雜度
透過控制台部署時發生錯誤
如果您在使用控制台時發生部署失敗������,請執行下列操作:
前往「Solution deployments」(解決方案部署項目) 頁面。
如果部署失敗,狀態欄位會顯示「失敗」。
查看導致失敗的錯誤詳細資料:
在部署作業列中,按一下
「動作」。您可能需要捲動畫面才能看到資料列中的「動作」。
選取「查看 Cloud Build 記錄」。
查看 Cloud Build 記錄,並採取適當行動,解決導致失敗的問題。
使用 Terraform CLI 部署時發生錯誤
如果使用 Terraform 時部署作業失敗,terraform
apply
指令的輸出內容會包含錯誤訊息,您可以查看這些訊息來診斷問題。
以下各節的範例說明您在使用 Terraform 時可能會遇到的部署錯誤。
建立 Feature 時發生錯誤:資源已存在
如果您將這個解決方案部署至已設定多叢集 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 叢集部署至所選專案。一個專案 (具體來說,是專案的fleet) 只能包含單一設定叢集,用於設定多叢集 Ingress。如要修正這個問題,請移除現有的 Multi Cluster Ingress 設定叢集,或是在新專案中重新開始。
錯誤:工作:default/kubernetes-manifests-deployer-job 處於失敗狀態
這個解決方案的 Terraform 會部署名為 kubernetes-manifests-deployer-job
的 Kubernetes Job。這個 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
指令。
刪除部署作業時發生錯誤
在某些情況下,刪除部署作業的嘗試可能會失敗:
- 透過控制台部署解決方案後,如果變更解決方案所佈建的任何資源,然後嘗試刪除部署作業,刪除作業可能會失敗。「Solution deployments」頁面上的「Status」欄位顯示「Failed」,Cloud Build 記錄則會顯示錯誤的原因。
- 使用 Terraform CLI 部署解決方案後,如果您使用非 Terraform 介面 (例如控制台) 變更任何資源,然後嘗試刪除部署作業,刪除作業可能會失敗。
terraform destroy
指令的輸出內容會顯示錯誤的原因。
請查看錯誤記錄和訊息,找出並刪除導致錯誤的資源,然後再試著刪除部署作業。
如果您無法刪除以主控台為基礎的部署,也無法使用 Cloud Build 記錄診斷錯誤,請使用 Terraform CLI 刪除部署,如下一節所述。
使用 Terraform CLI 刪除以控制台為基礎的部署作業
本節說明如何刪除主控台型部署作業,如果您在透過主控台刪除時發生錯誤,請按照本節說明操作。在這個方法中,您會為要刪除的部署下載 Terraform 設定,然後使用 Terraform CLI 刪除部署。
找出部署作業的 Terraform 程式碼、記錄和其他資料儲存的區域。這個區域可能與您在部署解決方案時選取的區域不同。
在 Google Cloud 控制台中,前往「Solution deployments」頁面。
選取包含要刪除的部署作業的專案。
在部署清單中找出要刪除的部署所在的資料列。
按一下
「查看所有資料列內容」。在「Location」欄中,請注意「第二個」位置,如以下範例所示:
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
為要刪除的部署建立專案 ID、區域和名稱的環境變數:
export REGION="REGION" export PROJECT_ID="PROJECT_ID" export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
在這些指令中,請這樣取代:
- REGION:您在本程序中先前記下的地點。
- PROJECT_ID:部署解決方案的專案 ID。
- DEPLOYMENT_NAME:要刪除的部署名稱。
取得要刪除的部署作業最新修訂版本 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
取得部署作業的 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
從 Cloud Storage 下載 Terraform 設定至 Cloud Shell:
gcloud storage cp $CONTENT_PATH $HOME --recursive cd $HOME/content/infra
等到畫面顯示
Operation completed
訊息,如以下範例所示:Operation completed over 45 objects/268.5 KiB
初始化 Terraform:
terraform init
等到畫面顯示下列訊息:
Terraform has been successfully initialized!
移除已部署的資源:
terraform destroy
Terraform 會顯示即將刪除的資源清單。
如果系統顯示未宣告變數的警告,請忽略警告。
系統提示你執行動作時,請輸入
yes
。Terraform 會顯示訊息,顯示進度。刪除所有資源後,Terraform 會顯示下列訊息:
Destroy complete!
刪除部署成果:
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"
請稍候片刻,然後確認已刪除部署構件:
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 存放區中的問題清單 (包括已關閉的問題)。
後續步驟
- 如果您是容器和 Kubernetes 的新手:
- 請試試這個教學課程。這份文件主要針對 Cloud Service Mesh 使用者,但也適用於想瞭解如何從原始碼轉換為在 GKE 上執行的容器的使用者。
- 閱讀我們的 Kubernetes 漫畫!
- 請造訪 Kubernetes 說明文件網站。
- 瞭解 GKE
- 瞭解 Autopilot
- 瞭解多叢集 Ingress