學習路徑:可擴充的應用程式 - 使用 Config Sync 集中管理變更


IT 管理員和營運人員可以透過這個系列的教學課程,瞭解如何部署、執行及管理 Google Kubernetes Engine (GKE) Enterprise 版中運作的現代化應用程式環境。在本系列教學課程中,您將瞭解如何設定監控和快訊、擴充工作負載,以及模擬故障,所有操作都使用 Cymbal Bank 範例微服務應用程式:

  1. 建立叢集並部署範例應用程式
  2. 使用 Google Cloud Managed Service for Prometheus 監控
  3. 擴充工作負載
  4. 模擬失敗情形
  5. 集中管理變更 (本教學課程)

總覽和目標

建構新服務和應用程式時,您可能想在不同環境中測試變更。隨著機構擴大,您可能需要為不同團隊設定不同的叢集。管理多個設定不同的叢集並不容易。您可以使用 Config Sync 等 GitOps 工具,協助管理這些挑戰。

在「建立叢集」教學課程中,您建立了一個叢集,並將 Cymbal Bank 應用程式部署到該叢集。

在本教學課程中,您將瞭解如何將應用程式的 Kubernetes 資訊清單儲存在集中式 Git 存放區,以及如何使用 Config Sync 等工具,將應用程式部署到叢集機群中的多個叢集。您將瞭解如何完成下列工作:

  • 建立 Git 存放區並連結至 Cloud Build

  • 建立叢集、將叢集註冊至機群,並在機群叢集上安裝 Config Sync

  • 使用機群套件,在叢集或整個機群中部署 Cymbal Bank 和其他資源

費用

啟用 GKE Enterprise 並部署本系列教學課程的 Cymbal Bank 範例應用程式,表示您將產生 GKE Enterprise 的叢集費用,直到停用 GKE Enterprise 或刪除專案為止。如要瞭解相關費用,請參閱 Google Cloud 定價頁面

您也必須支付執行 Cymbal Bank 範例應用程式時產生的其他 Google Cloud 費用,例如 Compute Engine VM 和負載平衡器的費用。

事前準備

如要瞭解如何從 Git 存放區儲存、變更及部署資源,請先完成第一個教學課程,建立使用 Autopilot 模式的 GKE 叢集,並部署 Cymbal Bank 範例微服務型應用程式。

建議您依序完成 Cymbal Bank 的這組教學課程。完成一系列教學課程後,您將學到新技能,並使用其他 Google Cloud 產品和服務。

如要使用 Config Sync 將 Kubernetes 資訊清單從 Git 存放區部署到叢集,您必須啟用下列 API:

gcloud services enable configdelivery.googleapis.com cloudbuild.googleapis.com developerconnect.googleapis.com

建立 Git 存放區並連結至 Cloud Build

機群套件是一組 Kubernetes 資源資訊清單。將這些資訊清單組合為套件後,您就能直接從 Git 存放區,將應用程式部署至機群中的多個叢集。這個工作流程可帶來下列優點:

  • 將資源部署至整個機群,而非逐一手動套用至叢集,藉此提升擴充性。
  • 透過漸進式發布功能,更安全地更新應用程式。
  • 從 Git 集中取得設定檔的其他工作流程,例如版本控制和核准。

如要示範如何在 Git 中儲存及變更內容,請將 Cymbal Bank 存放區分叉,並連結至 Cloud Build。

為 Cymbal Bank 存放區建立分支

在本教學課程中,您將變更 Git 存放區,瞭解如何透過 Config Sync 安全地管理及部署 Kubernetes 資源的變更。如要直接進行這些變更,您必須分叉 Git 存放區,而不是複製存放區。

如要分叉存放區,請完成下列步驟:

  1. 在 GitHub 中,前往 Cymbal Bank (bank-of-anthos) 範例存放區

  2. 按一下「Fork」,取得內含原始碼檔案的存放區副本。

    替代文字

  3. 如有需要,請登入 GitHub 帳戶。如果您有權存取 GitHub 上的其他機構或團隊,請務必將存放區分入個人帳戶。

您現在已擁有 Cymbal Bank 存放區的分支版本。您部署的所有 Kubernetes 資訊清單都位於 /kubernetes-manifests 資料夾中。

將存放區連結至 Cloud Build

