大規模調整 GKE 工作負載的資源配置


本教學課程說明如何根據 VPA 建議和用量指標,為 Google Kubernetes Engine (GKE) 工作負載調整適當大小。

瞭解資源適當調整大小的重要性

如果資源不足,容器就無法取得執行應用程式所需的資源,導致應用程式執行緩慢且不可靠。過度佈建不會影響應用程式效能,但可能會提高月結帳單金額。

下表說明 CPU 和記憶體資源配置不足和過多的影響:

資源 佈建狀態 風險 說明
CPU 超過 費用 預留不必要的資源,導致工作負載成本增加。
低於 成效 可能導致工作負載變慢或沒有回應。
未設定 可靠性 CPU 可能會節流至 0,導致工作負載沒有回應。
記憶體 超過 費用 預留不必要的資源,導致工作負載成本增加。
低於 可靠性 可能導致應用程式因記憶體不足 (OOM) 錯誤而終止。
未設定 可靠性 kubelet 可以隨時停止 Pod,並將其標示為失敗。

目標

您在本教學課程中將學習以下內容:

  • 部署範例應用程式。
  • 將 GKE 建議指標從 Monitoring 匯出至 BigQuery。
  • 使用 BigQuery 和 Looker Studio,查看各專案的 GKE 容器建議。

費用

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

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

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

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

事前準備

設定專案

Cloud Shell 已預先安裝本教學課程所需的軟體,包括 Dockerkubectlgcloud CLITerraform。如果您未使用 Cloud Shell,則必須安裝 gcloud CLI。

  1. 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.
  2. Install the Google Cloud CLI.

  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with 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_ID with your Google Cloud project name.

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:

    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
  8. Install the Google Cloud CLI.

  9. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with 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_ID with your Google Cloud project name.

  12. Make sure that billing is enabled for your Google Cloud project.

  13. Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:

    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
  14. 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.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  15. 設定環境

    如要設定環境,請按照下列步驟操作

    1. 設定環境變數:

      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

    2. 設定預設環境變數:

      gcloud config set project $PROJECT_ID
      gcloud config set compute/region $REGION
      gcloud config set compute/zone $ZONE
      
    3. 複製程式碼存放區。

      git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
      
    4. 變更為工作目錄。

      cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations
      

    (選用) 設定範例應用程式

    本節為選用內容,可協助您部署範例應用程式。如要使用現有叢集,請確認叢集已設定 Cloud Monitoring

    如要模擬真實環境,請使用設定指令碼部署 Online Boutique

    下列步驟會安裝範例應用程式,並修改預設設定。舉例來說,這些操作說明會為部分工作負載設定水平 Pod 自動調度器 (HPA),並變更資源要求和限制。

    1. 執行設定指令碼:

      ./scripts/setup.sh
      

      設定指令碼會執行下列動作:

      • 建立 GKE 叢集。
      • 部署 Online Boutique 範例應用程式。
      • 更新 Pod CPU 和記憶體資源要求。
      • adservice工作負載設定 HorizontalPodAutoscaler 資源,模擬真實環境。

      設定指令碼最多可能需要 10 分鐘才能完成。

    2. 確認範例應用程式是否已準備就緒:

      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
      

建立存放區

建立存放區,儲存指標匯出工具映像檔。

  1. 建立新的 Docker 存放區:

    gcloud artifacts repositories create main --repository-format=docker \
        --location=$REGION \
        --description="docker repository"
    
  2. 為 Docker 存放區設定驗證機制:

    gcloud auth configure-docker $REGION-docker.pkg.dev
    
  3. 執行下列指令來部署映像檔:

    gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE
    

部署應用程式

在下一節中,您將使用 Terraform 執行下列工作:

  • 建立服務帳戶,並指派管理及與 Google Cloud 資源互動所需的權限。
  • 將監控檢視者、BigQuery 資料編輯者、BigQuery 資料擁有者、BigQuery 工作使用者和 Cloud Run 叫用者角色授予服務帳戶。
  • 部署 Cloud Run 工作,從 Artifact Registry 提取 Docker 映像檔,並以指定設定執行。
  • 建立 Cloud Scheduler 工作,每天觸發 Cloud Run 服務。
  • 建立 BigQuery 資料集、資料表和檢視區塊,以儲存指標資料和建議。

