垂直 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: enable
Cluster カスタム リソースの
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 を確認する。