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

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

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

事前準備

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

選取或建立專案

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

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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

  2. Verify that billing is enabled for your Cloud de Confiance project.

啟用 API

啟用 GKE 和 Cloud Logging API。

啟用 API 時所需的角色

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

啟用 API

設定 Cloud Shell

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

在 Cloud de Confiance 控制台中啟用 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:您的 Cloud de Confiance 專案 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:您的 Cloud de Confiance 專案 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 記錄,請聯絡Cloud de Confiance 支援團隊

後續步驟