本頁面提供 Google Kubernetes Engine (GKE) 中水平 Pod 自動配置器發出的決策事件相關資訊。分析這些事件,您就能深入瞭解水平 Pod 自動調度控制器如何管理工作負載資源調度,以及其動作背後的決策程序。
水平 Pod 自動配置器會發出決策事件,並以記錄項目的形式儲存在 Cloud Logging 中。
事前準備
請務必完成下列必要條件:
選取或建立專案
您可以使用現有專案,或為本教學課程建立新專案。
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Make sure that billing is enabled for your Trusted Cloud project.
-
如要在叢集中啟用水平 Pod 自動調度資源事件記錄功能,請按照下列步驟操作:
Kubernetes Engine 叢集管理員 (
roles/container.clusterAdmin
) -
如要存取記錄檔,並使用記錄檔探索工具和記錄檔分析,請按照下列步驟操作:
記錄檢視器 (
roles/logging.viewer
) - GKE 叢集必須執行
1.31.5-gke.1090000
以上版本,或1.32.1-gke.1260000
以上版本。 - 在 GKE 叢集中啟用 Cloud Logging。適用 Cloud Logging 定價。
CLUSTER_NAME
:要建立或更新的叢集名稱。PROJECT_ID
:您的 Trusted Cloud 專案 ID。LOCATION
:叢集的運算區域或可用區。CLUSTER_NAME
:要建立或更新的叢集名稱。PROJECT_ID
:您的 Trusted Cloud 專案 ID。LOCATION
:叢集的運算區域或可用區。原子建議:水平 Pod 自動調度器每 15 秒會為叢集中每個 HPA 物件監控的指標,產生一個原子建議事件。舉例來說,如果叢集中有兩個 HPA 物件,且每個 HPA 物件監控三個指標,則每 15 秒會記錄六項原子建議。
最終建議:水平 Pod 自動調度器每 15 秒會為叢集中的每個 HPA 物件產生一個最終建議事件。舉例來說,如果叢集中有兩個 HPA 物件,系統每 15 秒就會記錄兩項最終建議。
index
:Spec metrics
陣列中指標的索引。type
:指標類型,值來自 MetricSourceType (例如 Resource、External)。spec
:指標名稱和該指標的目標。status
:狀態條件,與擴充性和擴充限制相關。newest_sample_time
:最新指標樣本的時間戳記。newest_sample_age_seconds
:自開始計算建議以來,最近樣本的年齡 (以秒為單位)。負值表示指標樣本早於計算開始時間。dampening
:HPA 會對建議及其方向套用抑制措施,盡量減少潛在的資源調度幅度。阻尼作用的發生方式如下:up
:向上抑制方向表示 HPA 會假設缺少指標的 Pod 使用 100% 的指標。down
:向下抑制方向表示 HPA 會假設缺少指標的 Pod 或未就緒的 Pod,消耗的指標使用率為 0%。none
:不會套用阻尼。
override
:如果未套用 HPA 建議,系統會提供原因 (例如容許度);或none
如果沒有覆寫。result
:建議結果。如果無法計算建議值,系統會建議副本數量,或顯示錯誤訊息。replicas
:穩定後的副本數量。reason
:套用的穩定類型,可為scaleUp
或scaleDown
。stabilization_window
:相關穩定時間週期,以秒為單位。replicas_before_stabilization
:穩定前建議的副本數量。replicas
:限制後的副本數量。reason
:未超出備用資源數量下限或上限的原因。scaling_policy
:套用的縮放政策。selectPolicy
:指定在朝特定方向縮放時,如何選取政策。MaxChange
對應於 MaxChangePolicySelect;MinChange
對應於 MinChangePolicySelect。如果縮放功能已停用,則不會顯示selectPolicy
欄位。replicas_before_limitation
:限制前的建議副本數。- 您已為叢集啟用 Cloud Logging。
- 您已為叢集啟用
KCP_HPA
記錄。 - 您已將至少一個正確設定的
hpa
物件部署至叢集。 - 請參閱「關於 GKE 記錄檔」。
- 瞭解 GKE 記錄檔。
- 瞭解如何使用查詢範例尋找特定 GKE 記錄。
- 瞭解如何根據指標調整 Pod 自動調度資源功能。
啟用 API
Enable the GKE, and Cloud Logging APIs.
設定 Cloud Shell
在本教學課程中,您將使用 Cloud Shell 執行 gcloud
和 kubectl
指令。Cloud Shell 是殼層環境,用於管理 Trusted Cloud by S3NS上託管的資源。這個環境已預先安裝 Google Cloud CLI 和 kubectl 指令列工具。
In the Trusted Cloud console, activate Cloud Shell.
此時 Cloud Shell 工作階段會在控制台底部的頁框中開啟,
在本教學課程中執行指令前,請務必將預設專案設為要部署範例應用程式的專案 ID。如果尚未設定,請在 Cloud Shell 中執行下列指令:
gcloud config set project PROJECT_ID
將 PROJECT_ID
替換為專案 ID。
必要角色和權限
如要取得啟用記錄產生功能,以及存取和處理記錄所需的權限,請要求管理員將專案的下列 IAM 角色授予您:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
需求條件
啟用水平 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
更改下列內容:
這些指令可匯出 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
停用水平 Pod 自動調度器決策事件
更新叢集,從 --logging
旗標中移除 KCP_HPA
元件:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM
更改下列內容:
這個指令會停用匯出 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 自動配置器產生各類型決策事件的頻率:
總共 兩個 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"
}
最終建議
最終建議記錄檔會說明 Horizontal Pod Autoscaler 提出的整合建議。水平 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"
}
疑難排解
本節說明與 Horizontal Pod Autoscaler 事件相關的問題和解決步驟。
沒有活動
如果沒有看到任何水平 Pod 自動配置器決策事件,請確認您已完成下列所有步驟:
如要查看 hpa
物件設定,請執行下列指令:
kubectl describe hpa $HPA_NAME
如果還是沒有看到任何 KCP_HPA
記錄,請聯絡Trusted Cloud 支援團隊。