2.5. Vertical Pod Autoscaler を使用した Pod リソースレベルの自動調整


OpenShift Container Platform の Vertical Pod Autoscaler Operator (VPA) は、Pod 内のコンテナーの履歴および現在の CPU とメモリーリソースを自動的に確認し、把握する使用値に基づいてリソース制限および要求を更新できます。VPA は個別のカスタムリソース (CR) を使用して、プロジェクトの DeploymentDeploymentConfigStatefulSetJobDaemonSetReplicaSet、または ReplicationController などのワークロードオブジェクトに関連付けられたすべての Pod を更新します。

VPA は、Pod に最適な CPU およびメモリーの使用状況を理解するのに役立ち、Pod のライフサイクルを通じて Pod のリソースを自動的に維持します。

2.5.1. Vertical Pod Autoscaler Operator について

Vertical Pod Autoscaler Operator (VPA) は、API リソースおよびカスタムリソース (CR) として実装されます。CR は、プロジェクトのデーモンセット、レプリケーションコントローラーなどの特定のワークロードオブジェクトに関連付けられた Pod について Vertical Pod Autoscaler Operator が取るべき動作を判別します。

VPA は 3 つのコンポーネントで設定されており、それぞれが VPA namespace に独自の Pod を持ちます。

レコメンダー
VPA レコメンダーは、現在および過去のリソース消費をモニターします。このデータに基づいて、VPA レコメンダーは関連付けられたワークロードオブジェクトの Pod に最適な CPU およびメモリーリソースを判別します。
アップデーター
VPA アップデーターは、関連付けられたワークロードオブジェクト内の Pod に正しいリソースがあるか確認します。リソースが正しい場合、アップデーターは何も行いません。リソースが正しくない場合、アップデーターは Pod を強制終了し、Pod のコントローラーが更新された要求でリソースを再作成できるようにします。
アドミッションコントローラー
VPA 受付コントローラーは、関連付けられたワークロードオブジェクトのそれぞれの新規 Pod に正しいリソース要求を設定します。これは、Pod が新規であるか、またはコントローラーが VPA アップデーターのアクションによって Pod を再作成されるかどうかに適用されます。

デフォルトのレコメンダーを使用することも、独自の代替レコメンダーを使用して独自のアルゴリズムに基づいて自動スケーリングを実行することもできます。

デフォルトのレコメンダーは、それらの Pod 内のコンテナーの履歴および現在の CPU とメモリー使用量を自動的に計算します。デフォルトのレコメンダーはこのデータを使用して、最適化されたリソース制限および要求を判別し、これらの Pod が常に効率的に動作しているようにします。たとえば、デフォルトレコメンダーは使用している量よりも多くのリソースを要求する Pod のリソースを減らし、十分なリソースを要求していない Pod のリソースを増やします。

VPA は、一度に 1 つずつ、これらの推奨値で調整されていない Pod を自動的に削除するため、アプリケーションはダウンタイムなしに継続して要求を提供できます。その後、ワークロードオブジェクトが、元のリソース制限および要求を使用して Pod を再デプロイします。VPA は変更用の受付 Webhook を使用して、Pod をノードに付与する前に最適化されたリソース制限および要求で Pod を更新します。VPA が Pod を削除する必要がない場合は、VPA リソース制限および要求を表示し、必要に応じて Pod を手動で更新できます。

注記

デフォルトで、ワークロードオブジェクトは、VPA が Pod を自動的に削除するようにレプリカを 2 つ以上指定する必要があります。この最小値よりも少ないレプリカを指定するワークロードオブジェクトは削除されません。これらの Pod を手動で削除すると、ワークロードオブジェクトが Pod を再デプロイすると、VPA は推奨内容に基づいて新規 Pod を更新します。この最小値は、VPA の最小値の変更 に記載されているとおり、VerticalPodAutoscalerController オブジェクトを変更して変更できます。

たとえば、CPU の 50% を使用する Pod が 10% しか要求しない場合、VPA は Pod が要求よりも多くの CPU を消費すると判別してその Pod を削除します。レプリカセットなどのワークロードオブジェクトは Pod を再起動し、VPA は推奨リソースで新しい Pod を更新します。

開発者の場合、VPA を使用して、Pod を各 Pod に適したリソースを持つノードにスケジュールし、Pod を需要の多い期間中にアクティブにすることができます。