Cloud Build 是一項服務,可在 Google Cloud上執行建構作業,您可以使用這項服務,以 GitOps 模式持續推送軟體更新。Config Sync 的機群套件服務會使用 Cloud Build,從 Git 存放區擷取 Kubernetes 資源,並將這些資源部署至叢集。使用車隊套件時,您只需為要同步處理的每個存放區設定一次 Cloud Build。車隊套件 API 會透過 Cloud Build 自動建立建構觸發條件。

如要將 GitHub 存放區連結至 Cloud Build,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中開啟 Cloud Build 頁面,然後選取「Repositories」(存放區)

    開啟「Repositories」(存放區) 頁面

  2. 確認您位於第 2 代「存放區」頁面。視需要選取「查看存放區 (第 2 代)」

  3. 按一下「建立主機連線」

  4. 在「Region」(區域) 選單中,選取「us-central1 (Iowa)」(us-central1 (愛荷華州)) 做為區域。

  5. 在「Name」(名稱) 欄位中,輸入 cymbal-bank-connection 做為連線名稱。

  6. 按一下「連線」

  7. 如果這是您第一次將 Cloud Build 連線至 GitHub 帳戶,請完成下列步驟:

    1. 接受 GitHub OAuth 權杖要求。權杖會儲存在 Secret Manager 中,以便用於 Cloud Build GitHub 連線。按一下「繼續」
    2. 在 GitHub 存放區中安裝 Cloud Build。選取「安裝到新帳戶」
    3. 在開啟的新 GitHub 視窗中,選取您先前建立 Cymbal Bank 分支版本的 GitHub 帳戶。在正式環境中,您可能會選取其他已委派存取權的帳戶或存放區。
    4. 按照驗證提示在 GitHub 中確認身分。
    5. 在 Cloud Build 存放區存取權的 GitHub 視窗中,選擇「Only select repositories」
    6. 在列出存放區的下拉式選單中,選取 bank-of-anthos 的 Fork。
    7. 按一下 [儲存]
  8. 在 Google Cloud 控制台的 Cloud Build 頁面中,按一下「連結存放區」,將新的 Git 存放區連結至 Cloud Build。

  9. 在「連線」選單中,選取 cymbal-bank-connection

  10. 在「Repositories」(存放區) 選單中,選取 bank-of-anthos 分支。

  11. 選取「連結」

建立叢集

在本系列的第一篇教學課程中,您建立了一個叢集,並將 Cymbal Bank 應用程式部署至該叢集。在實際情況中,您不太可能只管理一個叢集。GKE 可讓您將叢集歸類到機群中,也就是可統一管理的叢集邏輯群組。在機群中,您可能會進一步將叢集分組,有些叢集代表不同環境,有些則屬於不同團隊。舉例來說,您可能會有開發叢集、測試叢集和正式環境叢集。在大型機構中,各個團隊可能會有自己的叢集,適用於不同環境。對 IT 管理員或營運人員來說,這可能代表您必須管理數十個叢集!

在所有這些叢集中部署應用程式或自訂政策等個別資源時,Config Sync 等 GKE Enterprise 功能可協助您大規模管理這些部署作業。

為協助示範如何將資源部署至不同環境或整個叢集機群,請建立新叢集,並將 Cymbal Bank 應用程式部署至該叢集:

  1. 建立模擬開發環境的 GKE 叢集:

    gcloud container clusters create-auto scalable-apps-dev \
      --project=PROJECT_ID \
      --region=REGION \
      --fleet-project=PROJECT_ID \
      --release-channel=rapid
    

    更改下列內容:

    • PROJECT_ID,並將其替換成您在前一節中建立的專案自動生成 ID。專案 ID 通常與專案名稱不同。舉例來說,專案名稱可能是「scalable-apps」,但專案 ID 可能是「scalable-apps-567123」
    • REGION 改為您要在其中建立叢集的地區,例如 us-central1
  2. 標籤是可新增至 GKE 資源的鍵/值組合,有助於整理資源。如果是機群套件,您可以使用機群成員資格標籤,自訂機群套件的目標叢集。系統不支援其他類型的標籤。

    為機群成員新增標籤:

    gcloud container fleet memberships update scalable-apps-dev \
        --update-labels=env=dev
    

    在本教學課程稍後建立機群套件時,這個標籤可確保資源只會部署到 scalable-apps-dev 叢集,而不會部署到本系列第一個教學課程中的 scalable-apps 叢集。

