使用 GKE 進行現代化的持續整合/持續推送軟體更新:套用開發人員工作流程

Last reviewed 2023-09-11 UTC

本教學課程說明如何導入新應用程式、為應用程式開發功能,以及使用 Google Kubernetes Engine (GKE) 的現代持續整合/持續推送軟體更新 (CI/CD) 技術,將應用程式部署到正式環境。

本文件是系列文章之一:

在本教學課程中,您將使用 SkaffoldkustomizeArtifact RegistryConfig SyncCloud BuildCloud Deploy 等工具,開發、建構及部署應用程式。

本文的目標讀者是企業架構師和應用程式開發人員,以及 IT 安全、開發運作和網站穩定性工程 (SRE) 團隊。如要瞭解本文中的概念,建議您先累積一些自動部署工具和程序的經驗。

架構

在本教學課程中,您將導入新的應用程式。接著,您會開發新功能,並在開發、測試和正式環境中部署應用程式。 參考架構包含導入及發布新應用程式所需的基礎架構和工具,工作流程如下圖所示:

開發迴圈涵蓋程式碼存放區、Cloud Build 和 Cloud Deploy 管道。

從 CI 的程式碼存放區開始,工作流程包含下列步驟:

  1. 您透過應用程式存放區分享應用程式原始碼。

  2. 將程式碼提交並推送至應用程式存放區時,系統會自動觸發 Cloud Build 中的 CI 管道。CI 程序會建立容器映像檔,並推送至 Artifact Registry。

  3. CI 程序也會在 Cloud Deploy 中為應用程式建立 CD 版本。

  4. CD 發布內容會使用 skaffold 為開發環境產生完整轉譯的 Kubernetes 資訊清單,並將其部署至開發環境 GKE 叢集。

  5. 接著,CD 版本會從開發環境升級至預先發布目標,產生完全轉譯的預先發布資訊清單,並部署至預先發布 GKE 叢集。

  6. 接著,CD 版本會從預先發布環境升級至正式版,產生完整轉譯的正式版資訊清單,並部署至正式版 GKE 叢集。

如要進一步瞭解這個工作流程使用的工具和基礎架構,請參閱「Anthos 的新型持續整合/持續推送軟體更新:建立持續整合/持續推送軟體更新系統」。

目標

  • 加入新應用程式。

  • 在開發環境中部署應用程式。

  • 開發新功能,並部署至開發環境。

  • 將新功能升級至測試環境,然後發布至正式環境。

  • 測試應用程式的復原力。

費用

在本文件中,您會使用 Google Cloud的下列計費元件:

如要根據預測用量估算費用,請使用 Pricing Calculator

初次使用 Google Cloud 的使用者可能符合免費試用資格。

完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。

事前準備

  • 在本教學課程中,請部署本系列中的參考架構

準備環境

  1. 如果您直接從「使用 GKE 進行新型持續整合/持續推送軟體更新:建立持續整合/持續推送軟體更新系統」繼續操作,請前往下一節。不過,如果您有新的工作階段,或工作階段已過期,請開啟 Cloud Shell 並設定您安裝參考架構基礎架構的專案:

    gcloud config set core/project PROJECT_ID

    PROJECT_ID 替換為您的 Google Cloud 專案 ID。

啟用新應用程式

參考架構包含應用程式工廠。這個出廠設定是一組 Git 存放區 (名為 application-factory-repo) 和下列 Cloud Build 觸發條件:

  • create-app
  • tf-plan
  • tf-apply
  • create-team

