本頁面提供 Google Kubernetes Engine (GKE) 中垂直 Pod 自動調度器發出的決策事件相關資訊。分析這些事件,您就能深入瞭解垂直 Pod 自動調度資源控制器如何管理工作負載調度,以及其動作背後的決策程序。
垂直 Pod 自動配置器會發出決策事件,並以記錄項目的形式儲存在 Cloud Logging 中。
事前準備
請務必完成下列必要條件:
選取或建立專案
您可以使用現有專案,也可以為本教學課程建立新專案。
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
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 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
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) 取得這項權限。瞭解如何授予角色。
設定 Cloud Shell
在本教學課程中,您將使用 Cloud Shell 執行 gcloud 和 kubectl 指令。Cloud Shell 是殼層環境,用於管理託管在 Google Cloud的資源。這個環境已預先安裝 Google Cloud CLI 和 kubectl 指令列工具。
在 Google Cloud 控制台中啟用 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 決策記錄,請執行下列操作:
檢查叢集的現有設定。如果叢集已設定特定記錄元件,請決定要新增或覆寫現有的記錄設定。
如要啟用垂直 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)'
更改下列內容:
CLUSTER_NAME:叢集名稱。LOCATION:叢集的運算區域或可用區。
在叢集上啟用 KCP_VPA 決策記錄後,輸出內容會類似於下列內容:
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_VPA
在 Logs Explorer 中查看垂直 Pod 自動調度程式記錄
您可以在 Logs Explorer 中監控垂直 Pod 自動配置器的行為。如要查看垂直 Pod 自動調度器記錄,請完成下列步驟:
前往「Logs Explorer」頁面:
選取「所有記錄名稱」,然後搜尋記錄名稱中的
vpa-controller。記錄探索工具會顯示所有垂直 Pod 自動配置器記錄,包括專案中啟用垂直 Pod 自動配置器記錄的所有叢集記錄。
你可以使用叢集名稱或工作負載名稱篩選記錄。舉例來說,如要列出叢集中特定工作負載的事件,請使用下列查詢指定叢集名稱和工作負載名稱:
resource.labels.cluster_name="CLUSTER_NAME" AND jsonPayload.target.name="WORKLOAD_NAME"更改下列內容:
CLUSTER_NAME:叢集名稱。WORKLOAD_NAME:工作負載名稱。
停用垂直自動調度 Pod 資源決策記錄
如要停用現有叢集的
KCP_VPA決策記錄,請執行下列指令:gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --logging=SYSTEM確認
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 |
|
InPlaceOrRecreate |
|
如果垂直 Pod 自動調度器處於 InPlaceOrRecreate 模式,當 In-place resize 失敗時,自動調度器的行為與 Recreate 模式相同。
更新建議
您可以使用下列垂直 Pod 自動調度資源模式產生更新建議記錄:Auto (已淘汰)、Recreate 和 InPlaceOrRecreate。
這項決策記錄的 jsonPayload 包含下列欄位:
| 欄位 | 說明 |
|---|---|
vpaName |
VPA 名稱。 |
vpaNamespace |
VPA 的命名空間。 |
target |
這個 VPA 的目標工作負載。
|
operation |
正在執行的作業。值為下列其中之一:
|
state |
作業狀態。值為下列其中之一:
|
reason |
原因說明作業遭到略過或失敗的原因。 針對作業 |
recommendedResources |
原始建議。這與 VPA 物件中的 Status.Recommendation 欄位完全相同。
|
confidence |
建議的信心指數。狀態為 succeeded 時,系統會提供這個欄位。值為下列其中之一:
|
更新建議記錄範例:
{
"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 的目標工作負載。
|
operation |
正在執行的作業。值為下列其中之一:
|
state |
作業的狀態。值為下列其中之一:
|
reason |
原因說明作業遭到略過或失敗的原因。 如果是作業 |
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 的目標工作負載。
|
operation |
正在執行的作業。值為下列其中之一:
|
state |
作業狀態。值為下列其中之一:
|
reason |
原因說明作業遭到略過或失敗的原因。 針對作業 |
pod |
Pod 的名稱。 |
appliedResources |
套用至 Pod 的資源。
|
confidence |
建議的信心指數。狀態為 succeeded 時,系統會提供這個欄位。值為下列其中之一:
|
在驅逐記錄中套用建議的範例:
{
"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 的目標工作負載。
|
operation |
正在執行的作業。值為下列其中之一:
|
state |
作業的狀態。值為下列其中之一:
|
reason |
原因說明作業遭到略過或失敗的原因。 如果是作業 |
pod |
Pod 的名稱。 |
appliedResources |
套用至 Pod 的資源。
|
confidence |
建議的信心指數。狀態為 succeeded 時,系統會提供這個欄位。值為下列其中之一:
|
地點記錄中套用建議的範例:
{
"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 支援團隊。
後續步驟
- 請參閱「關於 GKE 記錄檔」。
- 瞭解 GKE 記錄檔。
- 瞭解如何使用查詢範例尋找特定 GKE 記錄。
- 進一步瞭解垂直自動調度 Pod 資源。