安裝 Config Sync

在兩個叢集上安裝 Config Sync:

  1. 前往 Google Cloud 控制台的「Features」(功能) 區段,然後點選「Config」(設定) 頁面。

    前往「設定」

  2. 按一下「安裝 Config Sync」
  3. 請選取「手動升級」
  4. 版本選單應預設為最新版 Config Sync。視需要選取最新版本。
  5. 在「安裝選項」下方,選取「在整個機群上安裝 Config Sync (建議)」
  6. 按一下「Install Config Sync」(安裝 Config Sync)
  7. 在 Config Sync 的「Settings」(設定) 分頁中,查看叢集清單的「Status」(狀態) 欄位。幾分鐘後,狀態會顯示為「待處理」,直到叢集正確設定 Config Sync 為止。狀態最多可能需要 10 分鐘才會變更為「已啟用」

部署 Cymbal Bank

在本系列的第一個教學課程中,您使用 kubectl 指令將應用程式設定套用至叢集。在本教學課程中,您將使用 Config Sync 的機群套件功能,將這些設定部署到新叢集。在後續章節中,您會看到如何將新資源新增至 Git 存放區,並將這些資源部署到叢集機群。

設定 Cloud Build 的服務帳戶

服務帳戶是一種特殊的帳戶,使用者通常並非真人,而是應用程式。建立服務帳戶時,最佳做法是為單一特定服務或工作建立服務帳戶,並授予服務帳戶精細的角色。在本教學課程中,您將建立服務帳戶,授予 Cloud Build 權限,從 Git 存放區擷取 Kubernetes 資源,並將這些資源部署到叢集。

如要建立服務帳戶並授予必要權限,請完成下列步驟:

  1. 建立服務帳戶:

    gcloud iam service-accounts create "cymbal-bank-service-account"
    
  2. 新增「Resource Bundle Publisher」角色的 IAM 政策繫結,授予服務帳戶從 Git 存放區擷取資源的權限:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/configdelivery.resourceBundlePublisher'
    

    如果系統出現提示,請選取「None」做為政策條件。

  3. 新增「記錄檔寫入者」角色的 IAM 政策繫結,授予服務帳戶寫入記錄的權限:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/logging.logWriter'
    

    如果系統出現提示,請選取「None」做為政策條件。

為 Cymbal Bank 應用程式建立發布版本

車隊套件需要語意版本標記,才能瞭解要從哪個版本的存放區部署。建議您在變更存放區時建立新版本,因為這樣有助於進行版本控管,並在需要時輕鬆還原至穩定版本。

  1. 在 GitHub 分支的 Cymbal Bank 網路瀏覽器視窗中,按一下側欄的「Releases」部分下方的「Create a new release」

  2. 選取「選擇代碼」選單,然後輸入 v1.0.0 做為代碼。按一下「建立新代碼」

  3. 按一下「發布版本」

設定驗證方法

如同本系列的第一篇教學課程,您必須建立 JWT 來處理使用者驗證,並建立 Kubernetes 密鑰來儲存您建立的新叢集的 JWT。建議每個叢集都使用專屬 JWT 進行驗證。

  1. 在 Cloud Shell 中建立 JWT:

    openssl genrsa -out jwtRS256.key 4096
    openssl rsa -in jwtRS256.key -outform PEM -pubout -out jwtRS256.key.pub
    
  2. 建立 Kubernetes Secret:

    kubectl create secret generic jwt-key --from-file=./jwtRS256.key --from-file=./jwtRS256.key.pub
    

使用機群套件部署 Cymbal Bank 應用程式

FleetPackage 資源是宣告式 API,可將多個 Kubernetes 資訊清單部署至叢集群組。