您可以使用應用程式出廠設定,從入門存放區導入新應用程式。應用程式上線程序包含下列步驟:

  1. 建立應用程式定義:您可以在 Terraform 檔案中建立應用程式定義,並將其儲存在 application-factory-repo 中,做為應用程式目錄。

  2. 建立應用程式基礎架構:您可以在應用程式定義檔案上執行 Terraform,建立應用程式基礎架構。應用程式基礎架構包含下列項目:

    1. 新應用程式的登陸區包括在 acm-gke-infrastructure-repo 存放區中定義命名空間、服務帳戶和基本政策。上架新應用程式時,登陸區只會在開發 GKE 叢集中建立。這麼做是為了讓開發人員能使用開發環境,並開始進行疊代。預先發布和正式叢集中的登陸區是採用 GitOps 方法建立。本文件稍後會說明這種做法,讓您在準備好升級這些叢集中的版本時,可以參考相關內容。

    2. 基礎架構入門存放區中的基礎架構存放區,用於代管程式碼,以便在 Cloud Build 中建立 CI 管道、在 Cloud Deploy 中建立 CD 管道,以及建立 Artifact Registry 存放區來儲存構件。

    3. 基礎架構 Cloud Build 觸發條件,會採用基礎架構存放區中的程式碼,並根據定義建立資源。

    4. 應用程式存放區 (來自應用程式啟動器存放區),用於存放應用程式的原始碼。

  3. 建立應用程式的 CI/CD 資源:您可以使用應用程式基礎架構,為應用程式建立 CI/CD 資源。

建立應用程式定義:

執行 create-app 觸發條件,在 application-factory-repo 中產生應用程式定義檔。定義檔包含建立應用程式所需的資源宣告式定義。

  1. 前往 Google Cloud 控制台的 Cloud Build 頁面:

    前往 Cloud Build 頁面

  2. 按一下 create-app 觸發條件

  3. 按一下「顯示網址預覽」,即可顯示叫用 Webhook 時所需的網址。

  4. 在 Cloud Shell 中,對上一個步驟取得的網址發出 curl 要求,並將參數做為酬載傳遞至該網址,藉此叫用觸發程序。

    curl "WEBHOOK_URL" -d '{"message": {"app": "sample","runtime": "python","trigger_type": "webhook","github_team": ""}}'

    在先前的程式碼範例中:

    • WEBHOOK_URL 替換為從觸發程序取得的網址。

    • "app": "sample" 指定應用程式名稱。

    • "runtime": "python" 會告知應用程式工廠使用 Python 範本建立應用程式存放區。

    • "trigger_type": "webhook" 是指應用程式的 CI/CD 管道類型。

    • "github_team": "" 是 GitHub 中的團隊,將與為應用程式建立的存放區建立關聯。由於您尚未建立 GitHub 團隊,請將其做為空字串傳遞。

  5. 檢查管道的 create-app 觸發條件:

    前往 Cloud Build 記錄頁面

    create-app 觸發條件有新的管道。完成後,應用程式定義就會在 application-factory-repo 中建立。

  6. 查看應用程式定義檔案:

    1. 在網路瀏覽器中前往 GitHub,然後登入帳戶。

    2. 按一下圖片圖示,然後按一下 Your organizations。選擇貴機構。

    3. 按一下存放區 application-factory-repo,前往資料夾 apps/python,然後開啟 create-app 觸發程序建立的新檔案 sample.tf。檢查檔案,這個檔案包含用來建立新應用程式的 Terraform 程式碼。

建立應用程式基礎架構:

建立應用程式定義後,請執行觸發條件 tf-apply 來建立應用程式基礎架構。

  1. 在 Google Cloud 控制台中:

    前往 Cloud Build 頁面

    按一下 tf-apply 觸發條件。

  2. 按一下「顯示網址預覽」,即可顯示叫用 Webhook 時所需的網址。

  3. 叫用觸發條件:

    curl "WEBHOOK_URL" -d '{}'

    在先前的程式碼範例中:

    • WEBHOOK_URL 替換為從觸發程序取得的網址。
  4. 檢查管道的 tf-apply 觸發條件:

    前往 Cloud Build 記錄頁面

    tf-apply 觸發條件有新的管道。等待作業完成。

