本教學課程說明如何根據 VPA 建議和用量指標,為 Google Kubernetes Engine (GKE) 工作負載調整適當大小。
瞭解資源適當調整大小的重要性
如果資源配置不足,容器可能無法取得執行應用程式所需的資源,導致應用程式執行緩慢且不穩定。過度佈建不會影響應用程式效能,但可能會增加每月帳單費用。
下表說明 CPU 和記憶體資源配置不足和過多的影響:
資源 | 佈建狀態 | 風險 | 說明 |
---|---|---|---|
CPU | 超過 | 費用 | 預留不必要的資源,導致工作負載成本增加。 |
低於 | 效能 | 可能導致工作負載速度變慢或沒有回應。 | |
未設定 | 可靠性 | CPU 可能會節流至 0,導致工作負載沒有回應。 | |
記憶體 | 超過 | 費用 | 預留不必要的資源,導致工作負載成本增加。 |
低於 | 可靠性 | 可能導致應用程式因記憶體不足 (OOM) 錯誤而終止。 | |
未設定 | 可靠性 | kubelet 可以隨時停止 Pod,並將其標示為失敗。 |
建立存放區
建立存放區,儲存指標匯出工具映像檔。
建立新的 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
部署應用程式
在下一節中,您將使用 Terraform 執行下列工作:
- 建立服務帳戶,並指派管理及與 Google Cloud 資源互動所需的權限。
- 將監控檢視者、BigQuery 資料編輯者、BigQuery 資料擁有者、BigQuery 工作使用者和 Cloud Run 叫用者角色授予服務帳戶。
- 部署 Cloud Run 工作,從 Artifact Registry 提取 Docker 映像檔,並以指定設定執行。
- 建立 Cloud Scheduler 工作,每天觸發 Cloud Run 服務。
- 建立 BigQuery 資料集、資料表和檢視區塊,以儲存指標資料和建議。
設定 Terraform
設定設定環境變數:
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 用量和使用率指標的時間範圍。預設值為 25,9200 秒,也就是 3 天。METRIC_DISTANCE
:傳回資料點的間隔。預設值為 600 秒,也就是每 10 分鐘。
請根據工作負載需求調整這些值。舉例來說,如果批次工作負載每月執行一次,請將
TF_VAR_RECOMMENDATION_WINDOW_SECONDS
和METRIC_WINDOW
更新為2592000
秒 (30 天)。
部署 Terraform 設定
初始化、驗證及套用設定:
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
指令。
在 BigQuery 中查看容器建議
前往 Google Cloud 控制台的「BigQuery」頁面:
確認資料顯示在
gke_metrics
資料表和container_recommendations
檢視畫面中。視工作負載數量而定,將所有指標寫入 BigQuery 可能需要幾分鐘的時間。在查詢編輯器中,選取
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
檢視區塊中的資料視覺化:
- 開啟工作負載大小合適度資訊主頁範本
- 按一下「使用我自己的資料」。
- 選取專案。
- 在「Dataset」(資料集) 部分,選取
gke_metric_dataset
。 - 選取「Table」(資料表) 的
container_recommendations
。 - 按一下「新增」。
- 按一下 [Add to Report] (加入報表)。
Looker Studio 範本詳細資料
Looker Studio 範本詳細資料頁面提供下列資訊:
- GKE 工作負載適當大小總覽:提供叢集總覽,包括:
- 可能發生可靠性和效能問題的盡力服務和可爆量工作負載數量。
- 可能節省的 CPU 和記憶體資源。正值表示資源過度配置,負值則表示資源配置不足。
- 工作負載建議:提供工作負載 CPU 和記憶體要求與限制的建議。
- 有風險的 GKE 工作負載:顯示最有可能發生可靠性和效能問題的工作負載。
- 記錄 - 工作負載大小調整 - 我們的表現如何?:提供歷史記錄檢視畫面,瞭解工作負載適當調整大小和減少最佳效能工作負載數量的實作情況。
建議容器要求的 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 容器建議,請將新專案做為限定範圍專案。
在正式環境中部署這個專案時,請將要分析的所有專案新增至新專案的指標範圍。