2.5.4. 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
Auto に設定された VPA を作成すると、VPA はリソースの使用状況を確認して Pod を削除します。再デプロイ時に、Pod は新規のリソース制限および要求を使用します。
resources:
limits:
cpu: 50m
memory: 1250Mi
requests:
cpu: 25m
memory: 262144k
次のコマンドを使用して、VPA の推奨値を表示できます。
$ oc get vpa <vpa-name> --output yaml
数分後に、出力には、以下のような 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"
...
出力には、target (推奨リソース)、lowerBound (最小推奨リソース)、upperBound (最大推奨リソース)、および uncappedTarget (最新の推奨リソース) が表示されます。
VPA は lowerBound および upperBound の値を使用して、Pod の更新が必要か判別します。Pod のリソース要求が lowerBound 値より少ないか upperBound 値より大きい場合、VPA は Pod を終了し、target 値で Pod を再作成します。
2.5.4.1. VPA の最小値の変更 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトで、ワークロードオブジェクトは、VPA が Pod を自動的に削除し、更新できるようにするためにレプリカを 2 つ以上指定する必要があります。そのため、2 つ未満を指定するワークロードオブジェクトの場合 VPA は自動的に機能しません。VPA 外部のプロセスによって Pod が再起動された場合、VPA はこれらのワークロードオブジェクトから新しい Pod を更新します。このクラスター全体の最小値の変更は、VerticalPodAutoscalerController カスタムリソース (CR) の minReplicas パラメーターを変更して実行できます。
たとえば、minReplicas を 3 に設定する場合、VPA は 2 レプリカ以下のレプリカを指定するワークロードオブジェクトの Pod を削除せず、更新しません。
minReplicas を 1 に設定する場合、VPA は 1 つのレプリカのみを指定するワークロードオブジェクトの Pod のみを削除できます。VPA が Pod を削除してリソースを調整するたびに、ワークロードがダウンタイムを許容できる場合にのみ、1 つのレプリカオブジェクトでこの設定を使用します。1 つのレプリカオブジェクトで不要なダウンタイムを回避するには、podUpdatePolicy を Initial に設定して 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
podMinCPUMillicores: 25
podMinMemoryMb: 250
recommendationOnly: false
safetyMarginFraction: 0.15
- 1
- 動作させる VPA のワークロードオブジェクトのレプリカの最小数を指定します。最低数に満たない数のレプリカを持つオブジェクトは、VPA によって自動的に削除されません。