這個觸發條件會建立應用程式基礎架構。

查看應用程式基礎架構:

查看應用程式基礎架構的各個元件。

登陸區

  1. 前往 Cloud Shell 並設定專案。

    gcloud config set core/project PROJECT_ID

    PROJECT_ID 替換為您的 Google Cloud 專案 ID。

  2. 取得開發 GKE 叢集的憑證。

    gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a
    
  3. 檢查應用程式的命名空間。命名空間會以應用程式 (範例) 命名。

    kubectl get namespaces sample
    

    輸出內容會類似以下內容:

    NAME     STATUS   AGE
    sample   Active   15m
    

  4. 檢查命名空間中的服務帳戶。

    kubectl get serviceaccounts -n sample
    

    除了預設服務帳戶外,還有其他服務帳戶。輸出內容會類似以下內容:

    NAME         SECRETS   AGE
    default      0         15m
    sample-ksa   0         15m
    

基礎架構存放區

在網路瀏覽器中前往 GitHub,然後登入帳戶。按一下圖片圖示。然後按一下 Your organizations。選擇您的機構,然後按一下 sample-infra 存放區。

這個存放區有四個分支:cicd-triggerdevstagingprod。此外,這個存放區還包含四個資料夾:cicd-trigger、dev、staging 和 prod。預設分支版本為 cicd-trigger,您可以將程式碼推送至這個分支版本,其他分支版本則有保護規則,因此您無法直接將程式碼推送至這些分支版本。如要將程式碼推送至這些分支,您必須建立提取要求。cicd-trigger 資料夾包含為應用程式建立 CI/CD 資源的程式碼,而 devstagingprod 資料夾則包含為應用程式不同環境建立基礎架構的程式碼。

基礎架構觸發條件

  • 在 Google Cloud 控制台中:

    前往 Cloud Build 頁面

    系統新增了名為「deploy-infra-sample」的觸發條件。

  • 這個觸發條件會連結至存放區 sample-infra,因此當程式碼推送至這個存放區時,系統會叫用觸發條件,找出推送發生的分支,前往該分支上的對應資料夾,並在該處執行 Terraform。舉例來說,如果程式碼推送至 cicd-trigger 分支版本,觸發程序會在 cicd-trigger 分支版本的 cicd-trigger 資料夾中執行 Terraform。同樣地,當推送至 dev 分支版本時,觸發程序會在開發分支版本的開發資料夾上執行 Terraform,依此類推。

應用程式存放區

  • 前往 GitHub,並找出機構下的存放區。已有名為「sample」的新存放區。這個存放區會代管原始碼和建構容器的步驟,這些容器位於 Dockerfilekustomize 設定中,用於說明應用程式的必要設定,以及 skaffold.yaml 中,用於定義 Cloud Deploy 進行 CD 時使用的部署步驟。

建立應用程式 CI/CD 資源

您已建立應用程式的架構,現在請執行觸發條件 deploy-infra-sample,建立應用程式的 CI/CD 資源。您可以透過 Webhook 網址手動叫用觸發程序,也可以將變更提交至 Git 存放區 sample-infra

  1. 如要叫用 Cloud Build 觸發條件,請在存放區的檔案中新增一行。然後推送變更:

    1. 如果您從未在 Cloud Shell 中使用過 Git,請使用您的姓名和電子郵件地址設定 Git。Git 會使用這項資訊識別您在 Cloud Shell 中建立的修訂版本的作者身分:

      git config --global user.email "GITHUB_EMAIL_ADDRESS"
      git config --global user.name "GITHUB_USERNAME"

      更改下列內容:

      • GITHUB_EMAIL_ADDRESS:與 GitHub 帳戶相關聯的電子郵件地址
      • GITHUB_USERNAME:與 GitHub 帳戶相關聯的使用者名稱
    2. 複製 Git 存放區 sample-infra

      git clone https://github.com/GITHUB_ORG/sample-infra
      
      cd sample-infra

      更改下列內容:

      • GITHUB_ORG 替換成 GitHub 機構。

      系統會檢查預設分支 cicd-trigger。

    3. 在 env/cicd-trigger/main.tf 檔案中新增一行,然後提交並推送變更。

        echo "" >> env/cicd-trigger/main.tf
      
    4. 修訂並推送變更:

      git add .
      git commit -m "A dummy commit to invoke the infrastrucutre trigger"
      git push
      cd ..
      

      變更推送完成後,Cloud Deploy 觸發條件 deploy-infra-sample 就會啟動。

  2. 監控觸發條件的狀態:

    前往 Cloud Build 記錄頁面查看管道,並等待管道執行完畢。

