收集垂直 Pod 自動調度資源事件記錄

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

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

事前準備

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

選取或建立專案

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

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. 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) 取得這項權限。瞭解如何授予角色

啟用 API

設定 Cloud Shell

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

在 Google Cloud 控制台中啟用 Cloud Shell。

啟用 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.36.0-gke.1601000 以上版本。
  • 在 GKE 叢集中啟用 Cloud Logging。
  • 確認您要監控垂直 Pod 自動配置器。確認垂直 Pod 自動調度資源欄位不含機密資料。

費用

啟用 Cloud Logging 並收集垂直 Pod 自動調度決策記錄時,須支付 Cloud Logging 費用

啟用垂直 Pod 自動調度器決策記錄

下列各節中的指令可匯出 KCP_VPA 產生的記錄,並將記錄儲存在 Cloud Logging 內的 logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fvpa-controller" 目的地。

在新叢集上啟用記錄

如要建立啟用 KCP_VPA 決策記錄的新叢集,請執行下列指令。

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --logging=SYSTEM,KCP_VPA

更改下列內容:

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

在現有叢集上啟用記錄

如要在現有叢集上啟用 KCP_VPA 決策記錄,請執行下列操作:

  1. 檢查叢集的現有設定。如果叢集已設定特定記錄元件,請決定要新增或覆寫現有的記錄設定。

  2. 如要啟用垂直 Pod 自動調度器決策記錄,請執行下列指令。如要新增至現有設定,請一併將現有的記錄設定新增至指令。

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --project=PROJECT_ID \
        --logging=SYSTEM,KCP_VPA
    

    更改下列內容:

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

確認記錄功能已啟用

如要確認叢集是否已啟用 KCP_VPA 決策記錄,請擷取叢集的更新記錄設定,並查看記錄清單。如要進行此操作,請執行以下指令:

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --flatten=loggingConfig \
    --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'

更改下列內容:

在叢集上啟用 KCP_VPA 決策記錄後,輸出內容會類似於下列內容:

SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_VPA

在 Logs Explorer 中查看垂直 Pod 自動調度程式記錄

您可以在 Logs Explorer 中監控垂直 Pod 自動配置器的行為。如要查看垂直 Pod 自動調度器記錄,請完成下列步驟:

  1. 前往「Logs Explorer」頁面:

    前往 Logs Explorer

  2. 選取「所有記錄名稱」,然後搜尋記錄名稱中的 vpa-controller

    記錄探索工具會顯示所有垂直 Pod 自動配置器記錄,包括專案中啟用垂直 Pod 自動配置器記錄的所有叢集記錄。

  3. 你可以使用叢集名稱或工作負載名稱篩選記錄。舉例來說,如要列出叢集中特定工作負載的事件,請使用下列查詢指定叢集名稱和工作負載名稱:

    resource.labels.cluster_name="CLUSTER_NAME" AND
    jsonPayload.target.name="WORKLOAD_NAME"
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • WORKLOAD_NAME:工作負載名稱。

停用垂直自動調度 Pod 資源決策記錄

  1. 如要停用現有叢集的 KCP_VPA 決策記錄,請執行下列指令:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --project=PROJECT_ID \
        --logging=SYSTEM
    
  2. 確認KCP_VPA決策記錄已停用。如要這麼做,請執行下列指令:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --flatten=loggingConfig \
        --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
    

    在叢集上停用 KCP_VPA 決策記錄時,輸出內容會類似於下列內容:

    SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER
    

記錄類型

垂直 Pod 自動配置器的決策事件會儲存在 Cloud Logging 中,位置與 GKE 叢集位於同一個專案的 logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fvpa-controller"_Default bucket。所有記錄的事件都採用 JSON 格式,且位於記錄項目的 jsonPayload 欄位中。

產生的記錄類型和頻率取決於為工作負載設定的垂直自動調度 Pod 資源模式。VPA 記錄分為四種類型,依據執行的作業分類:

  • 更新建議:每個垂直 Pod 自動調度資源器每分鐘都會產生一則新的更新建議記錄。
  • 移除 Pod:當垂直 Pod 自動配置器決定以 Recreate 模式調整大小時,每個垂直 Pod 自動配置器會為每個 Pod 產生一個移除 Pod 記錄。
  • 套用移除建議:當垂直 Pod 自動調度器決定以 Recreate 模式調整大小時,每個垂直 Pod 自動調度器會為每個 Pod 產生一個套用建議記錄。
  • 套用建議 (就地):當垂直 Pod 自動調度器決定以 InPlaceOrRecreate 模式調整大小時,每個垂直 Pod 自動調度器會為每個 Pod 產生一個套用建議 (就地) 記錄。

