設定垂直 Pod 自動調度資源

垂直自動調度 Pod 資源功能會自動設定 Kubernetes Pod 中容器的 CPU 和記憶體資源要求與限制。垂直自動調度 Pod 資源功能會分析歷來和目前的資源用量,提供建議,並顯示或自動套用建議,更新 Pod。這項功能可適當調整資源分配,進而提升穩定性和成本效益。

事前準備

設定垂直 Pod 自動調度資源功能前,請確認您符合下列必要條件:

  • 您有一個正在執行的 Bare Metal 叢集。
  • 您擁有叢集的 kubectl 存取權。
  • 叢集提供指標伺服器。根據預設,裸機叢集會包含指標伺服器。

啟用垂直自動調度 Pod 資源功能

如要在裸機叢集上啟用垂直 Pod 自動調度資源功能,請設定預覽版註解並設定叢集規格:

  1. 在叢集自訂資源中新增或更新預先發布版註解。

    直接編輯叢集自訂資源,或修改叢集設定檔並使用 bmctl update

    metadata:
      annotations:
        preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable
    
  2. 修改 Cluster 自訂資源的 spec,加入 verticalPodAutoscaling 欄位並指定 enableUpdaterenableMemorySaver 模式:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: cluster1
      namespace: cluster-cluster1
      annotations:
        preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable
    spec:
      # ... other cluster spec fields
      verticalPodAutoscaling:
        enableUpdater: true       # Set to true for automated updates
        enableMemorySaver: true   # Set to true to reduce recommender memory usage
    
  3. 如果您修改了叢集設定檔,請使用下列指令套用變更:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。

    • KUBECONFIG:叢集 kubeconfig 檔案的路徑。

建立 VerticalPodAutoscaler 自訂資源

在叢集上啟用垂直 Pod 自動調度資源功能後,請定義VerticalPodAutoscaler自訂資源,以指定工作負載:

  1. 在與目標工作負載相同的命名空間中,定義 VerticalPodAutoscaler 資源。

    這個自訂資源會使用 targetRef 和任何資源政策,指定目標 Pod。

    apiVersion: "autoscaling.k8s.io/v1"
    kind: VerticalPodAutoscaler
    metadata:
      name: hamster-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind: Deployment
        name: hamster
      resourcePolicy:
        containerPolicies:
          -   containerName: '*'
            minAllowed:
              cpu: 100m
              memory: 50Mi
            maxAllowed:
              cpu: 1
              memory: 500Mi
            controlledResources: ["cpu", "memory"]
    
  2. 使用下列指令套用 VerticalPodAutoscaler 資訊清單:

    kubectl apply -f VPA_MANIFEST \
        --kubeconfig KUBECONFIG
    

    更改下列內容:

    • VPA_MANIFESTVerticalPodAutoscaler 資訊清單檔案的路徑。

    • KUBECONFIG:叢集 kubeconfig 檔案的路徑。

瞭解垂直 Pod 自動調度資源模式

垂直 Pod 自動調度資源功能有不同模式,可控制資源建議的套用方式。

建議模式

在建議模式中,垂直 Pod 自動調度資源會安裝建議工具元件。這個元件會分析資源用量,並在您建立的 VerticalPodAutoscaler 自訂資源狀態部分,發布 CPU 和記憶體要求與限制的建議值。

如要查看資源要求和限制建議,請使用下列指令:

kubectl describe vpa VPA_NAME \
    --kubeconfig KUBECONFIG \
    -n CLUSTER_NAMESPACE
Replace the following:

*   `VPA_NAME`: the name of the `VerticalPodAutoscaler`
    that's targeting the workloads for which you are considering resource
    adjustments.

*   `KUBECONFIG`: the path of the cluster kubeconfig
    file.

*   `CLUSTER_NAMESPACE`: the name of the cluster that's
    running vertical Pod autoscaling.

回覆應包含類似下列範例的 Status 區段:

Status:
  Conditions:
    Last Transition Time:  2025-08-04T23:53:32Z
    Status:                True
    Type:                  RecommendationProvided
  Recommendation:
    Container Recommendations:
      Container Name:  hamster
      Lower Bound:
        Cpu:     100m
        Memory:  262144k
      Target:
        Cpu:     587m
        Memory:  262144k
      Uncapped Target:
        Cpu:     587m
        Memory:  262144k
      Upper Bound:
        Cpu:     1
        Memory:  500Mi

在這個模式下,系統不會自動更新 Pod。請根據這些建議手動更新 Pod 設定。如果未設定 enableUpdater 或設為 false,系統會預設為這個行為。

自動更新模式

當您將 enableUpdater enableUpdater 設為 true 時,除了建議工具,裸機生命週期控制器也會部署垂直 Pod 自動調度資源更新程式和准入控制器元件。更新程式會監控 Pod,找出目前資源要求與建議值有顯著差異的 Pod。

VerticalPodAutoscaler 資源中的更新政策會指定更新程式套用建議的方式。根據預設,更新模式為 Auto,這表示更新程式會在建立 Pod 時指派更新後的資源設定。下列 VerticalPodAutoscaler 範例說明如何將更新模式設為 Initial

apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
  name: hamster-vpa
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind: Deployment
    name: hamster
  resourcePolicy:
  updatePolicy:
    updateMode: "Initial"
    ...

更新程式支援下列五種模式:

  • Auto:更新程式會逐出 Pod。准入控制器會攔截新 Pod 的建立要求,並修改要求,以使用建議工具提供的建議 CPU 和記憶體值。更新資源需要重新建立 Pod,這可能會導致中斷。使用更新程式會遵守的 Pod 中斷預算,管理撤銷程序。這個模式等同於 Recreate

  • Recreate:更新程式會逐出 Pod,並在重新建立 Pod 時指派建議的資源要求和限制。

  • InPlaceOrRecreate(Alpha):更新程式會盡量執行就地更新,但如果無法就地更新,可能會改為重新建立 Pod。詳情請參閱就地調整 Pod 大小說明文件。

  • Initial:更新程式只會在建立 Pod 時指派資源要求,之後不會變更。

  • Off:更新程式不會自動變更 Pod 的資源需求。建議會經過計算,並可在 VerticalPodAutoscaler 物件中檢查。

如要進一步瞭解 VerticalPodAutoscaler 自訂資源,請使用 kubectl 擷取安裝在 1.33.0 以上版本叢集中的 verticalpodautoscalercheckpoints.autoscaling.k8s.io 自訂資源定義。

下列範例顯示 hamster 容器的 Status 區段中可能顯示的資源建議。這個範例也顯示 Pod 逐出事件的範例,當更新程式在自動將建議的資源設定指派給重新建立的 Pod 之前,逐出 Pod 時就會發生這類事件:

Spec:
  Resource Policy:
    Container Policies:
      Container Name:  *
      Controlled Resources:
        cpu
        memory
      Max Allowed:
        Cpu:     1
        Memory:  500Mi
      Min Allowed:
        Cpu:     100m
        Memory:  50Mi
  Target Ref:
    API Version:  apps/v1
    Kind:         Deployment
    Name:         hamster
  Update Policy:
    Update Mode:  Auto
Status:
  Conditions:
    Last Transition Time:  2025-08-04T23:53:32Z
    Status:                True
    Type:                  RecommendationProvided
  Recommendation:
    Container Recommendations:
      Container Name:  hamster
      Lower Bound:
        Cpu:     100m
        Memory:  262144k
      Target:
        Cpu:     587m
        Memory:  262144k
      Uncapped Target:
        Cpu:     587m
        Memory:  262144k
      Upper Bound:
        Cpu:     1
        Memory:  500Mi
Events:
  Type    Reason      Age   From         Message
  ----    ------      ----  ----         -------
  Normal  EvictedPod  49s   vpa-updater  VPA Updater evicted Pod hamster-7cb59fb657-lkrk4 to apply resource recommendation.

記憶體節省模式

記憶體節省模式會減少垂直 Pod 自動調度資源建議元件的記憶體用量。將 enableMemorySaver 設定為 true 時,建議工具只會追蹤並計算具有相符 VerticalPodAutoscaler 自訂資源的 Pod 匯總資料。

但缺點是,為現有工作負載建立新的 VerticalPodAutoscaler 自訂資源時,建議工具需要一段時間 (最多 24 小時) 收集足夠的記錄,才能提供準確的建議。大多數叢集類型預設會採用這種模式,但邊緣叢集預設會採用 truefalse

停用垂直 Pod 自動調度資源

如要停用垂直 Pod 自動調度資源,請從叢集中移除自訂資源和設定:

  1. 刪除您建立的任何 VerticalPodAutoscaler 自訂資源。

  2. 修改叢集自訂資源,並從 spec 中移除整個 verticalPodAutoscaling 區段。

    您可以直接編輯叢集自訂資源,或修改叢集設定檔並使用 bmctl update

  3. 從叢集自訂資源中移除 preview.baremetal.cluster.gke.io/vertical-pod-autoscaler 註解。

限制

使用垂直 Pod 自動調度資源功能時,請注意下列限制:

  • 由於工作負載的實際記憶體用量瀏覽權限受到限制,因此垂直自動調度 Pod 資源功能尚未準備就緒,無法與以 JVM 為基礎的工作負載搭配使用。
  • 更新程式至少需要兩個 Pod 副本,才能以修訂後的資源值取代 Pod。
  • 如果 Pod 因記憶體不足 (OOM) 錯誤而進入當機迴圈,更新程式不會快速更新這些 Pod。
  • Pod 的 InPlaceOrRecreate 更新政策是垂直 Pod 自動調度資源的 Alpha 版功能。它會盡量就地更新,但如果無法就地更新,可能會改為重新建立 Pod。

後續步驟