查看應用程式 CICD 資源

查看為應用程式建立的各種 CI/CD 資源。

  1. 在 Google Cloud 控制台中:

    前往 Cloud Build 頁面,查看 deploy-app-sample 觸發條件。

    這是 CI 管道觸發程序。並連結至應用程式程式碼存放區 sample。將內容推送至應用程式存放區時,系統會叫用觸發條件,並執行觸發條件設定中定義的建構步驟。如要查看觸發條件在叫用時執行的步驟,請按一下觸發條件名稱,然後點選「開啟編輯器」按鈕。

  2. 前往 Artifact Registry 頁面,查看名稱為 sample 的新存放區。

    這個構件存放區會儲存應用程式的構件。

  3. 前往 Cloud Deploy 管道頁面,查看名稱為 sample 的管道。 這個持續部署管道會將應用程式部署到 GKE 叢集。

在開發環境中部署應用程式

觸發條件 deploy-app-sample 會連結至名為 sample 的應用程式存放區。您可以透過 Webhook 網址手動叫用觸發程序,也可以透過推送至應用程式存放區的方式叫用。

  1. 在存放區 sample 的檔案中新增一行,然後推送變更來叫用 Cloud Build 觸發程序:

    1. 複製 Git 存放區 sample

      在 Cloud Shell 中:

      git clone https://github.com/GITHUB_ORG/sample
      
      cd sample

      GITHUB_ORG 替換成 GitHub 機構。

    2. skaffold.yaml 檔案中新增一行。

        echo "" >> skaffold.yaml
      
    3. 修訂並推送變更:

      git add .
      git commit -m "A dummy commit to invoke CI/CD trigger"
      git push
      
    4. 變更推送完成後,Cloud Deploy 觸發條件 deploy-app-sample 就會啟動。

  2. 監控觸發條件的狀態:

    前往 Cloud Build 記錄頁面查看管道,並等待管道執行完畢。

    觸發條件會執行設定中定義的步驟。第一步是從存放區 sample 中的應用程式碼建構 Docker 映像檔。最後一個步驟是啟動 Cloud Deploy 管道,將應用程式部署至開發 GKE 叢集。

  3. 檢查開發叢集中的部署作業:

    前往 Cloud Deploy pipeline 頁面

    按一下 sample 管道,系統已開始將部署作業傳送至開發 GKE 叢集。等待作業完成。

確認應用程式已成功部署

  1. 取得開發叢集的憑證。

    gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a
    
  2. 連線至 GKE 叢集。

    gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080
    
  3. 點按 Cloud Shell 工具列上的

    按一下「Web Preview」(網頁預覽),然後點選「Preview on port 8080」(透過以下通訊埠預覽:8080)Cloud Shell 工具列指令。

    輸出內容如下:

    Hello World!
    
  4. 在 Cloud Shell 中按下 CTRL+C,即可結束通訊埠轉送。

在應用程式中新增功能

