查看水平 Pod 自動配置器事件


本頁面提供 Google Kubernetes Engine (GKE) 中水平 Pod 自動配置器發出的決策事件相關資訊。分析這些事件,您就能深入瞭解水平 Pod 自動調度控制器如何管理工作負載資源調度,以及其動作背後的決策程序。

水平 Pod 自動配置器會發出決策事件,並以記錄項目的形式儲存在 Cloud Logging 中。

事前準備

請務必完成下列必要條件:

選取或建立專案

您可以使用現有專案,或為本教學課程建立新專案。

  1. In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Trusted Cloud project.

  3. 啟用 API

    Enable the GKE, and Cloud Logging APIs.

    Enable the APIs

    設定 Cloud Shell

    在本教學課程中,您將使用 Cloud Shell 執行 gcloudkubectl 指令。Cloud Shell 是殼層環境,用於管理 Trusted Cloud by S3NS上託管的資源。這個環境已預先安裝 Google Cloud CLIkubectl 指令列工具。

    In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    此時 Cloud Shell 工作階段會在控制台底部的頁框中開啟,

    在本教學課程中執行指令前,請務必將預設專案設為要部署範例應用程式的專案 ID。如果尚未設定,請在 Cloud Shell 中執行下列指令:

    gcloud config set project PROJECT_ID
    

    PROJECT_ID 替換為專案 ID

    必要角色和權限

    如要取得啟用記錄產生功能,以及存取和處理記錄所需的權限,請要求管理員將專案的下列 IAM 角色授予您:

    • 如要在叢集中啟用水平 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 定價

    啟用水平 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:您的 Trusted Cloud 專案 ID。
    • LOCATION:叢集的運算區域或可用區

    這些指令可匯出 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
    

    更改下列內容:

    • CLUSTER_NAME:要建立或更新的叢集名稱。
    • PROJECT_ID:您的 Trusted Cloud 專案 ID。
    • LOCATION:叢集的運算區域或可用區

    這個指令會停用匯出 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 欄位包含下列子欄位:
    • indexSpec metrics 陣列中指標的索引。
    • type:指標類型,值來自 MetricSourceType (例如 Resource、External)。
    • spec:指標名稱和該指標的目標。
    • status狀態條件,與擴充性和擴充限制相關。
    • newest_sample_time:最新指標樣本的時間戳記。
    • newest_sample_age_seconds:自開始計算建議以來,最近樣本的年齡 (以秒為單位)。負值表示指標樣本早於計算開始時間。
    summary 摘要欄位包含建議結果的相關資訊,包括建議的副本數量。如果系統無法提供建議,就會顯示錯誤訊息。summary 欄位包含下列子欄位:
    • dampening:HPA 會對建議及其方向套用抑制措施,盡量減少潛在的資源調度幅度。阻尼作用的發生方式如下:
      • up:向上抑制方向表示 HPA 會假設缺少指標的 Pod 使用 100% 的指標。
      • down:向下抑制方向表示 HPA 會假設缺少指標的 Pod 或未就緒的 Pod,消耗的指標使用率為 0%。
      • none:不會套用阻尼。
    • override:如果未套用 HPA 建議,系統會提供原因 (例如容許度);或none如果沒有覆寫。
    • result:建議結果。如果無法計算建議值,系統會建議副本數量,或顯示錯誤訊息。

    完整建議記錄範例:

    {
      "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 規格中 MinReplicasMaxReplicas 欄位定義的副本數量)。
    leading_metric_index Spec metrics 陣列中的主要指標索引,是與最終建議相關聯的指標。
    normalization 如果有的話,提供穩定性和限制摘要,如下所示:

    stabilization:說明套用穩定功能後的狀態。如果用於調度資源的指標持續波動,系統會使用穩定機制來限制副本數量波動。stabilization 欄位包含下列子欄位:

    • replicas:穩定後的副本數量。
    • reason:套用的穩定類型,可為 scaleUpscaleDown
    • stabilization_window:相關穩定時間週期,以秒為單位。
    • replicas_before_stabilization:穩定前建議的副本數量。

    limitation:說明如何處理套用的縮放限制。這項行為會根據現有的限制,修改 HPA 提出的建議。limitation 欄位包含下列子欄位:

    • replicas:限制後的副本數量。
    • reason:未超出備用資源數量下限或上限的原因。
    • scaling_policy:套用的縮放政策
    • selectPolicy:指定在朝特定方向縮放時,如何選取政策。MaxChange 對應於 MaxChangePolicySelectMinChange 對應於 MinChangePolicySelect。如果縮放功能已停用,則不會顯示 selectPolicy 欄位。
    • replicas_before_limitation:限制前的建議副本數。
    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 自動配置器決策事件,請確認您已完成下列所有步驟:

    • 您已為叢集啟用 Cloud Logging。
    • 您已為叢集啟用 KCP_HPA 記錄。
    • 您已將至少一個正確設定的 hpa 物件部署至叢集。

    如要查看 hpa 物件設定,請執行下列指令:

      kubectl describe hpa $HPA_NAME
    

    如果還是沒有看到任何 KCP_HPA 記錄,請聯絡Trusted Cloud 支援團隊

    後續步驟