如要建立車隊套件,請定義指向存放 Kubernetes 資源的存放區的 FleetPackage 規格,並將該存放區連結至 Cloud Build。接著套用 FleetPackage 資源,從 Git 擷取資源,並部署至整個機群。

  1. 在 Cloud Shell 中,設定 configdelivery Google Cloud CLI 指令的預設位置。與將存放區連結至 Cloud Build 相同,您必須使用 us-central1,才能在機群套件功能處於預先發布階段時使用該功能:

    gcloud config set config_delivery/location us-central1
    
  2. 建立名為 fleetpackage-spec.yaml 的檔案,並在當中加入下列內容:

    resourceBundleSelector:
      cloudBuildRepository:
        name: projects/PROJECT_ID/locations/us-central1/connections/cymbal-bank-connection/repositories/REPOSITORY_NAME
        tag: v1.0.0
        serviceAccount: projects/PROJECT_ID/serviceAccounts/cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com
        path: kubernetes-manifests
    target:
      fleet:
        project: projects/PROJECT_ID
        selector:
          matchLabels:
            env: dev
    rolloutStrategy:
      rolling:
        maxConcurrent: 1
    

    請將 REPOSITORY_NAME 改成 Cloud Build 連線中顯示的存放區名稱。

    選取器欄位與您先前建立的車隊成員標籤相符。 這可確保 Cymbal Bank 應用程式只會部署在 scalable-apps-dev 叢集上。第一個教學課程中的 scalable-apps 叢集不會受到影響。在下一節中,您會看到機群套件的範例,該套件會以機群中的所有叢集為目標。

    推出策略欄位可控管資源在叢集中的部署方式。在本例中,您只會部署到一個叢集,因此這個欄位不會改變推出程序。但如果您有多個叢集,這項設定可確保資源檔案會先套用至一個叢集,再移至下一個叢集。方便您監控推出作業的進度。

  3. 建立機群套件:

    gcloud alpha container fleet packages create cymbal-bank-fleet-package \
        --source=fleetpackage-spec.yaml \
        --project=PROJECT_ID
    
  4. 確認機群套件是否已建立:

    gcloud alpha container fleet packages list
    

    輸出內容會列出建構觸發條件的狀態。幾秒後,MESSAGE 欄位會更新,輸出內容類似如下:

    MESSAGES: Build status: WORKING. The release is still being built; see the build status on the following page:
    

    您可以按一下提供的連結,查看 Cloud Build 工作的串流記錄。 Cloud Build 處理建構觸發程序可能需要幾分鐘的時間。

  5. 建構觸發程序成功完成後,gcloud alpha container fleet packages list 的輸出內容會類似於下列內容:

    NAME: cymbal-bank-fleet-package
    STATE: ACTIVE
    CREATE_TIME: 2024-07-09T15:15:56
    ACTIVE_ROLLOUT: rollout-20240709-153621
    LAST_COMPLETED_ROLLOUT:
    MESSAGES:
    

    機群套件會開始在機群中推出 Kubernetes 資源。

  6. 在 Google Cloud 控制台的 Google Kubernetes Engine 頁面中,選取 scalable-apps-dev 叢集,然後前往「Workloads」(工作負載) 頁面,查看部署在所有 GKE 叢集上的工作負載匯總檢視畫面:

    開啟「Workloads」(工作負載) 頁面

    Autopilot 調整 Pod 以符合資源要求時,您可能會看到一些錯誤。幾分鐘後,您應該會看到 Pod 開始執行,狀態為「OK」

  7. 如要查看 Cymbal Bank 網頁介面,請完成下列步驟:

    1. 在 Google Cloud 控制台的「Google Kubernetes Engine」頁面中,前往「閘道、Service 與 Ingress」頁面。

      前往「Gateways, Services & Ingress」(閘道、Service 與 Ingress) 頁面

    2. 如要尋找 Cymbal Bank 進入點,請按一下「Services」(服務) 分頁,然後找出名稱為 frontend 的服務。

    3. 按一下 frontend 進入的「Endpoint」連結 (例如 198.51.100.143:80),開啟 Cymbal Bank 網頁介面。

在整個機群中部署資源

接下來,假設您想使用新的微服務擴充 Cymbal Bank 應用程式。您想在目前的所有叢集,以及日後新增至機群的叢集部署這項微服務。使用機群套件,即可部署至多個叢集,並在新的叢集上自動部署。

將新資源新增至 Git 存放區

