收集垂直 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 時所需的角色

如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

啟用 API

設定 Cloud Shell

在本教學課程中,您會使用 Cloud Shell 執行 gcloud 和 kubectl 指令。Cloud Shell 是一種殼層環境,可用來管理託管於 Google Cloud的資源。這個環境已預先安裝 Google Cloud CLI 和 kubectl 指令列工具。

在 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 叢集相同專案的 _Default bucket logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fvpa-controller"。所有記錄的事件都採用 JSON 格式,且位於記錄項目的 jsonPayload 欄位中。

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

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

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

垂直 Pod 自動調度器模式 可發出的記錄類型
Auto (已淘汰) 或 Recreate
  • 更新建議
  • 剔除 Pod
  • 套用建議,避免遭到淘汰
InPlaceOrRecreate
  • 更新建議
  • 直接套用建議
  • 剔除 Pod (In-place 調整大小失敗時,可能會產生這類記錄)
  • 在淘汰時套用建議 (如果 In-place 調整大小失敗,可能會產生這類記錄)

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

更新建議

您可以使用下列垂直 Pod 自動配置器模式,產生更新建議記錄:Auto (已淘汰)、Recreate 和 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_PLACE 和 APPLY_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_PLACE和「成功」APPLY_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 模式 (已淘汰) 和 AutoRecreate,在驅逐記錄中套用建議。如果 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_PLACE 和 APPLY_RECOMMENDATION_ON_EVICTION 成功案例,說明套用的建議可能與作業 UPDATE_RECOMMENDATION 中的原始建議不同,因為套用了修改 (例如上限或 Autopilot 資源比率)。

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_PLACE和「成功」APPLY_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 支援團隊。

後續步驟