本頁面提供 Google Kubernetes Engine (GKE) 中水平 Pod 自動調度器發出的決策事件相關資訊。分析這些事件,有助於深入瞭解水平 Pod 自動調度控制器如何管理工作負載資源調度,以及瞭解其動作背後的決策程序。
水平 Pod 自動配置器會發出決策事件,並以記錄項目的形式儲存在 Cloud Logging 中。
事前準備
請務必完成下列必要條件:
選取或建立專案
您可以使用現有專案,也可以為本教學課程建立新專案。
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
In the Google Cloud console, on the project selector page, select or create 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.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create 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.
-
Verify that billing is enabled for your Google Cloud project.
啟用 API
啟用 GKE 和 Cloud Logging API。
啟用 API 時所需的角色
您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。
設定 Cloud Shell
在本教學課程中,您將使用 Cloud Shell 執行 gcloud 和 kubectl 指令。Cloud Shell 是殼層環境,用於管理託管在 Google Cloud的資源。這個環境已預先安裝 Google Cloud CLI 和 kubectl 指令列工具。
在 Google Cloud 控制台中啟用 Cloud Shell。
此時 Cloud Shell 工作階段會在主控台底部的頁框中開啟,
在本教學課程中執行指令前,請務必將預設專案設為要部署範例應用程式的專案 ID。如果尚未設定,請在 Cloud Shell 中執行下列指令:
gcloud config set project PROJECT_ID
將 PROJECT_ID 替換為專案 ID。
必要角色和權限
如要取得啟用記錄檔產生功能,以及存取和處理記錄檔所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
-
如要在叢集中啟用水平 Pod 自動調度器事件記錄功能,請具備 Kubernetes Engine 叢集管理員 (
roles/container.clusterAdmin) 角色。 -
如要存取記錄檔,並使用 Logs Explorer 和 Observability Analytics:記錄檢視器 (
roles/logging.viewer)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
需求條件
- 您的 GKE 叢集必須執行
1.31.5-gke.1090000以上版本,或1.32.1-gke.1260000以上版本。 - 在 GKE 叢集中啟用 Cloud Logging。適用 Cloud Logging 定價。
- 確認您有要監控的水平 Pod 自動配置器。確認水平 Pod 自動配置器欄位不含機密資料。
費用
啟用 Cloud Logging 並收集水平 Pod 自動配置器決策記錄時,須支付 Cloud Logging 費用。
啟用水平 Pod 自動調度器決策事件
如要建立啟用 KCP_HPA 決策記錄的新叢集,請執行下列指令:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
如要在現有叢集上啟用 KCP_HPA 決策記錄,請執行下列指令:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
更改下列內容:
CLUSTER_NAME:要建立或更新的叢集名稱。PROJECT_ID:您的 Google Cloud 專案 ID。LOCATION:叢集的 Compute 區域或可用區。
這些指令可匯出 KCP_HPA 產生的記錄,並儲存至 Cloud Logging 中的目的地 logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller"。
擷取叢集更新後的記錄設定,並檢查記錄清單,確認已啟用 KCP_HPA 記錄:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--flatten=loggingConfig \
--format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
輸出結果會與下列內容相似:
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_HPA
在 Google Cloud 控制台中查看水平 Pod 自動配置器記錄
您可以在Google Cloud 控制台中監控水平 Pod 自動調度資源的行為。這個檢視畫面提供便利的方式,讓您查看 Cloud Logging 中提供的相同原子和最終建議記錄,不必離開工作負載的環境。
如要在 Google Cloud 控制台中查看水平 Pod 自動調度器記錄,請完成下列步驟:
前往 Google Cloud 控制台的「Workloads」(工作負載) 頁面:
選取由水平 Pod 自動調度器管理的工作負載。
按一下「Scaling」(縮放) 分頁標籤。
您可以在這個分頁中找到與擴縮相關的資訊,包括資源用量、效率資料和記錄。這個分頁的資料有助於找出最有效的工作負載自動調度資源設定。在「記錄」部分,您可以找到「記錄」中的相同資訊,並依類型篩選這些記錄,包括「事件」、「最終建議」和「原子建議」。如要進一步瞭解不同記錄,請參閱「記錄類型」。
停用水平 Pod 自動調度器決策事件
更新叢集,從 --logging 標記中移除 KCP_HPA 元件:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM
更改下列內容:
CLUSTER_NAME:要建立或更新的叢集名稱。PROJECT_ID:您的 Google Cloud 專案 ID。LOCATION:叢集的 Compute 區域或可用區。
這個指令會停用匯出 KCP_HPA 產生的記錄。您無法使用 Cloud Logging 中的 logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" 篩選器擷取這些記錄。
擷取叢集的更新記錄設定,並檢查記錄清單,確認 KCP_HPA 記錄已停用:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--flatten=loggingConfig \
--format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
輸出結果會與下列內容相似:
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER
記錄類型
水平 Pod 自動配置器的決策事件會儲存在 Cloud Logging 中,位於與 GKE 叢集相同專案的 _Default 值區內 logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" 位置。所有記錄的事件都採用 JSON 格式,且位於記錄項目的 jsonPayload
欄位中。
請務必瞭解潛在記錄檔量的儲存空間需求,以及任何效能或成本影響。以下範例說明水平 Pod 自動配置器產生各類型決策事件的頻率:
原子建議:水平 Pod 自動調度器每 15 秒會為叢集中每個 HPA 物件監控的指標,產生一個原子建議事件。舉例來說,如果叢集中有兩個 HPA 物件,且每個 HPA 物件監控三個指標,則每 15 秒會記錄 六項原子建議。
最終建議:水平 Pod 自動調度器每 15 秒會為叢集中的每個 HPA 物件產生一個最終建議事件。舉例來說,如果叢集中有兩個 HPA 物件,系統每 15 秒就會記錄兩項最終建議。
總共 兩個 HPA 物件,每個物件監控 三個指標,您的 KCP_HPA 記錄檔每 15 秒會收到 八個決策事件項目。
完整建議
原子建議記錄會根據水平 Pod 自動調度器上指定的個別指標,說明建議。
原子記錄包含下列欄位:
| 欄位 | 說明 |
|---|---|
start_time |
指出 HPA 開始計算建議的時間。 |
hpa |
與建議相關聯的 HPA 物件名稱。 |
pod_count |
表示提出建議時與 HPA 相關聯的 Pod 總數。這個數字也包括就緒、未就緒和遭忽略的 Pod。 |
metric |
提供用於建議的指標規格和狀態相關資訊。metric 欄位包含下列子欄位:
|
summary |
摘要欄位包含建議結果的相關資訊,包括建議的副本數量。如果系統無法提供建議,就會顯示錯誤訊息。summary 欄位包含下列子欄位:
|
完整建議記錄範例:
{
"insertId": "xiu4bty9k5b279wu",
"jsonPayload": {
"instance": {
"vm_name": "my-unique-vm-identifier",
"zone": "us-central1-a"
},
"atomicRecommendation": {
"startTime": "2025-02-06T20:07:00.573419526Z",
"hpa": "gke-managed-cim/kube-state-metrics",
"metric": {
"newestSampleAgeSeconds": -39.573419526,
"status": {
"averageValue": "25849856"
},
"newestSampleTime": "2025-02-06T20:06:21Z",
"type": "Resource",
"spec": {
"target": {
"averageValue": "400Mi"
},
"name": "memory"
}
},
"podCount": {
"ready": 1,
"total": 1
},
"summary": {
"override": "none",
"replicas": 1,
"dampening": "none"
}
}
},
"resource": {
"type": "k8s_control_plane_component",
"labels": {
"project_id": "my-project-id",
"cluster_name": "my-cluster",
"location": "us-central1-a",
"component_location": "us-central1-a",
"component_name": "hpa-controller"
}
},
"timestamp": "2025-02-06T20:07:00.593777835Z",
"severity": "INFO",
"labels": {
"compute.googleapis.com/resource_name": "my-unique-vm-identifier"
},
"logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
"sourceLocation": {
"file": "event_logger.go",
"line": "61"
},
"receiveTimestamp": "2025-02-06T20:07:05.284753647Z"
}
最終建議
最終建議記錄檔會說明水平 Pod 自動調度器提出的整合建議。水平 Pod 自動調度器會合併不同指標的所有原子建議,建立最終建議並執行。啟動是指 HPA 指示 Deployment 調整備用資源數量,以符合建議值。如果最終建議的 Pod 數量與執行中的 Pod 數量不同,水平 Pod 自動調度器會觸發擴大或縮減事件,以相應調整 Deployment。
最終建議記錄包含下列欄位:
| 欄位 | 說明 |
|---|---|
start_time |
指出 HPA 開始計算建議的時間。 |
hpa |
與建議相關聯的 HPA 物件名稱。 |
target_ref |
指出與建議相關聯的 HPA ScaleTargetRef 物件。 |
configured_size |
HPA 計算並套用這項建議前,最後記錄的副本數量。 |
top_level_override |
如果未套用 HPA 建議的建議 (例如因容許度),則提供原因;或 none如果沒有覆寫。 |
top_level_limit |
如果需要調整 HPA 建議,系統會提供原因 (例如,由於 HPA 規格中 MinReplicas 或 MaxReplicas 欄位定義的副本數量)。 |
leading_metric_index |
Spec metrics 陣列中的主要指標索引,是與最終建議相關聯的指標。 |
normalization |
如果有的話,提供穩定性和限制摘要,如下所示:
|
replicas |
建議的副本數量。 |
actuation_error |
如果啟動失敗,則為與失敗相關的錯誤訊息。 |
actuation_time |
成功啟動的時間戳記。 |
actuation_latency_seconds |
從建議計算開始到啟動成功為止,經過的時間 (以秒為單位)。 |
最終建議記錄範例:
{
"insertId": "qzyv7alfv1sm19ns",
"jsonPayload": {
"finalRecommendation": {
"actuationTime": "2025-02-06T20:06:57.487786873Z",
"targetRef": {
"name": "kube-state-metrics",
"kind": "StatefulSet",
"apiVersion": "apps/v1"
},
"topLevelLimit": "none",
"hpa": "gke-managed-cim/kube-state-metrics",
"topLevelOverride": "noRecommendation",
"replicas": 1,
"configuredSize": 1,
"actuationLatencySeconds": 0.003722451,
"startTime": "2025-02-06T20:06:57.484064422Z"
},
"instance": {
"vm_name": "my-unique-vm-identifier",
"zone": "us-central1-a"
}
},
"resource": {
"type": "k8s_control_plane_component",
"labels": {
"cluster_name": "my-cluster",
"component_location": "us-central1-a",
"component_name": "hpa-controller",
"location": "us-central1-a",
"project_id": "my-project-id"
}
},
"timestamp": "2025-02-06T20:06:57.488193527Z",
"severity": "INFO",
"labels": {
"compute.googleapis.com/resource_name": "my-unique-vm-identifier"
},
"logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
"sourceLocation": {
"file": "event_logger.go",
"line": "61"
},
"receiveTimestamp": "2025-02-06T20:06:57.844898727Z"
}
疑難排解
本節說明與水平 Pod 自動調度資源事件相關的問題和解決步驟。
沒有活動
如果沒有看到任何水平 Pod 自動配置器決策事件,請確認您已完成下列所有步驟:
- 您已為叢集啟用 Cloud Logging。
- 您已為叢集啟用
KCP_HPA記錄。 - 您已將至少一個正確設定的
hpa物件部署至叢集。
如要查看 hpa 物件設定,請執行下列指令:
kubectl describe hpa $HPA_NAME
如果還是沒有看到任何 KCP_HPA 記錄,請聯絡Google Cloud 支援團隊。
後續步驟
- 請參閱「關於 GKE 記錄檔」。
- 瞭解 GKE 記錄檔。
- 瞭解如何使用查詢範例尋找特定 GKE 記錄。
- 進一步瞭解水平自動調度 Pod 資源。