開發新功能時,您需要快速將變更部署至開發環境,以便測試及疊代。在本教學課程中,您將變更應用程式程式碼存放區,並將變更部署至開發環境。

  1. 在 Cloud Shell 中,將目錄變更為已複製的 sample 存放區:

  2. 更新應用程式以輸出不同的訊息:

      sed -i "s/Hello World/My new feature/g" main.py
    
  3. 修訂並推送變更:

    git add .
    git commit -m "Changed the message"
    git push
    

    程式碼推送到 GitHub 存放區後,Webhook 觸發程序 deploy-app-sample 就會啟動。

  4. Cloud Build 記錄頁面監控觸發條件的狀態,並等待完成。

  5. 前往 Cloud Deploy 管道頁面

    按一下 sample 管道,系統已開始將部署作業傳送至開發 GKE 叢集。等待作業完成。

確認應用程式已成功部署

  1. 如果您開啟了新的 Cloud Shell,請取得開發叢集的憑證:

    gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
    
  2. 連線至 GKE 叢集:

    gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080
    
  3. 點按 Cloud Shell 工具列上的

    按一下「Web Preview」(網頁預覽),然後點選「Preview on port 8080」(透過以下通訊埠預覽:8080)

    Cloud Shell 工具列指令。

    輸出內容如下:

    My new feature!
    
  4. 在 Cloud Shell 中按下 CTRL+C,即可結束通訊埠轉送。

將變更推行至預先發布和實際工作環境叢集

將應用程式升級至測試和正式版環境之前,您需要在這些環境的 GKE 叢集中,為應用程式建立登陸區。您加入應用程式時,系統會將程式碼新增至開發分支中的 acm-gke-infrastructure-repo,在開發 GKE 叢集中自動建立開發專用的登陸區。

在測試環境和實際工作環境 GKE 叢集中建立登陸區

  1. 在暫存 GKE 叢集中建立登陸區:您需要在 acm-gke-infrastructure-repo 中建立從開發到暫存分支的拉取要求,然後合併。

    1. 前往 GitHub 並瀏覽至存放區 acm-gke-infrastructure-repo。依序點選 Pull requestsNew pull request 按鈕。在「Base」(基本) 選單中選擇「staging」(預先發布),在「Compare」(比較) 選單中選擇「dev」(開發)。按一下 Create pull request 按鈕。

    2. 通常,有權存取存放區的人會審查變更,然後合併 PR,確保只有預期的變更會升級至預先發布環境。為讓個人試用參考架構,我們放寬了分支保護規則,讓存放區管理員可以略過審查並合併 PR。如果您是存放區管理員,請合併提取要求。否則請管理員合併。

    Config Sync 會將存放區暫存分支的變更內容與暫存 GKE 叢集同步,在暫存 GKE 叢集上為應用程式建立登陸區。acm-gke-infrastructure-repo

  2. 在正式版 GKE 叢集中建立登陸區:您需要從暫存環境建立提取要求,然後合併至正式版分支。

    1. 依序點選 Pull requestsNew pull request 按鈕。在「Base」選單中選擇「prod」,在「Compare」選單中選擇「staging」。按一下 Create pull request 按鈕。

    2. 如果您是存放區管理員,請合併提取要求。否則請管理員合併。

    Config Sync 會將存放區 acm-gke-infrastructure-repo 實際工作環境分支版本上的變更,與實際工作環境 GKE 叢集同步,進而在實際工作環境 GKE 叢集上為應用程式建立登陸區。

將開發環境的變更升級至測試環境