控制器可發出的記錄類型取決於垂直 Pod 自動配置器的模式。下表列出各模式可發出的記錄。

垂直 Pod 自動調度器模式 可發出的記錄類型
Auto (已淘汰) 或 Recreate
  • 更新建議
  • 剔除 Pod
  • 在驅逐時套用建議
InPlaceOrRecreate
  • 更新建議
  • 在適當位置套用建議
  • 驅逐 Pod (如果 In-place 調整大小失敗,可能會出現這類記錄)
  • 在驅逐時套用建議 (如果 In-place 大小調整失敗,可能會出現這類記錄)

如果垂直 Pod 自動調度器處於 InPlaceOrRecreate 模式,當 In-place resize 失敗時,自動調度器的行為與 Recreate 模式相同。

更新建議

您可以使用下列垂直 Pod 自動調度資源模式產生更新建議記錄:Auto (已淘汰)、RecreateInPlaceOrRecreate

這項決策記錄的 jsonPayload 包含下列欄位:

欄位 說明
vpaName VPA 名稱。
vpaNamespace VPA 的命名空間。
target 這個 VPA 的目標工作負載。
  • name:工作負載名稱。
  • kind:工作負載類型。
  • apiVersion:工作負載的 API 版本。
operation 正在執行的作業。值為下列其中之一:
  • UPDATE_RECOMMENDATION
  • EVICT_POD
  • APPLY_RECOMMENDATION_IN_PLACE
  • APPLY_RECOMMENDATION_ON_EVICTION
state 作業狀態。值為下列其中之一:
  • SUCCEEDED
  • SKIPPED
  • FAILED
reason

原因說明作業遭到略過或失敗的原因。

針對作業 APPLY_RECOMMENDATION_IN_PLACEAPPLY_RECOMMENDATION_ON_EVICTION 成功案例,這項功能會說明由於套用修改 (例如設下上限或自動駕駛資源比例),作業 UPDATE_RECOMMENDATION 中套用的最佳化建議可能與原始最佳化建議不同。

recommendedResources 原始建議。這與 VPA 物件中的 Status.Recommendation 欄位完全相同。
  • containerName:這項建議適用的容器名稱。
  • target:可套用的實際建議。
  • lowerBound:建議的下限。
  • upperBound:建議的上限。
  • uncappedTarget:建議值,上限或下限設限前。
confidence 建議的信心指數。狀態為 succeeded 時,系統會提供這個欄位。值為下列其中之一:
  • LOW:VPA 處理的指標樣本少於 10 個。
  • HIGH:VPA 已處理 10 個以上的指標樣本。

更新建議記錄範例:

{
 "insertId": "ehz6w9d304v4zttg",
 "jsonPayload": {
   "state": "SUCCEEDED",
   "instance": {
     "vm_name": "my-unique-vm-identifier",
     "zone": "us-central1-c"
   },
   "recommendedResources": [
     {
       "lowerBound": {
         "memory": "5Mi",
         "cpu": "5m"
       },
       "containerName": "nginx",
       "uncappedTarget": {
         "memory": "5Mi",
         "cpu": "1m"
       },
       "upperBound": {
         "memory": "5Mi",
         "cpu": "5m"
       },
       "target": {
         "memory": "5Mi",
         "cpu": "5m"
       }
     }
   ],
   "operation": "UPDATE_RECOMMENDATION",
   "target": {
     "name": "my-workload",
     "kind": "Deployment",
     "apiVersion": "apps/v1"
   },
   "vpaNamespace": "default",
   "vpaName": "my-vpa"
 },
 "resource": {
   "type": "k8s_control_plane_component",
   "labels": {
     "component_location": "us-central1-c",
     "project_id": "my-project",
     "cluster_name": "my-cluster",
     "location": "us-central1-c",
     "component_name": "vpa-controller"
   }
 },
 "timestamp": "2026-01-22T19:28:16.069635605Z",
 "severity": "INFO",
 "labels": {
   "compute.googleapis.com/resource_name": "my-unique-vm-identifier"
 },
 "logName": "projects/my-project/logs/container.googleapis.com%2Fvpa-controller",
 "sourceLocation": {
   "file": "vpa_event_logger.go",
   "line": "23"
 },
 "receiveTimestamp": "2026-01-22T19:28:17.750678359Z"
}

剔除 Pod

使用 VPA 模式 Auto (已淘汰) 和 Recreate 時,系統會提供 Pod 逐出記錄。如果 In-place resize 作業失敗,VPA 模式 InPlaceOrRecreate 也可能出現這類記錄。

這項決策記錄的 jsonPayload 包含下列欄位:

