本頁面提供 Google Kubernetes Engine (GKE) 中水平 Pod 自動配置器發出的決策事件相關資訊。分析這些事件,您就能深入瞭解水平 Pod 自動調度控制器如何管理工作負載資源調度,以及其動作背後的決策程序。
水平 Pod 自動配置器會發出決策事件,並以記錄項目的形式儲存在 Cloud Logging 中。
事前準備
請務必完成下列必要條件:
選取或建立專案
您可以使用現有專案,或為本教學課程建立新專案。
- 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.
 - 
    
    
      
        
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
      (
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
      (
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. 
 - 
  
    
Verify that billing is enabled for your Google 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:您的 Google Cloud 專案 ID。LOCATION:叢集的運算區域或可用區。CLUSTER_NAME:要建立或更新的叢集名稱。PROJECT_ID:您的 Google 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.
Roles required to enable APIs
          To enable APIs, you need the Service Usage Admin IAM
          role (roles/serviceusage.serviceUsageAdmin), which
          contains the serviceusage.services.enable permission. Learn how to grant
          roles.
        
設定 Cloud Shell
在本教學課程中,您將使用 Cloud Shell 執行 gcloud 和 kubectl 指令。Cloud Shell 是殼層環境,用於管理託管在 Google Cloud的資源。這個環境已預先安裝 Google Cloud CLI 和 kubectl 指令列工具。
In the Google 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 記錄,請聯絡Google Cloud 支援團隊。