【ブイピーエー】

VPA(垂直Podオートスケーラ) とは?

最終更新:
💡 Podの数ではなく、コンテナのリソース設定を見直す

KubernetesのPod内のコンテナについて、使用量に基づいてCPU・メモリのrequestsを推奨し、設定した更新方式で適用するコンポーネント。Pod数を調整するHPAとは役割が異なる。

📌 このページのポイント
HPAは個数、VPAはコンテナの設定HPA:Podの個数を増やす例Pod1 → 3PodPodPodVPA:requestsを増やす例1コンテナのPod1コンテナのPodCPU:0.5メモリ:256MiCPU:1メモリ:512Mi増加幅は説明用の例。実測・推奨値ではないOffでは推奨だけ、適用は更新方式による再作成や、その場での更新の条件を確認
HPAの個数変更とVPAのコンテナごとの要求量変更を比べた例。増加だけでなく減少もあります。VPAはCPUそのものを交換するわけではなく、同じPodが必ず再作成なしで変わるとも限りません。
ひよこ ひよこ
VPAは何を調整するの?
ペンギン先生 ペンギン先生
Pod内のコンテナのCPU・メモリ使用量を見て、requestsの推奨値を出すよ。requestsは配置を決めるときにも使われるリソース要求量だね。設定によってはlimitsもrequestsとの比率で変えるけれど、limitsだけを独立に最適化する仕組みとは違うんだ。
ひよこ ひよこ
HPAとの違いは?
ペンギン先生 ペンギン先生
HPAはPodの数、VPAはコンテナごとのリソース設定を調整するよ。図はHPAで1個を3個に増やす場合と、VPAで要求量を増やす場合を比べた例。どちらも減らす方向の調整があり、VPAを使えば性能や費用が必ず改善するという保証ではないよ。
ひよこ ひよこ
値を変えると必ず再起動する?
ペンギン先生 ペンギン先生
更新方式によるよ。Offは推奨だけ、InitialはPodの作成時だけ適用する。Recreateは既存Podを退避・再作成して更新する。対応環境のInPlaceOrRecreateはその場での更新を試し、できない場合に再作成するよ。再作成の可能性と可用性への影響を確認しよう。
ひよこ ひよこ
HPAとは併用できないの?
ペンギン先生 ペンギン先生
同じ対象の同じCPUやメモリ指標を両方で制御する使い方は避ける必要があるよ。ただしVPAをメモリ、HPAをCPUに分けたり、HPAに別のカスタム・外部指標を使ったりする構成はある。一律に併用禁止ではなく、何を測って何を変えるかを合わせて考えるんだ。
ひよこ ひよこ
どう設定して使うの?
ペンギン先生 ペンギン先生
VPAの導入後、VerticalPodAutoscalerというカスタムリソースで対象のDeploymentなどと更新方式を指定するよ。Offで推奨を確認することもできる。minAllowedやmaxAllowedなどの範囲も設定できるけれど、必要なノード容量やクォータが足りないとPodが配置できない場合があるよ。
もっと詳しく知りたい人へ

どの環境でも同じ更新方式を使えるの?

導入したVPAとKubernetesのバージョンや機能設定によるよ。確認時点の開発元master資料にはInPlaceOrRecreateとInPlaceがあり、InPlaceにはVPA側とクラスタ側の機能設定も必要。Autoは非推奨とされている。利用中のリリースの資料と設定を確認し、masterにある機能を導入済みと決めつけないでね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「VPA」って出てきたら「コンテナのCPU・メモリ設定を使用量から見直す仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Vertical Pod Autoscaler」 = 垂直Podオートスケーラ
💬 「水平スケール(Pod数増加)」に対して「垂直スケール(1Podのリソース増加)」という意味で、Horizontal Pod Autoscaler(HPA)の対になる存在だよ。

参考資料

← 用語集にもどる