管理者は、VPA を使用してクラスターリソースをより適切に使用できます。たとえば、必要以上の CPU リソースを Pod が予約できないようにします。VPA は、ワークロードが実際に使用しているリソースをモニターし、他のワークロードで容量を使用できるようにリソース要件を調整します。VPA は、初期のコンテナー設定で指定される制限と要求の割合も維持します。

注記

VPA の実行を停止するか、クラスターの特定の VPA CR を削除する場合、VPA によってすでに変更された Pod のリソース要求は変更されません。ただし、新規 Pod は、VPA による以前の推奨事項ではなく、ワークロードオブジェクトで定義されたリソースを取得します。

2.5.2. Vertical Pod Autoscaler Operator のインストール

OpenShift Container Platform Web コンソールを使用して Vertical Pod Autoscaler Operator (VPA) をインストールすることができます。

手順

  1. OpenShift Container Platform Web コンソールで、Operators OperatorHub をクリックします。
  2. 利用可能な Operator のリストから VerticalPodAutoscaler を選択し、Install をクリックします。
  3. Install Operator ページで、Operator recommended namespace オプションが選択されていることを確認します。これにより、Operator が必須の openshift-vertical-pod-autoscaler namespace にインストールされます。この namespace は存在しない場合は、自動的に作成されます。
  4. Install をクリックします。

検証

  1. VPA コンポーネントを一覧表示して、インストールを確認します。

    1. Workloads Pods に移動します。
    2. ドロップダウンメニューから openshift-vertical-pod-autoscaler プロジェクトを選択し、4 つの Pod が実行されていることを確認します。
    3. Workloads Deployments に移動し、4 つのデプロイメントが実行されていることを確認します。
  2. オプション: 以下のコマンドを使用して、OpenShift Container Platform CLI でインストールを確認します。

    $ oc get all -n openshift-vertical-pod-autoscaler
    Copy to Clipboard Toggle word wrap

    出力には、4 つの Pod と 4 つのデプロイメントが表示されます。

    出力例

    NAME                                                    READY   STATUS    RESTARTS   AGE
    pod/vertical-pod-autoscaler-operator-85b4569c47-2gmhc   1/1     Running   0          3m13s
    pod/vpa-admission-plugin-default-67644fc87f-xq7k9       1/1     Running   0          2m56s
    pod/vpa-recommender-default-7c54764b59-8gckt            1/1     Running   0          2m56s
    pod/vpa-updater-default-7f6cc87858-47vw9                1/1     Running   0          2m56s
    
    NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
    service/vpa-webhook   ClusterIP   172.30.53.206   <none>        443/TCP   2m56s
    
    NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/vertical-pod-autoscaler-operator   1/1     1            1           3m13s
    deployment.apps/vpa-admission-plugin-default       1/1     1            1           2m56s
    deployment.apps/vpa-recommender-default            1/1     1            1           2m56s
    deployment.apps/vpa-updater-default                1/1     1            1           2m56s
    
    NAME                                                          DESIRED   CURRENT   READY   AGE
    replicaset.apps/vertical-pod-autoscaler-operator-85b4569c47   1         1         1       3m13s
    replicaset.apps/vpa-admission-plugin-default-67644fc87f       1         1         1       2m56s
    replicaset.apps/vpa-recommender-default-7c54764b59            1         1         1       2m56s
    replicaset.apps/vpa-updater-default-7f6cc87858                1         1         1       2m56s
    Copy to Clipboard Toggle word wrap

2.5.3. Vertical Pod Autoscaler Operator の使用について

Vertical Pod Autoscaler Operator (VPA) を使用するには、クラスター内にワークロードオブジェクトの VPA カスタムリソース (CR) を作成します。VPA は、そのワークロードオブジェクトに関連付けられた Pod に最適な CPU およびメモリーリソースを確認し、適用します。VPA は、デプロイメント、ステートフルセット、ジョブ、デーモンセット、レプリカセット、またはレプリケーションコントローラーのワークロードオブジェクトと共に使用できます。VPA CR はチェックする必要のある Pod と同じプロジェクトになければなりません。

VPA CR を使用してワークロードオブジェクトを関連付け、VPA が動作するモードを指定します。

  • Auto および Recreate モードは、Pod の有効期間中は VPA CPU およびメモリーの推奨事項を自動的に適用します。VPA は、推奨値で調整されていないプロジェクトの Pod を削除します。ワークロードオブジェクトによって再デプロイされる場合、VPA はその推奨内容で新規 Pod を更新します。
  • Initial モードは、Pod の作成時にのみ VPA の推奨事項を自動的に適用します。
  • Off モードは、推奨されるリソース制限およびリクエストのみを提供します。その後、推奨事項を手動で適用できます。Off モードは Pod を更新しません。