欄位 說明
vpaName VPA 名稱。
vpaNamespace VPA 的命名空間。
target 這個 VPA 的目標工作負載。
  • name:工作負載名稱。
  • kind:工作負載類型。
  • apiVersion:工作負載的 API 版本。
operation 正在執行的作業。值為下列其中之一:
  • UPDATE_RECOMMENDATION
  • EVICT_POD
  • APPLY_RECOMMENDATION_IN_PLACE
  • APPLY_RECOMMENDATION_ON_EVICTION
state 作業的狀態。值為下列其中之一:
  • SUCCEEDED
  • SKIPPED
  • FAILED
reason

原因說明作業遭到略過或失敗的原因。

如果是作業 APPLY_RECOMMENDATION_IN_PLACEAPPLY_RECOMMENDATION_ON_EVICTION 成功案例,原因會說明由於套用修改內容 (例如設下上限或自動駕駛資源比例),套用的最佳化建議可能與作業 UPDATE_RECOMMENDATION 中的原始最佳化建議不同。

pod Pod 的名稱。

Pod 逐出記錄範例:

{
 "insertId": "8x278gc4f75oowf4",
 "jsonPayload": {
   "target": {
     "kind": "Deployment",
     "apiVersion": "apps/v1",
     "name": "my-deployment"
   },
   "operation": "EVICT_POD",
   "vpaName": "my-vpa",
   "pod": "my-deployment-856ff7966-gr4rh",
   "state": "SUCCEEDED",
   "vpaNamespace": "default",
   "instance": {
     "vm_name": "my-unique-vm-identifier",
     "zone": "us-central1-c"
   }
 },
 "resource": {
   "type": "k8s_control_plane_component",
   "labels": {
     "component_name": "vpa-controller",
     "cluster_name": "my-cluster",
     "component_location": "us-central1-c",
     "location": "us-central1-c",
     "project_id": "my-project"
   }
 },
 "timestamp": "2026-01-22T19:26:25.283067078Z",
 "severity": "INFO",
 "labels": {
   "compute.googleapis.com/resource_name": "my-unique-vm-identifier"
 },
 "logName": "projects/my-project/logs/container.googleapis.com%2Fvpa-controller",
 "sourceLocation": {
   "file": "vpa_event_logger.go",
   "line": "23"
 },
 "receiveTimestamp": "2026-01-22T19:26:27.766941073Z"
}

在驅逐時套用建議

您可以使用 VPA 模式 Auto (已淘汰) 和 Recreate,在驅逐記錄中套用建議。如果 In-place resize 失敗,VPA 模式 InPlaceOrRecreate 也可能產生這類記錄。

這項決策記錄的 jsonPayload 包含下列欄位:

欄位 說明
vpaName VPA 名稱。
vpaNamespace VPA 的命名空間。
target 這個 VPA 的目標工作負載。
  • name:工作負載名稱。
  • kind:工作負載類型。
  • apiVersion:工作負載的 API 版本。
operation 正在執行的作業。值為下列其中之一:
  • UPDATE_RECOMMENDATION
  • EVICT_POD
  • APPLY_RECOMMENDATION_IN_PLACE
  • APPLY_RECOMMENDATION_ON_EVICTION
state 作業狀態。值為下列其中之一:
  • SUCCEEDED
  • SKIPPED
  • FAILED
reason

原因說明作業遭到略過或失敗的原因。

針對作業APPLY_RECOMMENDATION_IN_PLACEAPPLY_RECOMMENDATION_ON_EVICTION成功案例,這項功能會說明由於套用修改內容 (例如設下上限或自動駕駛資源比例),套用的最佳化建議可能與作業 UPDATE_RECOMMENDATION 中的原始最佳化建議不同。

pod Pod 的名稱。
appliedResources 套用至 Pod 的資源。
  • containerName:容器名稱。
  • requests:套用的資源要求。
    • cpu:套用的 CPU。
    • memory:套用的記憶體。
  • limits:套用的資源限制。
    • cpu:套用的 CPU。
    • memory:套用的記憶體。
confidence 建議的信心指數。狀態為 succeeded 時,系統會提供這個欄位。值為下列其中之一:
  • LOW:VPA 處理的指標樣本少於 10 個。
  • HIGH:VPA 已處理 10 個以上的指標樣本。

在驅逐記錄中套用建議的範例:

{
 "insertId": "366tcmgdkq94eppg",
 "jsonPayload": {
   "appliedResources": [
     {
       "containerName": "my-container",
       "requests": {
         "memory": "15Mi",
         "cpu": "15m"
       }
     }
   ],
   "vpaName": "my-vpa",
   "vpaNamespace": "default",
   "instance": {
     "zone": "us-central1-c",
     "vm_name": "my-unique-vm-identifier"
   },
   "pod": "my-deployment-856ff7966-%",
   "state": "SUCCEEDED",
   "target": {
     "name": "my-deployment",
     "kind": "Deployment",
     "apiVersion": "apps/v1"
   },
   "operation": "APPLY_RECOMMENDATION_ON_EVICTION"
 },
 "resource": {
   "type": "k8s_control_plane_component",
   "labels": {
     "location": "us-central1-c",
     "component_location": "us-central1-c",
     "cluster_name": "my-cluster",
     "component_name": "vpa-controller",
     "project_id": "my-project"
   }
 },
 "timestamp": "2026-01-22T19:26:25.344313199Z",
 "severity": "INFO",
 "labels": {
   "compute.googleapis.com/resource_name": "my-unique-vm-identifier"
 },
 "logName": "projects/my-project/logs/container.googleapis.com%2Fvpa-controller",
 "sourceLocation": {
   "file": "vpa_event_logger.go",
   "line": "23"
 },
 "receiveTimestamp": "2026-01-22T19:26:32.744122156Z"
}

在適當位置套用建議

使用 VPA 模式時,系統會提供套用建議的記錄檔 InPlaceOrRecreate

這項決策記錄的 jsonPayload 包含下列欄位:

欄位 說明
vpaName VPA 名稱。
vpaNamespace VPA 的命名空間。
target 這個 VPA 的目標工作負載。
  • name:工作負載名稱。
  • kind:工作負載類型。
  • apiVersion:工作負載的 API 版本。
operation 正在執行的作業。值為下列其中之一:
  • UPDATE_RECOMMENDATION
  • EVICT_POD
  • APPLY_RECOMMENDATION_IN_PLACE
  • APPLY_RECOMMENDATION_ON_EVICTION
state 作業的狀態。值為下列其中之一:
  • SUCCEEDED
  • SKIPPED
  • FAILED
reason

原因說明作業遭到略過或失敗的原因。

如果是作業 APPLY_RECOMMENDATION_IN_PLACEAPPLY_RECOMMENDATION_ON_EVICTION 成功案例,原因會說明由於套用修改內容 (例如設下上限或自動駕駛資源比例),套用的最佳化建議可能與作業 UPDATE_RECOMMENDATION 中的原始最佳化建議不同。

pod Pod 的名稱。
appliedResources 套用至 Pod 的資源。
  • containerName:容器名稱。
  • requests:套用的資源要求。
    • cpu:套用的 CPU。
    • memory:套用的記憶體。
  • limits:套用的資源限制。
    • cpu:套用的 CPU。
    • memory:套用的記憶體。
confidence 建議的信心指數。狀態為 succeeded 時,系統會提供這個欄位。值為下列其中之一:
  • LOW:VPA 處理的指標樣本少於 10 個。
  • HIGH:VPA 已處理 10 個以上的指標樣本。

地點記錄中套用建議的範例:

{
 "insertId": "suzfuepgyiwap7hb",
 "jsonPayload": {
   "pod": "my-deployment-cdc7fd7b4-grxlk",
   "vpaNamespace": "default",
   "state": "SUCCEEDED",
   "target": {
     "name": "my-deployment",
     "apiVersion": "apps/v1",
     "kind": "Deployment"
   },
   "operation": "APPLY_RECOMMENDATION_IN_PLACE",
   "appliedResources": [
     {
       "containerName": "my-container",
       "limits": {
         "cpu": "10m",
         "memory": "10Mi"
       },
       "requests": {
         "cpu": "5m",
         "memory": "5Mi"
       }
     }
   ],
   "instance": {
     "zone": "us-central1-c",
     "vm_name": "my-unique-vm-identifier"
   },
   "vpaName": "my-vpa"
 },
 "resource": {
   "type": "k8s_control_plane_component",
   "labels": {
     "project_id": "my-project",
     "component_location": "us-central1-c",
     "cluster_name": "my-cluster",
     "location": "us-central1-c",
     "component_name": "vpa-controller"
   }
 },
 "timestamp": "2026-01-22T19:26:25.214095375Z",
 "severity": "INFO",
 "labels": {
   "compute.googleapis.com/resource_name": "my-unique-vm-identifier"
 },
 "logName": "projects/my-project/logs/container.googleapis.com%2Fvpa-controller",
 "sourceLocation": {
   "file": "vpa_event_logger.go",
   "line": "23"
 },
 "receiveTimestamp": "2026-01-22T19:26:27.766941073Z"
}

疑難排解

本節說明與垂直 Pod 自動調度資源事件相關的問題和解決步驟。

沒有活動

如果沒有看到任何垂直 Pod 自動配置器決策事件,請確認您已完成下列所有步驟:

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

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

kubectl describe vpa $VPA_NAME

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

後續步驟