IT 管理員和營運人員可以透過這個系列的教學課程,瞭解如何部署、執行及管理 Google Kubernetes Engine 中運作的現代化應用程式環境。在本系列教學課程中,您將瞭解如何設定監控和快訊、擴充工作負載,以及模擬故障,所有操作都使用 Cymbal Bank 範例微服務應用程式:
總覽和目標
建構新服務和應用程式時,您可能想在不同環境中測試變更。隨著機構擴大,您可能需要為不同團隊設定不同的叢集。管理多個設定不同的叢集並不容易。您可以使用 Config Sync 等 GitOps 工具,協助管理這些挑戰。
在「建立叢集」教學課程中,您建立了一個叢集,並將 Cymbal Bank 應用程式部署到該叢集。
在本教學課程中,您將瞭解如何將應用程式的 Kubernetes 資訊清單儲存在集中式 Git 存放區,以及如何使用 Config Sync 等工具,將應用程式部署到叢集機群中的多個叢集。您將瞭解如何完成下列工作:
建立 Git 存放區並連結至 Cloud Build
建立叢集、將叢集註冊至機群,並在叢集機群中安裝 Config Sync
使用機群套件,在叢集或整個機群中部署 Cymbal Bank 和其他資源
建立叢集
在本系列的第一篇教學課程中,您建立了一個叢集,並將 Cymbal Bank 應用程式部署至該叢集。在實際情況中,您不太可能只管理一個叢集。GKE 可讓您將叢集歸入機群,也就是可統一管理的叢集邏輯群組。在機群中,您可能會進一步將叢集分組,某些叢集代表不同環境,或屬於不同團隊。舉例來說,您可能會有開發叢集、測試叢集和正式叢集。在大型機構中,各個團隊可能會有自己的叢集,適用於不同環境。對 IT 管理員或營運人員來說,這可能代表您必須管理數十個叢集!
在所有這些叢集中部署應用程式或自訂政策等個別資源時,Config Sync 等 GKE 功能可協助您大規模管理這些部署作業。
為協助示範如何將資源部署至不同環境或整個叢集機群,請建立新叢集,並將 Cymbal Bank 應用程式部署至該叢集:
建立模擬開發環境的 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
。
標籤是可新增至 GKE 資源的鍵/值組合,有助於整理資源。如果是機群套件,您可以使用機群成員標籤,自訂機群套件的目標叢集。系統不支援其他類型的標籤。
為機群成員新增標籤:
gcloud container fleet memberships update scalable-apps-dev \ --update-labels=env=dev
在本教學課程稍後建立機群套件時,這個標籤可確保資源只會部署在
scalable-apps-dev
叢集,而不會部署在這一系列第一個教學課程中的scalable-apps
叢集。
安裝 Config Sync
在兩個叢集上安裝 Config Sync:
- 前往 Google Cloud 控制台的「Features」(功能) 區段下「Config」(設定) 頁面。
- 按一下「安裝 Config Sync」add。
- 請選取「手動升級」。
- 版本選單應預設為最新版 Config Sync。視需要選取最新版本。
- 在「Installation options」(安裝選項)下方,選取「Install Config Sync on entire fleet (recommended)」(在整個機群上安裝 Config Sync (建議))。
- 按一下「Install Config Sync」(安裝 Config Sync)。
- 在 Config Sync 的「Settings」(設定) 分頁中,查看叢集清單的「Status」(狀態) 欄位。幾分鐘後,狀態會顯示為「待處理」,直到叢集正確設定 Config Sync 為止。狀態最多可能需要 10 分鐘才會變更為「已啟用」。
部署 Cymbal Bank
在本系列的第一個教學課程中,您使用 kubectl
指令將應用程式設定套用至叢集。在本教學課程中,您將使用 Config Sync 的機群套件功能,將這些設定部署到新叢集。在後續章節中,您將看到如何將新資源新增至 Git 存放區,並將這些資源部署到叢集機群。
設定 Cloud Build 的服務帳戶
服務帳戶是一種特殊的帳戶,使用者通常並非真人,而是應用程式。建立服務帳戶時,最佳做法是為單一特定服務或工作建立服務帳戶,並授予服務帳戶精細的角色。在本教學課程中,您將建立服務帳戶,授予 Cloud Build 權限,從 Git 存放區擷取 Kubernetes 資源,並將這些資源部署到叢集。
如要建立服務帳戶並授予必要權限,請完成下列步驟:
建立服務帳戶:
gcloud iam service-accounts create "cymbal-bank-service-account"
新增「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
」做為政策條件。新增「記錄檔寫入者」角色的 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 應用程式建立版本
車隊套件需要語意版本標記,才能瞭解要從哪個版本的存放區部署。建議您在變更存放區時建立新版本,這樣有助於進行版本控管,並在需要時輕鬆還原至穩定版本。
在 GitHub 分支的 Cymbal Bank 網路瀏覽器視窗中,按一下側欄的「Releases」部分下方的「Create a new release」。
選取「選擇代碼」選單,然後輸入
v1.0.0
做為代碼。按一下「建立新代碼」。按一下「發布版本」。
設定驗證方法
如同本系列的第一個教學課程,您必須建立 JWT 來處理使用者驗證,並建立 Kubernetes Secret 來儲存您建立的新叢集的 JWT。建議每個叢集都使用專屬 JWT 進行驗證。
在 Cloud Shell 中建立 JWT:
openssl genrsa -out jwtRS256.key 4096 openssl rsa -in jwtRS256.key -outform PEM -pubout -out jwtRS256.key.pub
建立 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 擷取資源,並部署至整個機群。
在 Cloud Shell 中,設定
configdelivery
Google Cloud CLI 指令的預設位置。與將存放區連結至 Cloud Build 相同,您必須在機群套件功能處於預先發布版時使用us-central1
:gcloud config set config_delivery/location us-central1
建立名為
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
叢集不會受到影響。在下一節中,您會看到機群套件的範例,該套件會以機群中的所有叢集為目標。推出策略欄位可控管資源在叢集中的部署方式。在本例中,您只會部署到一個叢集,因此這個欄位不會改變推出程序。但如果您有多個叢集,這項設定可確保資源檔案會先套用至一個叢集,再移至下一個叢集。方便您監控推出作業的進度。
建立機群套件:
gcloud alpha container fleet packages create cymbal-bank-fleet-package \ --source=fleetpackage-spec.yaml \ --project=PROJECT_ID
確認機群套件是否已建立:
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 處理建構觸發程序可能需要幾分鐘的時間。
建構觸發程序成功完成後,
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 資源。
在 Google Cloud 控制台的 Google Kubernetes Engine 頁面中,選取
scalable-apps-dev
叢集,然後前往「Workloads」(工作負載) 頁面,查看部署在所有 GKE 叢集上的工作負載匯總檢視畫面:Autopilot 調整 Pod 以符合資源要求時,您可能會看到一些錯誤。幾分鐘後,您應該會看到 Pod 開始執行,狀態為「OK」。
如要查看 Cymbal Bank 網頁介面,請完成下列步驟:
在 Google Cloud 控制台的「Google Kubernetes Engine」頁面中,前往「閘道、Service 與 Ingress」頁面。
如要尋找 Cymbal Bank 進入點,請按一下「服務」分頁,然後找出名稱為
frontend
的服務。按一下
frontend
進入點的「Endpoint」連結 (例如198.51.100.143:80
),開啟 Cymbal Bank 網頁介面。
在整個機群中部署資源
接著,假設您想使用新的微服務擴充 Cymbal Bank 應用程式。您想在目前的所有叢集,以及日後新增至機群的任何叢集,部署這項微服務。使用機群套件,即可部署至多個叢集,並在新的叢集上自動部署。
將新資源新增至 Git 存放區
如要示範在應用程式中新增服務,請建立基本的 nginx 部署作業,並將其新增至叢集:
在 Cymbal Bank 的 GitHub 分支網路瀏覽器視窗中,按一下「Add file」(新增檔案),然後按一下「Create new file」(建立新檔案)。
將檔案命名為
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
按一下「Commit changes...」(提交變更...)。
在確認對話方塊中,保持選取「直接提交至
main
分支」,然後按一下「提交變更」。在分支的 Cymbal Bank 存放區主頁面中,選取側欄的「Releases」。
選擇頁面頂端的「草擬新版本」。
選取「選擇代碼」選單,然後輸入
v1.1.0
做為代碼。按一下「建立新代碼」。按一下「發布版本」。
使用機群套件將資源部署至叢集
如要部署新資源,請建立新的車隊套件:
這個機群套件不含選取器欄位,因此會以機群中的所有叢集為目標。這也表示日後新增至機群的叢集,都會自動新增 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
建立機群套件,開始推出作業:
gcloud alpha container fleet packages create new-deployment-fleet-package \ --source=new-deployment-fleet-package.yaml \ --project=PROJECT_ID
確認機群套件是否已建立:
gcloud alpha container fleet packages list
您可以點選提供的連結,查看 Cloud Build 工作的串流記錄。
機群套件會開始在機群中推出 Kubernetes 資源。系統可能需要幾分鐘的時間,才會開始及完成推出作業。
在 Google Cloud 控制台的 Google Kubernetes Engine 頁面中,前往「Workloads」(工作負載) 頁面,即可查看部署在所有 GKE 叢集上的工作負載匯總檢視畫面:
您可以繼續探索機群套件的不同部署策略。 舉例來說,您可以嘗試在分支存放區中新增不同類型的資源,並使用不同的機群套件設定來部署這些資源。您也可以使用機群套件,刪除部署在叢集中的所有資源。如要進一步瞭解車隊套件,請參閱 Config Sync 說明文件中的「部署車隊套件」。
刪除整個機群的資源
就像您可以在整個機群中部署資源一樣,您也可以使用機群套件刪除整個機群中的資源。
如要移除個別資源,大致步驟如下:
- 從 Git 存放區刪除資源。
- 建立新的 Git 版本並建立新的標記。
- 更新「機群套件」
tag
欄位。 - 執行機群套件更新指令。
或者,您也可以刪除機群套件本身,這也會一併刪除機群套件管理的所有資源。
舉例來說,如要移除上一節中的 nginx 部署,請執行下列指令:
gcloud alpha container fleet packages delete new-deployment-fleet-package --force