CR を使用して、VPA 評価および更新から特定のコンテナーをオプトアウトすることもできます。

たとえば、Pod には以下の制限および要求があります。

resources:
  limits:
    cpu: 1
    memory: 500Mi
  requests:
    cpu: 500m
    memory: 100Mi
Copy to Clipboard Toggle word wrap

Auto に設定された VPA を作成すると、VPA はリソースの使用状況を確認して Pod を削除します。再デプロイ時に、Pod は新規のリソース制限および要求を使用します。

resources:
  limits:
    cpu: 50m
    memory: 1250Mi
  requests:
    cpu: 25m
    memory: 262144k
Copy to Clipboard Toggle word wrap

以下のコマンドを使用して、VPA の推奨事項を表示できます。

$ oc get vpa <vpa-name> --output yaml
Copy to Clipboard Toggle word wrap

数分後に、出力には、以下のような CPU およびメモリー要求の推奨内容が表示されます。

出力例

...
status:
...
  recommendation:
    containerRecommendations:
    - containerName: frontend
      lowerBound:
        cpu: 25m
        memory: 262144k
      target:
        cpu: 25m
        memory: 262144k
      uncappedTarget:
        cpu: 25m
        memory: 262144k
      upperBound:
        cpu: 262m
        memory: "274357142"
    - containerName: backend
      lowerBound:
        cpu: 12m
        memory: 131072k
      target:
        cpu: 12m
        memory: 131072k
      uncappedTarget:
        cpu: 12m
        memory: 131072k
      upperBound:
        cpu: 476m
        memory: "498558823"
...
Copy to Clipboard Toggle word wrap

出力には、target (推奨リソース)、lowerBound (最小推奨リソース)、upperBound (最大推奨リソース)、および uncappedTarget (最新の推奨リソース) が表示されます。

VPA は lowerBound および upperBound の値を使用して、Pod の更新が必要であるかどうかを判別します。Pod のリソース要求が lowerBound 値以下の場合、VPA 終了し、target 値で Pod を再作成します。

2.5.3.1. VPA の最小値の変更

デフォルトで、ワークロードオブジェクトは、VPA が Pod を自動的に削除し、更新できるようにするためにレプリカを 2 つ以上指定する必要があります。そのため、2 つ未満を指定するワークロードオブジェクトの場合 VPA は自動的に機能しません。VPA は、VPA の外部にあるプロセスが Pod を再起動する場合に、これらのワークロードオブジェクトから新規 Pod を更新します。このクラスター全体の最小値の変更は、VerticalPodAutoscalerController カスタムリソース (CR) の minReplicas パラメーターを変更して実行できます。

たとえば、minReplicas3 に設定する場合、VPA は 2 レプリカ以下のレプリカを指定するワークロードオブジェクトの Pod を削除せず、更新しません。

注記

minReplicas1 に設定する場合、VPA は 1 つのレプリカのみを指定するワークロードオブジェクトの Pod のみを削除できます。この設定は、VPA がリソースを調整するために Pod を削除するたびにワークロードがダウンタイムを許容できる場合にのみ、1 つのレプリカオブジェクトで使用します。1 つのレプリカオブジェクトで不要なダウンタイムを回避するには、podUpdatePolicyInitial に設定して VPA CR を設定します。これにより、VPA の外部にあるプロセスが再起動された場合にのみ Pod が自動的に更新されます。または、Off はアプリケーションに適したタイミングで Pod を手動で更新するために使用できます。

VerticalPodAutoscalerController オブジェクトの例

apiVersion: autoscaling.openshift.io/v1
kind: VerticalPodAutoscalerController
metadata:
  creationTimestamp: "2021-04-21T19:29:49Z"
  generation: 2
  name: default
  namespace: openshift-vertical-pod-autoscaler
  resourceVersion: "142172"
  uid: 180e17e9-03cc-427f-9955-3b4d7aeb2d59
spec:
  minReplicas: 3 
1

  podMinCPUMillicores: 25
  podMinMemoryMb: 250
  recommendationOnly: false
  safetyMarginFraction: 0.15
Copy to Clipboard Toggle word wrap

