本教學課程說明如何根據 VPA 建議和用量指標,適當調整 Google Kubernetes Engine (GKE) 工作負載的大小。
瞭解資源大小適中為何重要
如果資源不足,容器就無法取得執行應用程式所需的資源,導致應用程式執行緩慢且不可靠。過度佈建不會影響應用程式效能,但可能會增加每月帳單費用。
下表說明 CPU 和記憶體資源配置不足和過多的影響:
| 資源 | 佈建狀態 | 風險 | 說明 |
|---|---|---|---|
| CPU | 超過 | 費用 | 預留不必要的資源,導致工作負載成本增加。 |
| 低於 | 效能 | 可能導致工作負載速度變慢或沒有回應。 | |
| 未設定 | 可靠性 | CPU 可能會節流至 0,導致工作負載沒有回應。 | |
| 記憶體 | 超過 | 費用 | 預留不必要的資源,導致工作負載成本增加。 |
| 低於 | 可靠性 | 可能導致應用程式因記憶體不足 (OOM) 錯誤而終止。 | |
| 未設定 | 可靠性 | kubelet 可以隨時停止 Pod,並將其標示為失敗。 |
目標
您在本教學課程中將學習以下內容:
- 部署範例應用程式。
- 將 GKE 建議指標從 Monitoring 匯出至 BigQuery。
- 使用 BigQuery 和 Looker Studio 查看各專案的 GKE 容器建議。
費用
在本文件中,您會使用下列 Google Cloud的計費元件:
您可以使用 Pricing Calculator,根據預測用量估算費用。
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。
事前準備
設定專案
Cloud Shell 已預先安裝本教學課程所需的軟體,包括 Docker、kubectl、gcloud CLI 和 Terraform。如果您未使用 Cloud Shell,則必須安裝 gcloud CLI。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable cloudresourcemanager.googleapis.com
container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com -
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable cloudresourcemanager.googleapis.com
container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/serviceusage.serviceUsageAdmin, roles/container.clusterAdmin, roles/iam.serviceAccountAdmin, roles/iam.securityAdmin, roles/container.admingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Replace the following:
PROJECT_ID: Your project ID.USER_IDENTIFIER: The identifier for your user account. For example,myemail@example.com.ROLE: The IAM role that you grant to your user account.
設定環境變數:
export PROJECT_ID=PROJECT_ID export REGION=us-central1 export ZONE=us-central1-f export IMAGE=$REGION-docker.pkg.dev/$PROJECT_ID/main/vpa-recs-image:latest並將
PROJECT_ID替換為 Google Cloud 專案 ID。設定預設環境變數:
gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION gcloud config set compute/zone $ZONE複製程式碼存放區。
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples切換至工作目錄。
cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations執行設定指令碼:
./scripts/setup.sh設定指令碼會執行下列作業:
- 建立 GKE 叢集。
- 部署 Online Boutique 範例應用程式。
- 更新 Pod 的 CPU 和記憶體資源要求。
- 為
adservice工作負載設定 HorizontalPodAutoscaler 資源,模擬真實環境。
設定指令碼最多可能需要 10 分鐘才能完成。
確認範例應用程式是否已準備就緒:
kubectl get deployment輸出結果會與下列內容相似:
NAME READY UP-TO-DATE AVAILABLE AGE adservice 2/2 2 2 4m54s cartservice 1/1 1 1 4m55s checkoutservice 1/1 1 1 4m56s currencyservice 1/1 1 1 4m55s emailservice 1/1 1 1 4m56s frontend 1/1 1 1 4m55s loadgenerator 1/1 1 1 4m55s paymentservice 1/1 1 1 4m55s productcatalogservice 1/1 1 1 4m55s recommendationservice 1/1 1 1 4m56s redis-cart 1/1 1 1 4m54s shippingservice 1/1 1 1 4m54s建立新的 Docker 存放區:
gcloud artifacts repositories create main --repository-format=docker \ --location=$REGION \ --description="docker repository"設定 Docker 存放區的驗證機制:
gcloud auth configure-docker $REGION-docker.pkg.dev執行下列指令來部署映像檔:
gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE- 建立服務帳戶,並指派管理及與 Google Cloud 資源互動所需的權限。
- 將監控檢視者、BigQuery 資料編輯者、BigQuery 資料擁有者、BigQuery 工作使用者和 Cloud Run 叫用者角色授予服務帳戶。
- 部署 Cloud Run 工作,從 Artifact Registry 提取 Docker 映像檔,並以指定設定執行。
- 建立 Cloud Scheduler 工作,每天觸發 Cloud Run 服務。
- 建立 BigQuery 資料集、資料表和檢視區塊,以儲存指標資料和建議。
設定設定環境變數:
export TF_VAR_BIGQUERY_DATASET=gke_metrics_dataset export TF_VAR_BIGQUERY_TABLE=gke_metrics export TF_VAR_RECOMMENDATION_WINDOW_SECONDS=1209600 export TF_VAR_RECOMMENDATION_DISTANCE=86400 export TF_VAR_LATEST_WINDOW_SECONDS=600 export TF_VAR_METRIC_WINDOW=259200 export TF_VAR_METRIC_DISTANCE=600這項指令包含下列項目:
TF_VAR_BIGQUERY_DATASET和TF_VAR_BIGQUERY_TABLE:保存 GKE 指標資料。TF_VAR_RECOMMENDATION_WINDOW_SECONDS:VPA 建議的時間範圍。預設值為 1,209,600 秒,也就是 14 天。TF_VAR_RECOMMENDATION_DISTANCE:傳回 VPA 建議資料點的間隔。預設值為 86,400 秒,或每 1 天。TF_VAR_LATEST_WINDOW_SECONDS:取得最新要求和限制資源值的時間範圍。預設值為 600 秒,也就是 10 分鐘。METRIC_WINDOW:建立 GKE 用量和使用率指標的時間範圍。預設值為 259,200 秒,也就是 3 天。METRIC_DISTANCE:傳回資料點的間隔。預設值為 600 秒,也就是每 10 分鐘。
請根據工作負載需求調整這些值。舉例來說,如果批次工作負載每月執行一次,請將
TF_VAR_RECOMMENDATION_WINDOW_SECONDS和METRIC_WINDOW更新為2592000秒 (30 天)。初始化、驗證及套用設定:
terraform -chdir=terraform init terraform -chdir=terraform validate terraform -chdir=terraform apply -var project_id=$PROJECT_ID -var region=$REGION -var image=$IMAGE這個指令會提供執行計畫,並在進行任何變更前要求您核准。查看方案,如果一切如預期,請輸入
yes繼續。apply 指令順利執行後,Terraform 就會建立及管理您的資源。
手動執行 Cloud Scheduler 工作:
gcloud scheduler jobs run recommendation-schedule --location ${REGION}在「
workload-recommendations」詳細資料頁面上,選取「記錄」分頁標籤。在 Cloud Run 控制台中確認指標記錄是否正在處理:
記錄會顯示寫入 BigQuery 的指標。輸出內容應如下所示:
INFO - Building Row INFO - Successfully wrote 12 rows to BigQuery table [PROJECT_ID].gke_metric_dataset.gke_metrics. INFO - Run Completed如果輸出內容不符,請等待五分鐘,然後執行
gcloud scheduler jobs run recommendation-schedule --location $REGION指令。前往 Google Cloud 控制台的「BigQuery」頁面:
確認資料顯示在
gke_metrics資料表和container_recommendations檢視畫面中。視工作負載數量而定,將所有指標寫入 BigQuery 可能需要幾分鐘的時間。在查詢編輯器中,選取
container_recommendations檢視畫面中的所有資料列:SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`這項程式會從雲端監控服務擷取下列指標:
工作負載詳細資料:專案 ID、叢集名稱、控制器和容器名稱。
CPU/記憶體用量和使用率:工作負載使用的 CPU 和記憶體量,以及 CPU 和記憶體的使用百分比。
要求和限制:工作負載要求的 CPU 和記憶體量,以及工作負載可用的 CPU 和記憶體量上限。
CPU 和記憶體工作負載建議:根據 Deployment 的 VPA 建議,以及非 Deployment 物件的實際用量和目標使用率,建議應為工作負載分配多少 CPU 和記憶體,確保工作負載順利執行。
- 開啟工作負載大小合適度資訊主頁範本
- 按一下「使用我自己的資料」。
- 選取專案。
- 在「Dataset」(資料集) 部分,選取
gke_metric_dataset。 - 選取「資料表」的
container_recommendations。 - 按一下「新增」。
- 按一下 [Add to Report] (加入報表)。
- GKE 工作負載適當大小總覽:提供叢集總覽,包括:
- 可能發生可靠性和效能問題的盡量爭取和可爆發工作負載數量。
- 可能節省的 CPU 和記憶體資源。正值表示資源過度配置,負值則表示資源配置不足。
- 工作負載建議:提供工作負載 CPU 和記憶體要求與限制的建議。
- 有風險的 GKE 工作負載:顯示最有可能發生可靠性和效能問題的工作負載。
- 記錄 - 工作負載大小合適度 - 我們的表現如何?:提供歷史記錄檢視畫面,瞭解工作負載適當大小調整和減少最佳效能工作負載數量的實作情況。
- 如要進一步瞭解 GKE 成本最佳化,請參閱「在 GKE 中執行成本效益最高的 Kubernetes 應用程式的最佳做法」。
- 請參閱 Google Cloud 「Google Cloud Well-Architected Framework:成本最佳化」一文,瞭解如何設計及採用最佳做法,盡可能提高工作負載的成本效益。
- 如要進一步瞭解如何在需求量較低的時段最佳化叢集成本,請參閱「在離峰時段縮減 GKE 叢集規模以降低成本」。
- 如要進一步瞭解如何最佳化 GKE 成本,請參閱「使用 Monitoring 監控 GKE 叢集,以實現成本最佳化」。
設定環境
如要設定環境,請按照下列步驟操作
(選用) 設定範例應用程式
本節為選用內容,可協助您部署範例應用程式。如要使用現有叢集,請確認叢集已設定 Cloud Monitoring。
如要模擬真實環境,請使用設定指令碼部署 Online Boutique。
下列步驟會安裝範例應用程式,並修改預設設定。舉例來說,這些操作說明會為部分工作負載設定水平 Pod 自動調度器 (HPA),並變更資源要求和限制。
建立存放區
建立存放區,儲存指標匯出工具映像檔。
部署應用程式
在下一節中,您將使用 Terraform 執行下列工作:
設定 Terraform
部署 Terraform 設定
驗證部署作業
在 BigQuery 中查看容器建議
在 Looker Studio 中以圖表呈現建議
Looker Studio 是免費的自助式商業智慧平台,可供您建構及使用資料視覺化、資訊主頁和報表。您可以使用 Looker Studio 連結資料、製作視覺化圖表,以及與其他人分享深入分析資料。
使用 Looker Studio 將 BigQuery container_recommendations 檢視區塊中的資料視覺化:
Looker Studio 範本詳細資料
Looker Studio 範本詳細資料頁面提供下列資訊:
建議的容器 CPU 要求和限制
如果工作負載要求的 CPU 值和限制值相等,QoS 會視為「保證」,且 CPU 建議值會設為 14 天時間範圍內的最大值。否則,系統會使用 14 天內 CPU 要求的建議值第 95 百分位數。
如果 CPU 要求和限制值相等,系統會將 CPU 限制的建議值設為部署物件的 CPU 要求 VPA 建議值上限,以及 CPU 使用率 (目標使用率為 70%)。如果工作負載的要求和限制不相同,系統會使用現有的限制比率。
建議的容器記憶體要求和限制
記憶體建議只會針對 Deployment 物件使用 VPA 建議上限,並以 80% 的目標使用率為上限,確保工作負載的可靠性。您可以在 container_recommendation 檢視表的查詢中更新目標用量值。
建議您將要求和限制的記憶體用量設為相同,因為記憶體是不可壓縮的資源。記憶體用盡時,Pod 必須關閉。為避免 Pod 遭到終止並導致環境不穩定,您必須將要求的記憶體設為記憶體限制。
建議優先順序
系統會為每個資料列指派優先順序值,根據建議顯示需要立即處理的工作負載。CPU 和記憶體的單位不同。為統一單位,系統會使用預先定義的 CPU 和記憶體之間的E2 機型隨選價格比率做為近似值,將記憶體單位換算為 CPU 單位。
優先順序的計算公式如下:
priority = (CPU requested - CPU recommendation) + ((memory requested -
memory recommendation) / (vCPUs on-demand pricing /memory on-demand pricing ))
如果是 Autopilot,部署設定要求的資源總數應在支援的最小值和最大值範圍內。
查看多項專案的 VPA 建議
如要查看多個專案的 VPA 容器建議,請將新專案設為限定範圍專案。
在正式環境中部署這個專案時,請將要分析的所有專案新增至新專案的指標範圍。
清除所用資源
為避免因為本教學課程所用資源,導致系統向 Google Cloud 收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程而建立的專案。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID