垂直 Pod 自動スケーリングは、Kubernetes Pod 内のコンテナの CPU リソースとメモリリソースのリクエストと上限の設定を自動化します。垂直 Pod 自動スケーリングは、過去と現在のリソース使用量を分析して推奨事項を提示します。この推奨事項は、表示することも、Pod を更新して自動的に適用することもできます。この機能は、リソース割り当てを適切なサイズに調整することで、安定性と費用対効果を向上させます。
始める前に
垂直 Pod 自動スケーリングを構成する前に、次の前提条件を満たしていることを確認してください。
- ベアメタル クラスタが実行されている。
 - クラスタに対する 
kubectlアクセス権がある。 - Metrics Server がクラスタで使用可能である。ベアメタル クラスタには、デフォルトで Metrics Server が含まれています。
 
垂直 Pod 自動スケーリングを有効にする
プレビュー アノテーションを設定し、クラスタ仕様を構成して、ベアメタル クラスタで垂直 Pod 自動スケーリングを有効にします。
Cluster カスタム リソースにプレビュー アノテーションを追加または更新します。
Cluster カスタム リソースを直接編集するか、クラスタ構成ファイルを変更して
bmctl updateを使用します。metadata: annotations: preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enableCluster カスタム リソースの
specを変更してverticalPodAutoscalingフィールドを含め、enableUpdaterモードとenableMemorySaverモードを指定します。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クラスタ構成ファイルを変更した場合は、次のコマンドを使用して変更を適用します。
bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG次のように置き換えます。
CLUSTER_NAME: クラスタの名前。KUBECONFIG: クラスタの kubeconfig ファイルのパス。
VerticalPodAutoscaler カスタム リソースを作成する
クラスタで垂直 Pod 自動スケーリングを有効にしたら、特定のワークロードをターゲットにする VerticalPodAutoscaler カスタム リソースを定義します。
ターゲット ワークロードと同じ Namespace に
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"]次のコマンドを使用して
VerticalPodAutoscalerマニフェストを適用します。kubectl apply -f VPA_MANIFEST \ --kubeconfig KUBECONFIG次のように置き換えます。
VPA_MANIFEST:VerticalPodAutoscalerマニフェスト ファイルのパス。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 をモニタリングします。
VerticalPodAutoscaler リソースの更新ポリシーは、アップデータが推奨事項を適用する方法を指定します。デフォルトの更新モードは Auto です。これは、Updater が 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"
    ...
アップデータは次の 5 つのモードをサポートしています。
Auto: アップデータが Pod を強制排除します。アドミッション コントローラは、新しい Pod の作成リクエストをインターセプトし、推奨ツールから提供された推奨 CPU 値とメモリ値を使用するように変更します。リソースを更新するには Pod を再作成する必要があります。これにより、中断が発生する可能性があります。アップデータが尊重する Pod Disruption Budget を使用して、エビクション プロセスを管理します。このモードはRecreateと同じです。Recreate: アップデータは Pod を強制排除し、Pod が再作成されるときに推奨リソース リクエストと上限を割り当てます。InPlaceOrRecreate(アルファ版): アップデータはインプレース更新を試みますが、インプレース更新が不可能な場合は 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 に設定すると、Recommender は、一致する VerticalPodAutoscaler カスタム リソースを持つ Pod の集計のみを追跡して計算します。
トレードオフとして、既存のワークロード用に新しい VerticalPodAutoscaler カスタム リソースを作成すると、レコメンダーが正確な推奨事項を提供するために十分な履歴を収集するのに時間がかかります(最大 24 時間)。このモードは、ほとんどのクラスタタイプでデフォルトで false ですが、エッジクラスタではデフォルトで true になります。
垂直 Pod 自動スケーリングを無効にする
クラスタからカスタム リソースと構成を削除して、垂直 Pod 自動スケーリングを無効にします。
作成した
VerticalPodAutoscalerカスタム リソースを削除します。Cluster カスタム リソースを変更し、
specからverticalPodAutoscalingセクション全体を削除します。Cluster カスタム リソースを直接編集するか、クラスタ構成ファイルを変更して
bmctl updateを使用できます。Cluster カスタム リソースから
preview.baremetal.cluster.gke.io/vertical-pod-autoscalerアノテーションを削除します。
制限事項
垂直 Pod 自動スケーリングを使用する場合は、次の制限事項を考慮してください。
- ワークロードの実際のメモリ使用量の可視性が制限されているので、JVM ベースのワークロードには垂直 Pod 自動スケーリングをまだ使用できません。
 - 更新ツールでは、Deployment が Pod を更新されたリソース値に置き換えるために、Pod レプリカが 2 つ以上必要です。
 - メモリ不足(OOM)エラーによりクラッシュ ループが発生している Pod は、アップデータによってすぐに更新されません。
 - Pod の 
InPlaceOrRecreate更新ポリシーは、垂直 Pod 自動スケーリング内のアルファ版機能です。ベスト エフォートでインプレース更新を試みますが、インプレース更新ができない場合は Pod の再作成にフォールバックする可能性があります。 
次のステップ
- Pod Disruption Budget を確認する。