1 1
動作させる VPA のワークロードオブジェクトのレプリカの最小数を指定します。最低数に満たない数のレプリカを持つオブジェクトは、VPA によって自動的に削除されません。

2.5.3.2. VPA の推奨事項の自動適用

VPA を使用して Pod を自動的に更新するには、updateModeAuto または Recreate に設定された特定のワークロードオブジェクトの VPA CR を作成します。

Pod がワークロードオブジェクト用に作成されると、VPA はコンテナーを継続的にモニターして、CPU およびメモリーのニーズを分析します。VPA は、CPU およびメモリーに関する VPA の推奨値を満たさない Pod を削除します。再デプロイ時に、Pod は VPA の推奨値に基づいて新規のリソース制限および要求を使用し、アプリケーションに設定された Pod の Disruption Budget (停止状態の予算) を反映します。この推奨事項は、参照用に VPA CR の status フィールドに追加されます。

注記

デフォルトで、ワークロードオブジェクトは、VPA が Pod を自動的に削除できるようにするためにレプリカを 2 つ以上指定する必要があります。この最小値よりも少ないレプリカを指定するワークロードオブジェクトは削除されません。これらの Pod を手動で削除すると、ワークロードオブジェクトが Pod を再デプロイします。VPA は推奨内容に基づいて新規 Pod を更新します。この最小値は、VPA の最小値の変更 に記載されているとおり、VerticalPodAutoscalerController オブジェクトを変更して変更できます。

Auto モードの VPA CR の例

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-recommender
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment 
1

    name:       frontend 
2

  updatePolicy:
    updateMode: "Auto" 
3
Copy to Clipboard Toggle word wrap

1
この VPA CR が管理するワークロードオブジェクトのタイプ。
2
この VPA CR が管理するワークロードオブジェクトの名前。
3
モードを Auto または Recreate に設定します。
  • Auto:VPA は、Pod の作成時にリソース要求を割り当て、要求されるリソースが新規の推奨事項と大きく異なる場合に、それらを終了して既存の Pod を更新します。
  • Recreate:VPA は、Pod の作成時にリソース要求を割り当て、要求されるリソースが新規の推奨事項と大きく異なる場合に、それらを終了して既存の Pod を更新します。このモードはほとんど使用されることはありません。リソース要求によって Pod が再起動されることを確認する必要がある場合にのみ使用してください。
注記

VPA によってリソースの推奨事項を決定し、推奨リソースを新しい Pod に適用するには、動作中の Pod がプロジェクト内に存在し、実行されている必要があります。

CPU やメモリーなどのワークロードのリソース使用量が安定している場合、VPA はリソースの推奨事項を数分で決定できます。ワークロードのリソース使用量が安定していない場合、VPA は正確な推奨を行うために、さまざまなリソース使用量の間隔でメトリクスを収集する必要があります。

2.5.3.3. Pod 作成時における VPA 推奨の自動適用

VPA を使用して、Pod が最初にデプロイされる場合にのみ推奨リソースを適用するには、updateModeInitial に設定された特定のワークロードオブジェクトの VPA CR を作成します。

次に、VPA の推奨値を使用する必要のあるワークロードオブジェクトに関連付けられた Pod を手動で削除します。Initial モードで、VPA は新しいリソースの推奨内容を確認する際に Pod を削除したり、更新したりしません。

Initial モードの VPA CR の例

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-recommender
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment 
1

    name:       frontend 
2

  updatePolicy:
    updateMode: "Initial" 
3
Copy to Clipboard Toggle word wrap

1
この VPA CR が管理するワークロードオブジェクトのタイプ。
2
この VPA CR が管理するワークロードオブジェクトの名前。
3
モードを Initial に設定します。VPA は、Pod の作成時にリソースを割り当て、Pod の有効期間中はリソースを変更しません。
注記

VPA によって推奨リソースを決定し、推奨事項を新しい Pod に適用するには、動作中の Pod がプロジェクト内に存在し、実行されている必要があります。

VPA から最も正確な推奨事項を取得するには、Pod が実行され、VPA が安定するまで少なくとも 8 日間待機してください。

2.5.3.4. VPA の推奨事項の手動適用

CPU およびメモリーの推奨値を判別するためだけに VPA を使用するには、updateModeOff に設定した特定のワークロードオブジェクトの VPA CR を作成します。

