IT 管理員和營運人員可以透過這個系列的教學課程,瞭解如何部署、執行及管理 Google Kubernetes Engine (GKE) 中運作的現代化應用程式環境。在本系列教學課程中,您將瞭解如何設定監控和快訊、擴充工作負載,以及模擬失敗,所有操作都使用 Cymbal Bank 範例微服務應用程式:
- 建立叢集並部署範例應用程式
- 使用 Google Cloud Managed Service for Prometheus 監控
- 調度工作負載資源 (本教學課程)
- 模擬失敗
- 集中管理變更
總覽與目標
Cymbal Bank 等消費者應用程式的使用者人數通常會隨時間而異。理想情況下,網站應能應付流量暴增的情況,不會變慢或發生其他問題,但機構不必花錢購買實際不需要的雲端資源。自動調整資源配置就是解決方案 Google Cloud 之一。
在本教學課程中,您將瞭解如何在 GKE 叢集中設定叢集和工作負載,以便使用內建的 Kubernetes 指標,以及 Cloud Monitoring 和 Cloud Trace 的自訂指標進行調度。您將瞭解如何完成下列工作:
- 在 Cloud Monitoring 中啟用 Trace 的自訂指標。
- 自訂指標可讓您使用 Kubernetes 叢集以外的其他監控資料或外部輸入內容進行調整,例如網路流量或 HTTP 回應代碼。
- 設定水平 Pod 自動調度器,這項 GKE 功能可根據指定指標,自動增減工作負載的 Pod 數量。
- 模擬應用程式負載,並查看叢集自動調度器和水平 Pod 自動調度器如何回應。
費用
啟用 GKE 並部署 Cymbal Bank 範例應用程式,表示您將為 GKE 叢集支付費用 Google Cloud ,直到停用 GKE 或刪除專案為止。如需相關費用資訊,請參閱價格頁面。
您也必須支付執行 Cymbal Bank 範例應用程式時產生的其他 Google Cloud 費用,例如 Compute Engine VM 和 Trace 的費用。
事前準備
如要瞭解如何調度部署作業,請先完成第一個教學課程,建立使用 Autopilot 的 GKE 叢集,並部署 Cymbal Bank 範例微服務型應用程式。
建議您依序完成這組可擴充應用程式的教學課程。完成一系列教學課程後,您將學到新技能,並使用其他 Google Cloud 產品和服務。
您也需要授予 IAM 權限,工作負載和水平 Pod 自動調度器才能寫入追蹤記錄及讀取自訂指標:
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/cloudtrace.agent \
--member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
--condition=None
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/monitoring.metricWriter \
--member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
--condition=None
更改下列內容:
PROJECT_ID:您的 Google Cloud 專案 ID。PROJECT_NUMBER:您的 Google Cloud 專案編號。
使用 default Kubernetes
ServiceAccount 的 Pod 會獲得下列存取權:default
roles/cloudtrace.agent:將延遲資訊等追蹤資料寫入 Trace。roles/monitoring.metricWriter:將指標寫入 Cloud Monitoring。
設定自訂指標收集功能
您可以設定水平 Pod 自動調度器,使用 Kubernetes 內建的基本 CPU 和記憶體指標,也可以使用 Cloud Monitoring 的自訂指標,例如每秒 HTTP 要求數或 SELECT 陳述式數量。自訂指標不需變更應用程式即可運作,並讓叢集更深入瞭解應用程式的整體效能和需求。在本教學課程中,您將瞭解如何使用內建和自訂指標。
如要允許水平 Pod 自動配置器從 Monitoring 讀取自訂指標,您必須在叢集中安裝自訂指標 - Stackdriver 轉接器。
將自訂指標 Stackdriver 轉接器部署至叢集:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter.yaml如要允許 Stackdriver 轉接器從叢集取得自訂指標,請使用 GKE 適用的工作負載身分聯盟,授予
custom-metrics-stackdriver-adapterKubernetes ServiceAccountroles/monitoring.viewer角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter" \ --role=roles/monitoring.viewer \ --condition=None
設定水平 Pod 自動配置器
GKE Autopilot 可透過幾種不同方式擴充。在本教學課程中,您將瞭解如何透過下列方法調度叢集資源:
- 水平 Pod 自動調度器:調整工作負載的 Pod 數量。
- 叢集自動配置器:調整叢集中可用的節點資源。
這兩種方法可以搭配使用,因此當應用程式的 Pod 數量變更時,支援這些 Pod 的節點資源也會變更。
您也可以使用其他實作方式,以水平自動調度 Pod 資源為基礎調度 Pod 資源,或使用垂直自動調度 Pod 資源功能調整 Pod 的 CPU 和記憶體要求,而非 Pod 數量。
在本教學課程中,您將使用內建指標為 userservice Deployment 設定水平 Pod 自動調度器,並使用自訂指標為 frontend Deployment 設定水平 Pod 自動調度器。
如果是您自己的應用程式,請與應用程式開發人員和平台工程師合作,瞭解他們的需求,並設定 Horizontal Pod Autoscaler 規則。
調度 userservice Deployment 資源
Cymbal Bank 範例應用程式的使用者人數增加時,userservice服務會消耗更多 CPU 資源。您可以使用 HorizontalPodAutoscaler 物件,控制應用程式對載入作業的回應方式。在 HorizontalPodAutoscaler 的 YAML 資訊清單中,您可以定義要讓水平 Pod 自動配置器調度哪個 Deployment、要監控哪些指標,以及要執行的副本數量下限和上限。
查看
HorizontalPodAutoscaler範例資訊清單,瞭解userserviceDeployment:這個資訊清單會執行下列作業:
- 將擴充期間的副本數量上限設為
50。 - 將縮減期間的執行個體數量下限設為
5。 - 使用內建的 Kubernetes 指標做出資源調度決策。在這個範例中,指標是 CPU 使用率,目標使用率為 60%,可避免使用率過高或過低。
- 將擴充期間的副本數量上限設為
將資訊清單套用至叢集:
kubectl apply -f extras/postgres-hpa/hpa/userservice.yaml
調度 frontend Deployment 資源
在上一節中,您已根據 CPU 使用率的內建 Kubernetes 指標,在 userservice Deployment 上設定水平 Pod 自動調度器。對於 frontend 部署作業,您可能希望改為根據傳入的 HTTP 要求數量進行調度。這個方法會使用 Stackdriver 介面卡,從 Monitoring 讀取 HTTP(S) 負載平衡器 Ingress 物件的自訂指標。
查看
frontendDeployment 的HorizontalPodAutoscaler資訊清單:這個資訊清單會使用下列欄位:
spec.scaleTargetRef:要調整大小的 Kubernetes 資源。spec.minReplicas:副本數量下限,在本範例中為5。spec.maxReplicas:副本數量上限,在本範例中為25。spec.metrics.*:要使用的指標。在本範例中,這是每秒的 HTTP 要求數,也就是您部署的介面卡提供的 Monitoring 自訂指標。spec.metrics.external.metric.selector.matchLabels:縮放時要篩選的特定資源標籤。
從
frontendIngress 負載平衡器找出轉送規則名稱:export FW_RULE=$(kubectl get ingress frontend -o=jsonpath='{.metadata.annotations.ingress\.kubernetes\.io/forwarding-rule}') echo $FW_RULE輸出結果會與下列內容相似:
k8s2-fr-j76hrtv4-default-frontend-wvvf7381將轉送規則新增至資訊清單:
sed -i "s/FORWARDING_RULE_NAME/$FW_RULE/g" "extras/postgres-hpa/hpa/frontend.yaml"這個指令會將
FORWARDING_RULE_NAME取代為您儲存的轉送規則。將資訊清單套用至叢集:
kubectl apply -f extras/postgres-hpa/hpa/frontend.yaml
模擬負載
在本節中,您將使用負載產生器模擬流量尖峰,並觀察副本數量和節點數量隨著時間增加,以因應負載增加的情況。接著停止產生流量,觀察副本和節點數量是否因應減少。
開始前,請檢查水平 Pod 自動調度資源的狀態,並查看目前使用的副本數量。
取得
HorizontalPodAutoscaler資源的狀態:kubectl get hpa輸出內容大致如下,顯示有 1 個
frontend副本和 5 個userservice副本:NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE frontend Deployment/frontend <unknown>/5 (avg) 5 25 1 34s userservice Deployment/userservice 0%/60% 5 50 5 4m56sCymbal Bank 範例應用程式包含
loadgenerator服務。這項服務會持續傳送模仿使用者的要求至前端,並定期建立新帳戶,模擬帳戶間的交易。在本機公開
loadgenerator網頁介面。您可以使用這個介面模擬 Cymbal Bank 範例應用程式的負載:kubectl port-forward svc/loadgenerator 8080如果看到錯誤訊息,請在 Pod 執行時重試。
在電腦的瀏覽器中開啟負載產生器網頁介面:
- 如果使用本機殼層,請開啟瀏覽器並前往 http://127.0.0.1:8080。
- 如果您使用 Cloud Shell,請依序點按 「網頁預覽」和「透過以下通訊埠預覽:8080」。
在負載產生器網頁介面中,如果「Failures」(失敗) 值顯示
100%,請完成下列步驟來更新測試設定:- 按一下失敗率計數器旁的「停止」按鈕。
- 在「狀態」下方,點選「新測試」選項。
- 將「Host」值更新為 Cymbal Bank 進入點的 IP 位址。
- 按一下「Start Swarming」。
在負載產生器網頁介面中,按一下「圖表」分頁標籤,觀察一段時間內的效能。查看要求數量和資源用量。
開啟新的終端機視窗,並監控
frontend和userservicePod 的副本數量:kubectl get hpa -w副本數量會隨著負載增加而增加。叢集會辨識出設定的指標達到定義的門檻,並使用水平 Pod 自動調度器調度 Pod 數量,因此 scaleUp 動作可能需要約十分鐘。
以下輸出範例顯示,隨著負載產生器執行,副本數量會增加:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS frontend Deployment/frontend 5200m/5 (avg) 5 25 13 userservice Deployment/userservice 71%/60% 5 50 17開啟另一個終端機視窗,然後檢查叢集中的節點數量:
gcloud container clusters list \ --filter='name=scalable-apps' \ --format='table(name, currentMasterVersion, currentNodeVersion, currentNodeCount)' \ --location="CONTROL_PLANE_LOCATION"將
CONTROL_PLANE_LOCATION替換為叢集控制層的 Compute Engine 位置。如果是區域叢集,請提供區域;如果是可用區叢集,請提供可用區。節點數量也從初始數量增加,以容納新的副本。節點數量增加是由 GKE Autopilot 驅動。您不需要為這個節點規模設定任何項目。
開啟負載產生器介面,然後按一下「停止」結束測試。
再次檢查副本和節點數量,並觀察數量是否隨著負載減少而減少。縮減作業可能需要一段時間,因為 Kubernetes
HorizontalPodAutoscaler資源中副本的預設穩定時間範圍為五分鐘。
在實際環境中,環境中的節點和 Pod 數量會自動增減,與模擬負載的情況相同。Cymbal Bank 範例應用程式的設計可因應這類擴充作業。請洽詢應用程式營運人員和網站可靠性工程 (SRE) 或應用程式開發人員,瞭解他們的工作負載是否能從這些擴充功能獲益。
清除所用資源
Cymbal Bank 的一系列教學課程是循序漸進的,完成一系列教學課程後,您將學到新技能,並使用其他 Google Cloud 產品和服務。
如果您想暫時休息,之後再繼續下一個教學課程,並避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除您建立的專案。
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
後續步驟
在下一個教學課程中,瞭解如何模擬 GKE 中的故障。