您已在暫存和實際工作環境 GKE 叢集中,為應用程式建立登陸區,現在請將應用程式從開發環境升級至暫存環境。

  1. 找出最新版本名稱,並儲存為環境變數:

      export RELEASE=$(gcloud deploy targets describe dev --region=us-central1 --format="json" | jq -r '."Active Pipeline"[0]."projects/PROJECT_ID/locations/us-central1/deliveryPipelines/sample"."Latest release"' | awk -F '/' '{print $NF}')
     

    PROJECT_ID 替換為您的 Google Cloud 專案 ID。

    確認環境變數是否已設定完成:

      echo $RELEASE
      

  2. 在 Cloud Shell 中執行下列指令,將版本從開發環境升級至測試環境:

     gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample  --region=us-central1 --to-target=staging --quiet
     

  3. 檢查暫存部署作業:

    前往 Cloud Deploy 管道頁面

    按一下 sample 管道,系統已開始將部署作業傳送至暫存 GKE 叢集。等待作業完成。

  4. 確認暫存部署作業是否順利完成:

    1. 取得暫存叢集的憑證:

      gcloud container clusters get-credentials gke-staging-us-central1 --location us-central1-a
      
    2. 連線至 GKE 叢集:

      gcloud container clusters get-credentials gke-staging-us-central1 --location us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080
      
    3. 點按 Cloud Shell 工具列上的

      按一下「Web Preview」(網頁預覽),然後點選「Preview on port 8080」(透過以下通訊埠預覽:8080)

      Cloud Shell 工具列指令。

      輸出內容如下:

      My new feature!
      
    4. 在 Cloud Shell 中按下 CTRL+C,即可結束通訊埠轉送。

將變更從測試環境推行至實際工作環境

現在,請將發布內容從測試環境推送至實際工作環境。您有兩個實際工作叢集,Cloud Deploy 分別為這兩個叢集設定了名為 prod1 和 prod2 的目標。

  1. 在 Cloud Shell 中執行下列指令,將版本從測試環境升級至 prod1 叢集:

     gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample  --region=us-central1 --to-target=prod1 --quiet
     

  2. 發布至正式版叢集需要經過核准,因此推出作業會等到您核准後才開始。如要查看這份名單,請按照下列步驟操作:

    前往 Cloud Deploy 管道頁面

    按一下 sample 管道。推出至 prod1 需要核准,且必須具備 clouddeploy.approver 角色才能核准推出作業。由於您是專案擁有者,因此有權核准發布。

  3. 核准將版本推送至 prod1:

    執行下列指令,擷取待核准的推出作業名稱,並儲存至環境變數:

     export ROLLOUT=$(gcloud deploy targets describe prod1 --region=us-central1 --format="json" | jq -r '."Pending Approvals"[]' | awk -F '/' '{print $NF}')
     

    核准發布:

     gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
     

  4. 核准後,系統就會開始發布 prod1。在 Cloud Deploy 管道頁面監控進度。

  5. prod1 部署完成後,啟動 prod2 版本。

     gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample  --region=us-central1 --to-target=prod2 --quiet
     

  6. 發布至 prod2 也需要核准。核准將版本推送至 prod2 叢集:

    執行下列指令,擷取待核准的推出作業名稱,並儲存至環境變數:

     export ROLLOUT=$(gcloud deploy targets describe prod2 --region=us-central1 --format="json" | jq -r '."Pending Approvals"[]' | awk -F '/' '{print $NF}')
     

    核准發布:

     gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
     

  7. 核准後,系統就會開始發布 prod2 版本。在 Cloud Deploy 管道頁面監控進度。

  8. prod1 和 prod2 中的 Cloud Deploy 管道完成後,請確認正式版叢集中的部署作業是否成功。

    1. 您在正式環境叢集中建立了多叢集 Ingress,並使用負載平衡器存取正式環境應用程式。這些 Multi Cluster Ingress 設定是使用存放區 sample 中的 YAML 檔案 k8s/prod/mci.yaml 和 k8s/prod/mcs.yaml 建立。當您將要求傳送至負載平衡器的 IP 位址時,多叢集 Ingress 會將要求轉送至在兩個不同 GKE 叢集中執行的其中一個應用程式執行個體。

    2. 列出與負載平衡器相關聯的轉送規則,找出 IP 位址。

      gcloud compute forwarding-rules list
    3. 輸出內容會類似以下內容:

      NAME: mci-qqxs9x-fw-sample-sample-ingress
      REGION:
      IP_ADDRESS: 34.36.123.118
      IP_PROTOCOL: TCP
      TARGET: mci-qqxs9x-sample-sample-ingress
      

    4. 開啟網路瀏覽器,並在網址中輸入下列內容:

      http://IP_ADDRESS:80

      IP_ADDRESS 替換為負載平衡器的 IP 位址。

      輸出內容如下:

      My new feature!
      

      這項操作可確認應用程式是否已如預期部署至正式版叢集。