Pod がワークロードオブジェクト用に作成されると、VPA はコンテナーの CPU およびメモリーのニーズを分析し、VPA CR の status フィールドにそれらの推奨事項を記録します。VPA は、新しい推奨リソースを判別する際に Pod を更新しません。

Off モードの VPA CR の例

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-recommender
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment 
1

    name:       frontend 
2

  updatePolicy:
    updateMode: "Off" 
3
Copy to Clipboard Toggle word wrap

1
この VPA CR が管理するワークロードオブジェクトのタイプ。
2
この VPA CR が管理するワークロードオブジェクトの名前。
3
モードを Off に設定します。

以下のコマンドを使用して、推奨事項を表示できます。

$ oc get vpa <vpa-name> --output yaml
Copy to Clipboard Toggle word wrap

この推奨事項により、ワークロードオブジェクトを編集して CPU およびメモリー要求を追加し、推奨リソースを使用して Pod を削除および再デプロイできます。

注記

VPA によって推奨リソースを決定し、推奨事項を新しい Pod に適用するには、動作中の Pod がプロジェクト内に存在し、実行されている必要があります。

VPA から最も正確な推奨事項を取得するには、Pod が実行され、VPA が安定するまで少なくとも 8 日間待機してください。

2.5.3.5. VPA の推奨事項をすべてのコンテナーに適用しないようにする

ワークロードオブジェクトに複数のコンテナーがあり、VPA がすべてのコンテナーを評価および実行対象としないようにするには、特定のワークロードオブジェクトの VPA CR を作成し、resourcePolicy を追加して特定のコンテナーをオプトアウトします。

VPA が推奨リソースで Pod を更新すると、resourcePolicy が設定されたコンテナーは更新されず、VPA は Pod 内のそれらのコンテナーの推奨事項を提示しません。

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-recommender
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment 
1

    name:       frontend 
2

  updatePolicy:
    updateMode: "Auto" 
3

  resourcePolicy: 
4

    containerPolicies:
    - containerName: my-opt-sidecar
      mode: "Off"
Copy to Clipboard Toggle word wrap
1
この VPA CR が管理するワークロードオブジェクトのタイプ。
2
この VPA CR が管理するワークロードオブジェクトの名前。
3
モードを AutoRecreateInitial、または Off に設定します。Recreate モードはほとんど使用されることはありません。リソース要求によって Pod が再起動されることを確認する必要がある場合にのみ使用します。
4
VPA によって更新しないコンテナーを指定し、modeOff に設定します。

たとえば、Pod には同じリソース要求および制限の 2 つのコンテナーがあります。

# ...
spec:
  containers:
  - name: frontend
    resources:
      limits:
        cpu: 1
        memory: 500Mi
      requests:
        cpu: 500m
        memory: 100Mi
  - name: backend
    resources:
      limits:
        cpu: "1"
        memory: 500Mi
      requests:
        cpu: 500m
        memory: 100Mi
# ...
Copy to Clipboard Toggle word wrap

backend コンテナーがオプトアウトに設定された VPA CR を起動した後、VPA は Pod を終了し、frontend コンテナーのみに適用される推奨リソースで Pod を再作成します。

...
spec:
  containers:
    name: frontend
    resources:
      limits:
        cpu: 50m
        memory: 1250Mi
      requests:
        cpu: 25m
        memory: 262144k
...
    name: backend
    resources:
      limits:
        cpu: "1"
        memory: 500Mi
      requests:
        cpu: 500m
        memory: 100Mi
...
Copy to Clipboard Toggle word wrap

2.5.3.6. OOM イベント後のカスタムのメモリー増加量

クラスターで OOM (out of memory)イベントが発生した場合には、Vertical Pod Autoscaler Operator (VPA)によりメモリーの推奨事項が増加します。推奨事項の基礎は、OOM イベント時に観察されるメモリー消費と、メモリー不足による将来のクラッシュを防ぐために指定された乗数の値です。

推奨値は、OOM イベント発生時に Pod によって使用されていたメモリー使用量に指定バイト数または指定パーセンテージを掛けて算出される値のうち、どちらか大きい方です。以下の式は計算を示しています。

recommendation = max(memory-usage-in-oom-event + oom-min-bump-up-bytes, memory-usage-in-oom-event * oom-bump-up-ratio)
Copy to Clipboard Toggle word wrap

