2.5.4.6. VPA Operator のパフォーマンスチューニング
クラスター管理者は、Vertical Pod Autoscaler Operator (VPA) のパフォーマンスを調整して、VPA が Kubernetes API サーバーにリクエストを行うレートを制限したり、VPA レコメンダー、アップデーター、アドミッションコントローラーコンポーネントの Pod の CPU とメモリーリソースを指定したりできます。
VPA カスタムリソース (CR) が管理するワークロードのみを監視するように VPA を設定することもできます。デフォルトでは、VPA はクラスター内のすべてのワークロードを監視します。その結果、VPA はすべてのワークロードの 8 日間の履歴データを蓄積して保存します。ワークロードに対して新しい VPA CR が作成された場合、VPA でこれを使用できます。ただし、これにより VPA は大量の CPU とメモリーを使用することになります。これにより、特に大規模なクラスターでは VPA が失敗する可能性があります。VPA CR を使用してワークロードのみを監視するように VPA を設定すると、CPU とメモリーのリソースを節約できます。トレードオフの 1 つは、実行中のワークロードがあり、そのワークロードを管理するために VPA CR を作成する場合です。VPA にはそのワークロードの履歴データがありません。そのため、最初の推奨値は、ワークロードがしばらく実行された後の推奨値ほど有用ではありません。
これらのチューニングを使用して、VPA が最高の効率で動作するために十分なリソースを確保し、スロットルや Pod の承認の遅延を防止します。
VerticalPodAutoscalerController カスタムリソース (CR) を編集することで、VPA コンポーネントに対して以下のチューニングを行えます。
-
スロットル調整と Pod アドミッションの遅延を防ぐには、
kube-api-qpsパラメーターとkube-api-burstパラメーターを使用して、Kubernetes API サーバーの VPA リクエストの 1 秒あたりのクエリー数 (QPS) とバーストレートを設定します。 -
十分な CPU とメモリーを確保するには、標準の
cpuおよびmemoryリソース要求を使用して、VPA コンポーネント Pod の CPU 要求とメモリー要求を設定します。 -
VPA CR が管理するワークロードのみを監視するように VPA を設定するには、レコメンデーションコンポーネントの
memory-saverパラメーターをtrueに設定します。
各 VPA コンポーネントに設定できるリソースおよびレート制限のガイドラインについて、次の表では、クラスターや他の要素のサイズに応じて、推奨のベースライン値を紹介しています。
これらの推奨値は、Red Hat の内部テストに基づいて算出されたものであり、必ずしも実際のクラスターを代表するものではありません。実稼働クラスターを設定する前に、実稼働以外のクラスターでこれらの値をテストしてください。
| コンポーネント | 1 - 500 個のコンテナー | 500 - 1000 個のコンテナー | 1000 - 2000 個のコンテナー | 2000 - 4000 個のコンテナー | 4000 個以上のコンテナー | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| CPU | メモリー | CPU | メモリー | CPU | メモリー | CPU | メモリー | CPU | メモリー | |
| アドミッション | 25m | 50 Mi | 25m | 75Mi | 40m | 150Mi | 75m | 260 Mi | (0.03c)/2 + 10 [1] | (0.1c)/2 + 50 [1] |
| レコメンダー | 25m | 100Mi | 50m | 160Mi | 75m | 275Mi | 120M | 420Mi | (0.05c)/2 + 50 [1] | (0.15c)/2 + 120 [1] |
| アップデーター | 25m | 100Mi | 50m | 220Mi | 80 m | 350Mi | 150 m | 500Mi | (0.07c)/2 + 20 [1] | (0.15c)/2 + 200 [1] |
-
cは、クラスター内のコンテナーの数です。
コンテナーのメモリー制限は、表中の推奨される要求量の少なくとも 2 倍に設定することを推奨します。ただし、CPU は圧縮可能なリソースであるため、コンテナーの CPU 制限を設定すると VPA をスロットリングできます。そのため、コンテナーに CPU 制限を設定しないことが推奨されます。
| コンポーネント | 1-150 VPAs | 151-500 VPAs | 501-2,000 VPAs | 2,001-4,000 VPAs | ||||
|---|---|---|---|---|---|---|---|---|
| QPS 制限 [1] | Burst [2] | QPS 制限 | Burst | QPS 制限 | Burst | QPS 制限 | Burst | |
| レコメンダー | 5 | 10 | 30 | 60 | 60 | 120 | 120 | 240 |
| アップデーター | 5 | 10 | 30 | 60 | 60 | 120 | 120 | 240 |
-
QPS は、Kubernetes API サーバーにリクエストを行う際の 1 秒あたりのクエリー数 (QPS) の制限を指定します。アップデーターおよびレコメンダー Pod のデフォルトは
5.0です。 -
Burst は、Kubernetes API サーバーにリクエストを行う際のバースト制限を指定します。アップデーターおよびレコメンダー Pod のデフォルトは
10.0です。
クラスターに 4,000 を超える VPAs がある場合は、テーブルの値でパフォーマンスチューニングを開始し、必要なレコメンダー、更新レイテンシーおよびパフォーマンスを達成するまで値を徐々に増やすことを推奨します。QPS および Burst の増加により、VPA コンポーネントから API サーバーに送信される API 要求が多すぎると、クラスターの健全性に影響し、Kubernetes API サーバーの速度が遅くなる可能性があるため、これらの値は徐々に調整します。
以下の VPA コントローラー CR の例は、1,000 から 2,000 コンテナーを持つクラスター用であり、Pod の作成サージは 26 から 50 になります。CR は以下の値を設定します。
- 3 つの VPA コンポーネントすべてに対するコンテナーメモリーおよび CPU 要求
- 3 つの VPA コンポーネントすべてに対するコンテナーのメモリー制限
- 3 つの VPA コンポーネントすべてに対する QPS およびバーストレート
-
VPA レコメンダーコンポーネントの
memory-saverパラメーターをtrueに設定
VerticalPodAutoscalerController CR の例
apiVersion: autoscaling.openshift.io/v1
kind: VerticalPodAutoscalerController
metadata:
name: default
namespace: openshift-vertical-pod-autoscaler
spec:
deploymentOverrides:
admission:
container:
args:
- '--kube-api-qps=50.0'
- '--kube-api-burst=100.0'
resources:
requests:
cpu: 40m
memory: 150Mi
limits:
memory: 300Mi
recommender:
container:
args:
- '--kube-api-qps=60.0'
- '--kube-api-burst=120.0'
- '--memory-saver=true'
resources:
requests:
cpu: 75m
memory: 275Mi
limits:
memory: 550Mi
updater:
container:
args:
- '--kube-api-qps=60.0'
- '--kube-api-burst=120.0'
resources:
requests:
cpu: 80m
memory: 350M
limits:
memory: 700Mi
minReplicas: 2
podMinCPUMillicores: 25
podMinMemoryMb: 250
recommendationOnly: false
safetyMarginFraction: 0.15
- 1
- VPA アドミッションコントローラーのチューニングパラメーターを指定します。
- 2
- VPA アドミッションコントローラーの API QPS とバーストレートを指定します。
-
kube-api-qps: Kubernetes API サーバーにリクエストを行うときの 1 秒あたりのクエリー数 (QPS) 制限を指定します。デフォルトは5.0です。 -
kube-api-burst: Kubernetes API サーバーにリクエストを行うときのバースト制限を指定します。デフォルトは10.0です。
-
- 3
- VPA アドミッションコントローラー Pod のリソース要求および制限を指定します。
- 4
- VPA レコメンダーのチューニングパラメーターを指定します。
- 5
- VPA Operator が VPA CR を持つワークロードのみを監視するように指定します。デフォルトは
falseです。 - 6
- VPA アップデーターのチューニングパラメーターを指定します。
設定が各 VPA コンポーネント Pod に適用されたことを確認できます。
アップデーター Pod の例
apiVersion: v1
kind: Pod
metadata:
name: vpa-updater-default-d65ffb9dc-hgw44
namespace: openshift-vertical-pod-autoscaler
# ...
spec:
containers:
- args:
- --logtostderr
- --v=1
- --min-replicas=2
- --kube-api-qps=60.0
- --kube-api-burst=120.0
# ...
resources:
requests:
cpu: 80m
memory: 350M
# ...
アドミッションコントローラー Pod の例
apiVersion: v1
kind: Pod
metadata:
name: vpa-admission-plugin-default-756999448c-l7tsd
namespace: openshift-vertical-pod-autoscaler
# ...
spec:
containers:
- args:
- --logtostderr
- --v=1
- --tls-cert-file=/data/tls-certs/tls.crt
- --tls-private-key=/data/tls-certs/tls.key
- --client-ca-file=/data/tls-ca-certs/service-ca.crt
- --webhook-timeout-seconds=10
- --kube-api-qps=50.0
- --kube-api-burst=100.0
# ...
resources:
requests:
cpu: 40m
memory: 150Mi
# ...
レコメンダー Pod の例
apiVersion: v1
kind: Pod
metadata:
name: vpa-recommender-default-74c979dbbc-znrd2
namespace: openshift-vertical-pod-autoscaler
# ...
spec:
containers:
- args:
- --logtostderr
- --v=1
- --recommendation-margin-fraction=0.15
- --pod-recommendation-min-cpu-millicores=25
- --pod-recommendation-min-memory-mb=250
- --kube-api-qps=60.0
- --kube-api-burst=120.0
- --memory-saver=true
# ...
resources:
requests:
cpu: 75m
memory: 275Mi
# ...