設定 Terraform

  1. 設定設定環境變數:

    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_DATASETTF_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 用量和使用率指標的時間範圍。預設值為 25,9200 秒,也就是 3 天。
    • METRIC_DISTANCE:傳回資料點的間隔。預設值為 600 秒,也就是每 10 分鐘。

    請根據工作負載需求調整這些值。舉例來說,如果批次工作負載每月執行一次,請將 TF_VAR_RECOMMENDATION_WINDOW_SECONDSMETRIC_WINDOW 更新為 2592000 秒 (30 天)。

部署 Terraform 設定

  1. 初始化、驗證及套用設定:

    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 就會建立及管理資源。

  2. 手動執行 Cloud Scheduler 工作:

    gcloud scheduler jobs run recommendation-schedule --location ${REGION}
    

驗證部署作業

  1. 在「workload-recommendations」詳細資料頁面上,選取「記錄」分頁標籤。

  2. 在 Cloud Run 控制台中確認指標記錄是否正在處理:

    前往 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 指令。

在 BigQuery 中查看容器建議

  1. 前往 Google Cloud 控制台的「BigQuery」頁面:

    前往 BigQuery

  2. 確認資料顯示在 gke_metrics 表格和 container_recommendations 檢視畫面中。視工作負載數量而定,將所有指標寫入 BigQuery 可能需要幾分鐘的時間。

  3. 在查詢編輯器中,選取 container_recommendations 檢視畫面中的所有資料列:

    SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`
    

    這項程式會從 Cloud Monitoring 擷取下列指標:

    • 工作負載詳細資料:專案 ID、叢集名稱、控制器和容器名稱。

    • CPU/記憶體用量和使用率:工作負載使用的 CPU 和記憶體量,以及 CPU 和記憶體的使用率百分比。

    • 要求和限制:工作負載要求的 CPU 和記憶體用量,以及工作負載允許的最大 CPU 和記憶體用量。

    • CPU 和記憶體工作負載建議:根據 Deployment 的 VPA 建議,以及非 Deployment 物件的實際用量和目標使用率,建議應為工作負載分配多少 CPU 和記憶體,確保工作負載順利執行。

在 Looker Studio 中以圖表呈現建議

Looker Studio 是免付費的自助式商業智慧平台,可供您建構及使用資料視覺化、資訊主頁和報表。您可以使用 Looker Studio 連結資料、製作視覺化內容,並與他人分享深入分析。

使用 Looker Studio 將 BigQuery container_recommendations 檢視區塊中的資料視覺化:

  1. 開啟工作負載大小合適度資訊主頁範本
  2. 按一下「使用我自己的資料」
  3. 選取專案。
  4. 在「Dataset」(資料集) 部分,選取 gke_metric_dataset
  5. 選取「Table」(資料表) 的 container_recommendations
  6. 按一下「新增」
  7. 按一下 [Add to Report] (加入報表)

Looker Studio 範本詳細資料

Looker Studio 範本詳細資料頁面提供下列資訊:

  • GKE 工作負載適當大小總覽:提供叢集總覽,包括:
    • 可能發生可靠性和效能問題的盡力服務和可爆量工作負載數量。
    • 可能節省的 CPU 和記憶體資源。正值表示資源過度配置,負值則表示資源配置不足。
  • 工作負載建議:提供工作負載 CPU 和記憶體要求與限制的建議。
  • 有風險的 GKE 工作負載:顯示最有可能發生可靠性和效能問題的工作負載。
  • 記錄 - 工作負載大小合適度 - 我們的表現如何?:提供歷史記錄檢視畫面,瞭解工作負載適當大小調整和減少最佳效能工作負載數量的實作情況。

建議的容器 CPU 要求和限制

如果工作負載要求的 CPU 值和限制值相等,則 QoS 會視為「保證」,且 CPU 建議值會設為 14 天時間範圍內的最大值。否則,系統會使用 14 天內 CPU 要求的建議值第 95 百分位數。

如果 CPU 要求和限制值相等,系統會將 CPU 限制的建議值設為部署物件的 CPU 要求 VPA 建議值上限,以及目標使用率為 70% 的 CPU 使用量。如果工作負載的要求和限制不相同,系統會使用現有的限制比率。

建議的容器記憶體要求和限制

記憶體建議只會針對 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

後續步驟