メモリーの増加量は、レコメンダー Pod で次の値を指定して設定できます。

  • oom-min-bump-up-bytes。この値 (バイト単位) は、OOM イベントが発生した後のメモリーの具体的な増加量です。デフォルトは 100MiB です。
  • oom-bump-up-ratio。この値は、OOM イベント発生時のメモリーの増加率です。デフォルト値は 1.2 です。

たとえば、OOM イベント中の Pod のメモリー使用量が 100 MB で、oom-min-bump-up-bytes が 1.2 の oom-min-bump-ratio が 150 MB に設定されている場合に、OOM イベントの後に、VPA は 120 MB (100 MB * 1.2)よりも大きくなるため、その Pod のメモリー要求を 150 MB に増やすことを推奨します。

レコメンダーの Deployment オブジェクトの例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vpa-recommender-default
  namespace: openshift-vertical-pod-autoscaler
# ...
spec:
# ...
  template:
# ...
    spec
      containers:
      - name: recommender
        args:
        - --oom-bump-up-ratio=2.0
        - --oom-min-bump-up-bytes=524288000
# ...
Copy to Clipboard Toggle word wrap

2.5.3.7. 代替のレコメンダーを使用する

独自のレコメンダーを使用して、独自のアルゴリズムに基づいて自動スケーリングできます。代替レコメンダーを指定しない場合、OpenShift Container Platform はデフォルトのレコメンダーを使用します。これは、過去の使用状況に基づいて CPU およびメモリー要求を提案します。すべてのタイプのワークロードに適用されるユニバーサルレコメンデーションポリシーはないため、特定のワークロードに対して異なるレコメンダーを作成してデプロイメントすることを推奨します。

たとえば、デフォルトのレコメンダーは、コンテナーが特定のリソース動作を示している場合に、将来のリソース使用量を正確に予測しない可能性があります。例として、監視アプリケーションで使用される使用量の急増とアイドリングを交互に行う循環パターンや、ディープラーニングアプリケーションで使用される繰り返しパターンなどが挙げられます。これらの使用動作でデフォルトのレコメンダーを使用すると、アプリケーションのプロビジョニングが大幅に過剰になり、Out of Memory (OOM) が強制終了される可能性があります。

注記

レコメンダーを作成する方法については、このドキュメントの範囲外です。

手順

Pod に代替のレコメンダーを使用するには:

  1. 代替レコメンダーのサービスアカウントを作成し、そのサービスアカウントを必要なクラスターロールにバインドします。

    apiVersion: v1 
    1
    
    kind: ServiceAccount
    metadata:
      name: alt-vpa-recommender-sa
      namespace: <namespace_name>
    ---
    apiVersion: rbac.authorization.k8s.io/v1 
    2
    
    kind: ClusterRoleBinding
    metadata:
      name: system:example-metrics-reader
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:metrics-reader
    subjects:
    - kind: ServiceAccount
      name: alt-vpa-recommender-sa
      namespace: <namespace_name>
    ---
    apiVersion: rbac.authorization.k8s.io/v1 
    3
    
    kind: ClusterRoleBinding
    metadata:
      name: system:example-vpa-actor
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:vpa-actor
    subjects:
    - kind: ServiceAccount
      name: alt-vpa-recommender-sa
      namespace: <namespace_name>
    ---
    apiVersion: rbac.authorization.k8s.io/v1 
    4
    
    kind: ClusterRoleBinding
    metadata:
      name: system:example-vpa-target-reader-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:vpa-target-reader
    subjects:
    - kind: ServiceAccount
      name: alt-vpa-recommender-sa
      namespace: <namespace_name>
    Copy to Clipboard Toggle word wrap
    1
    レコメンダーを表示するレコメンダーのサービスアカウントを namespace に作成します。
    2
    レコメンダーサービスアカウントを metrics-reader ロールにバインドします。レコメンダーをデプロイする namespace を指定します。
    3
    レコメンダーサービスアカウントを vpa-actor ロールにバインドします。レコメンダーをデプロイする namespace を指定します。
    4
    レコメンダーサービスアカウントを vpa-target-reader ロールにバインドします。レコメンダーを表示する namespace を指定します。
  2. 代替レコメンダーをクラスターに追加するには、次のような Deployment オブジェクトを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: alt-vpa-recommender
      namespace: <namespace_name>
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: alt-vpa-recommender
      template:
        metadata:
          labels:
            app: alt-vpa-recommender
        spec:
          containers: 
    1
    
          - name: recommender
            image: quay.io/example/alt-recommender:latest 
    2
    
            imagePullPolicy: Always
            resources:
              limits:
                cpu: 200m
                memory: 1000Mi
              requests:
                cpu: 50m
                memory: 500Mi
            ports:
            - name: prometheus
              containerPort: 8942
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop:
                  - ALL
              seccompProfile:
                type: RuntimeDefault
          serviceAccountName: alt-vpa-recommender-sa 
    3
    
          securityContext:
            runAsNonRoot: true
    Copy to Clipboard Toggle word wrap
    1
    代替レコメンダーのコンテナーを作成します。
    2
    推奨イメージを指定します。
    3
    レコメンダー用に作成したサービスアカウントを関連付けます。

    同じ namespace 内の代替レコメンダー用に新しい Pod が作成されます。

    $ oc get pods
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                        READY   STATUS    RESTARTS   AGE
    frontend-845d5478d-558zf                    1/1     Running   0          4m25s
    frontend-845d5478d-7z9gx                    1/1     Running   0          4m25s
    frontend-845d5478d-b7l4j                    1/1     Running   0          4m25s
    vpa-alt-recommender-55878867f9-6tp5v        1/1     Running   0          9s
    Copy to Clipboard Toggle word wrap

  3. 代替レコメンダー Deployment オブジェクトの名前を含む Vertical Pod Autoscaler Operator (VPA)カスタムリソース(CR)を設定します。

    代替レコメンダーを含めるための VPA CR の例

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-recommender
      namespace: <namespace_name>
    spec:
      recommenders:
        - name: alt-vpa-recommender 
    1
    
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment 
    2
    
        name:       frontend
    Copy to Clipboard Toggle word wrap

    1
    代替レコメンダーデプロイメントの名前を指定します。
    2
    この VPA で管理する既存のワークロードオブジェクトの名前を指定します。