如要示範在應用程式中新增服務,請建立基本的 nginx 部署作業,並將其新增至叢集:

  1. 在 Cymbal Bank 的 GitHub 分支版本網頁瀏覽器視窗中,按一下「Add file」(新增檔案),然後按一下「Create new file」(建立新檔案)

  2. 將檔案命名為 new-resource/nginx.yaml,並在其中貼上下列內容:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:1.14.2
            name: nginx
            ports:
            - containerPort: 80
    
  3. 按一下「Commit changes...」(提交變更...)

  4. 在確認對話方塊中,保持選取「直接提交至 main 分支」,然後按一下「提交變更」

  5. 在分支的 Cymbal Bank 存放區主頁面中,選取側欄的「Releases」

  6. 選擇頁面頂端的「草擬新版本」

  7. 選取「選擇代碼」選單,然後輸入 v1.1.0 做為代碼。按一下「建立新代碼」

  8. 按一下「發布版本」

使用機群套件將資源部署至叢集

如要部署新資源,請建立新的車隊套件:

  1. 由於這個機群套件不含選取器欄位,因此會以機群中的所有叢集為目標。這也表示日後新增至機群的任何叢集,都會自動新增 nginx 部署作業。

    在 Cloud Shell 中,建立名為 new-deployment-fleet-package.yaml 的檔案,並在當中加入下列內容:

    resourceBundleSelector:
      cloudBuildRepository:
        name: projects/PROJECT_ID/locations/us-central1/connections/cymbal-bank-connection/repositories/REPOSITORY_NAME
        tag: v1.1.0
        serviceAccount: projects/PROJECT_ID/serviceAccounts/cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com
        path: kubernetes-manifests/new-resource
    target:
      fleet:
        project: projects/PROJECT_ID
    rolloutStrategy:
      rolling:
        maxConcurrent: 1
    
  2. 建立機群套件,開始推出作業:

    gcloud alpha container fleet packages create new-deployment-fleet-package \
        --source=new-deployment-fleet-package.yaml \
        --project=PROJECT_ID
    
  3. 確認機群套件是否已建立:

    gcloud alpha container fleet packages list
    

    您可以點選提供的連結,查看 Cloud Build 工作的串流記錄。

    機群套件會開始在機群中推出 Kubernetes 資源。系統會在幾分鐘內開始推出更新,並在幾分鐘內完成。

  4. 在 Google Cloud 控制台的 Google Kubernetes Engine 頁面中,前往「Workloads」(工作負載) 頁面,查看部署在所有 GKE 叢集上的工作負載匯總檢視畫面:

    開啟「Workloads」(工作負載) 頁面

您可以繼續探索機群套件的不同部署策略。 舉例來說,您可以嘗試在分支存放區中新增不同類型的資源,並使用不同的機群套件設定來部署這些資源。您也可以使用機群套件,刪除部署在叢集中的所有資源。如要進一步瞭解車隊套件,請參閱 Config Sync 說明文件中的「部署車隊套件」。

刪除整個機群的資源

就像您可以在整個機群中部署資源一樣,您也可以使用機群套件刪除整個機群中的資源。

如要移除個別資源,大致步驟如下:

  1. 從 Git 存放區刪除資源。
  2. 建立新的 Git 版本並建立新的標記。
  3. 更新「機群套件」tag欄位。
  4. 執行機群套件更新指令

或者,您也可以刪除機群套件本身,這也會一併刪除機群套件管理的所有資源。

舉例來說,如要移除上一節中的 nginx 部署作業,請執行下列指令:

gcloud alpha container fleet packages delete new-deployment-fleet-package --force

清除所用資源

如要避免系統向您的 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.

如要刪除分叉儲存庫,請完成下列步驟:

  1. 在 GitHub 分支 Cymbal Bank 的網路瀏覽器視窗中,按一下存放區名稱下方的「Settings」

  2. 在「一般設定」頁面 (預設選取),前往「Danger Zone」部分,然後按一下「Delete this repository」(刪除這個存放區)

  3. 按一下「我要刪除這個存放區」

  4. 詳閱警告訊息,然後按一下「我已詳閱並瞭解這些影響」

  5. 如要確認刪除的存放區是否正確,請在文字欄位中輸入已分支的 Cymbal Bank 存放區名稱。

  6. 按一下「Delete this repository」(刪除這個存放區)

後續步驟

開始建立自己的 GKE Enterprise 叢集環境前,請先查看一些實際工作環境考量事項