測試應用程式的彈性

在本節中,您將重新啟動其中一個正式版 GKE 叢集的節點,測試在正式環境中執行的應用程式的復原能力,且不會影響應用程式。

實際運作的應用程式會使用多叢集 Ingress,並可透過負載平衡器 IP 存取。透過該 IP 存取應用程式時,多叢集 Ingress 會將要求轉送至其中一個應用程式例項,這些例項會在兩個不同的 GKE 叢集上執行。當其中一個 GKE 叢集健康狀態不良,且無法連線至該叢集上執行的應用程式例項時,多叢集 Ingress 會持續將流量傳送至其他 GKE 叢集上執行的應用程式健康例項。這樣一來,叢集停機對使用者來說就毫無影響,應用程式也能持續處理要求。

如要測試復原力,請按照下列步驟操作:

  1. 找出在 us-west1 中執行的正式版 GKE 叢集節點集區。

     gcloud container clusters describe gke-prod-us-west1 --location=us-west1-a --format=json | jq ".nodePools[0].instanceGroupUrls[]" | tr '"' ' ' |  awk -F '/' '{for(i=NF-2; i<=NF; i=i+2) printf ("%s ",$i); print  ""}'

  2. 輸出結果會與下列內容相似:

    us-west1-b gke-gke-prod-us-west1-node-pool-01-6ad4e1ed-grp
    us-west1-c gke-gke-prod-us-west1-node-pool-01-98407373-grp
    

    輸出內容有兩個資料欄,第一個資料欄是區域,第二個資料欄是與 us-west1 地區中正式版 GKE 叢集節點集區相關聯的執行個體群組名稱。

  3. 重新啟動節點集區對應的執行個體群組:

     gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_1  --zone=ZONE_1 --max-unavailable=100%
    
     gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_2  --zone=ZONE_2 --max-unavailable=100%

    INSTANCE_GROUP_1 替換為第一個執行個體群組的名稱。

    ZONE_1 替換為第一個執行個體群組的區域。

    INSTANCE_GROUP_2 替換為第二個執行個體群組的名稱。

    ZONE_2 替換為第二個執行個體群組的區域。

  4. 檢查執行個體群組的狀態。

    前往「Instance groups」(執行個體群組) 頁面

    這兩個執行個體群組正在重新啟動,其他群組則有綠色勾號。

    執行個體群組的狀態。

  5. 開啟網路瀏覽器,並在網址中輸入下列內容:

    http://IP_ADDRESS:80

    IP_ADDRESS 替換為負載平衡器的 IP 位址。

    即使其中一個 GKE 叢集發生故障,應用程式仍可正常運作,輸出內容如下:

     My new feature!
     

    這表示您的應用程式具備彈性且高可用性。

管理應用程式

您從應用程式工廠建立這個應用程式時,會取得應用程式的個別 Git 存放區、基礎架構和 CI/CD pipeline。您已使用這些資源部署應用程式,並新增功能。如要進一步管理應用程式,您只需要與這些 Git 存放區和管道互動,不必更新應用程式 Factory。您可以根據需求自訂應用程式的管道和 Git 存放區。應用程式擁有者可以定義哪些人有權存取應用程式的管道和 Git 存放區,以便管理應用程式。

清除所用資源

如何避免系統向您的 Google Cloud 帳戶收取您在本教學課程中使用資源的相關費用。

刪除專案

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

後續步驟