2.5.4. Vertical Pod Autoscaler Operator の使用

VPA カスタムリソース (CR) を作成して、Vertical Pod Autoscaler Operator (VPA) を使用できます。CR は、分析する Pod を示し、VPA がそれらの Pod について実行するアクションを判別します。

前提条件

  • 自動スケーリングするワークロードオブジェクトが存在することを確認します。
  • 別のレコメンダーを使用する場合は、そのレコメンダーを含むデプロイメントが存在することを確認してください。

手順

特定のワークロードオブジェクトの VPA CR を作成するには、以下を実行します。

  1. スケーリングするワークロードオブジェクトのプロジェクトの場所に切り替えます。

    1. VPA CR YAML ファイルを作成します。

      apiVersion: autoscaling.k8s.io/v1
      kind: VerticalPodAutoscaler
      metadata:
        name: vpa-recommender
      spec:
        targetRef:
          apiVersion: "apps/v1"
          kind:       Deployment 
      1
      
          name:       frontend 
      2
      
        updatePolicy:
          updateMode: "Auto" 
      3
      
        resourcePolicy: 
      4
      
          containerPolicies:
          - containerName: my-opt-sidecar
            mode: "Off"
        recommenders: 
      5
      
          - name: my-recommender
      Copy to Clipboard Toggle word wrap
      1
      この VPA が管理するワークロードオブジェクトのタイプ (DeploymentStatefulSetJobDaemonSetReplicaSet、または ReplicationController) を指定します。
      2
      この VPA が管理する既存のワークロードオブジェクトの名前を指定します。
      3
      VPA モードを指定します。
      • Auto は、コントローラーに関連付けられた Pod に推奨リソースを自動的に適用します。VPA は既存の Pod を終了し、推奨されるリソース制限および要求で新規 Pod を作成します。
      • Recreate は、ワークロードオブジェクトに関連付けられた Pod に推奨リソースを自動的に適用します。VPA は既存の Pod を終了し、推奨されるリソース制限および要求で新規 Pod を作成します。Recreate モードはほとんど使用されることはありません。リソース要求が変更される際に Pod が再起動されていることを確認する必要がある場合にのみ使用します。
      • initial 、ワークロードオブジェクトに関連付けられた新規に作成された Pod に推奨リソースを自動的に適用します。VPA は、新しい推奨リソースを確認する際に Pod を更新しません。
      • Off は、ワークロードオブジェクトに関連付けられた Pod の推奨リソースのみを生成します。VPA は、新しい推奨リソースを確認する際に Pod を更新しません。また、新規 Pod に推奨事項を適用しません。
      4
      オプション: オプトアウトするコンテナーを指定し、モードを Off に設定します。
      5
      オプション: レコメンダーの推奨者を指定します。
    2. VPA CR を作成します。

      $ oc create -f <file-name>.yaml
      Copy to Clipboard Toggle word wrap

      しばらくすると、VPA はワークロードオブジェクトに関連付けられた Pod 内のコンテナーのリソース使用状況を確認します。

      以下のコマンドを使用して、VPA の推奨事項を表示できます。

      $ oc get vpa <vpa-name> --output yaml
      Copy to Clipboard Toggle word wrap

      出力には、以下のような CPU およびメモリー要求の推奨事項が表示されます。

      出力例

      ...
      status:
      
      ...
      
        recommendation:
          containerRecommendations:
          - containerName: frontend
            lowerBound: 
      1
      
              cpu: 25m
              memory: 262144k
            target: 
      2
      
              cpu: 25m
              memory: 262144k
            uncappedTarget: 
      3
      
              cpu: 25m
              memory: 262144k
            upperBound: 
      4
      
              cpu: 262m
              memory: "274357142"
          - containerName: backend
            lowerBound:
              cpu: 12m
              memory: 131072k
            target:
              cpu: 12m
              memory: 131072k
            uncappedTarget:
              cpu: 12m
              memory: 131072k
            upperBound:
              cpu: 476m
              memory: "498558823"
      
      ...
      Copy to Clipboard Toggle word wrap

      1
      lowerBound は、推奨リソースの最小レベルです。
      2
      target は、推奨リソースのレベルです。
      3
      upperBound は、推奨リソースの最大レベルです。
      4
      uncappedTarget は最新の推奨リソースです。

2.5.5. Vertical Pod Autoscaler Operator のアンインストール

Vertical Pod Autoscaler Operator (VPA) を OpenShift Container Platform クラスターから削除できます。アンインストール後、既存の VPA カスタムリソース(CR)によってすでに変更されている Pod のリソース要求は変更されません。VPA による以前の推奨事項ではなく、ワークロードオブジェクトで定義されるリソースは、新規 Pod に割り当てられます。

注記

oc delete vpa <vpa-name> コマンドを使用して、特定の VPA CR を削除できます。Vertical Pod Autoscaler のアンインストール時と同じアクションがリソース要求に対して適用されます。

VPA を削除した後、潜在的な問題を回避するために、Operator に関連する他のコンポーネントを削除することを推奨します。

前提条件

  • VPA がインストールされている。

手順

  1. OpenShift Container Platform Web コンソールで、Operators Installed Operators をクリックします。
  2. openshift-vertical-pod-autoscaler プロジェクトに切り替えます。
  3. VerticalPodAutoscaler Operator の場合は、Options メニュー kebab をクリックし、Uninstall Operator を選択します。
  4. オプション: Operator に関連付けられているすべてのオペランドを削除するには、ダイアログボックスで Delete all operand instances for this operator チェックボックスをオンにします。
  5. Uninstall をクリックします。
  6. オプション: OpenShift CLI を使用して VPA コンポーネントを削除します。

    1. VPA namespace を削除します。

      $ oc delete namespace openshift-vertical-pod-autoscaler
      Copy to Clipboard Toggle word wrap
    2. VPA カスタムリソース定義 (CRD) オブジェクトを削除します。

      $ oc delete crd verticalpodautoscalercheckpoints.autoscaling.k8s.io
      Copy to Clipboard Toggle word wrap
      $ oc delete crd verticalpodautoscalercontrollers.autoscaling.openshift.io
      Copy to Clipboard Toggle word wrap
      $ oc delete crd verticalpodautoscalers.autoscaling.k8s.io
      Copy to Clipboard Toggle word wrap

      CRD を削除すると、関連付けられたロール、クラスターロール、およびロールバインディングが削除されます。

      注記

      この操作により、ユーザーが作成したすべての VPA CR がクラスターから削除されます。VPA を再インストールする場合は、これらのオブジェクトを再度作成する必要があります。

    3. 次のコマンドを実行して MutatingWebhookConfiguration オブジェクトを削除します。

      $ oc delete MutatingWebhookConfiguration vpa-webhook-config
      Copy to Clipboard Toggle word wrap
    4. VPA Operator を削除します。

      $ oc delete operator/vertical-pod-autoscaler.openshift-vertical-pod-autoscaler
      Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat