9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

再起動させないVPA活用術!"Offモード"で安全にリソース設定を最適化する(OpenShift編)

9
Last updated at Posted at 2026-02-26

そのresources設定、"勘"で決めていませんか?

OpenShiftクラスターでアプリケーションを運用していると、必ず向き合うことになるresourcesrequests / limits)の設定。

  • 「このPodのCPU requests200mで本当に足りる…?」
  • 「メモリ1Giって申請されたけど、クラスタリソースをムダ遣いしてない?」
  • 「とりあえず動いてるけど、これって最適な値なんだろうか…?」

Podの安定稼働とコスト効率を左右する重要な設定が、経験や"勘"に頼りがちになってしまうことがあります。

この記事では、OpenShiftで手軽に導入できるVertical Pod Autoscaler(VPA)を、安全な "Offモード" で動かし、リソース設定の最適解を"盗み見る"実践テクニックを紹介します。VPAは読んで字の如し、自動スケールアップが主目的の機能です。

VPAのOffモードは「優秀な分析レポート」

VPAには、その働き方を決めるいくつかのモードがあります。多くの方が心配する自動再起動はRecreateモードの挙動です。

しかし、今回主役となるupdateMode: "Off"は、Podに一切手を出しません。
その仕事はただ一つ。対象のPodの働きぶり(CPU/メモリ使用量)をじっと観察し、「このPodなら、これくらいのリソースが最適ですよ」という推奨値(Recommendation)をレポートしてくれます。

OpenShiftではVPA Operatorの導入がとても簡単です。OperatorHubから数クリックでインストールできるため、面倒な設定なしですぐにVPAを利用できます。
(インストールは簡単なので省略します!)

実践!stress-ngで負荷をかけ、VPAに分析させる

では、実際にstress-ngで擬似的な負荷をかけ、VPAで分析結果を確認してみます。

Step 1:準備(Podと"Offモード"VPAの用意)

まず、テスト対象のPodと、それを監視するupdateMode: "Off"のVPAを用意します。

test-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: stress-test-vpa
spec:
  replicas: 1
  selector:
    matchLabels:
      app: stress-vpa
  template:
    metadata:
      labels:
        app: stress-vpa
    spec:
      containers:
      - name: stress-container
        image: polinux/stress-ng
        # resourcesはあえて空にしておく
        resources: {}
        command: ["tail", "-f", "/dev/null"]
test-vpa-off.yaml
apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
  name: stress-vpa-analyzer
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment
    name:       stress-test-vpa
  updatePolicy:
    # "Off"モードで、推奨値のレポートだけを出力させる
    updateMode: "Off"

作成したYAMLをocコマンドで適用します。

$ oc apply -f test-deployment.yaml
$ oc apply -f test-vpa-off.yaml

Step 2:模擬試験(高負荷シナリオを実行する)

次に、stress-ngで負荷をかけてみます。

# Pod名を取得して、高負荷コマンドを実行
$ POD_NAME=$(oc get pods -l app=stress-vpa -o 'jsonpath={.items[0].metadata.name}')
$ oc exec -it ${POD_NAME} -- stress-ng --cpu 1 --cpu-load 80 --timeout 180s

別プロンプトで確認すると負荷が上がっていることがわかります。

NAME                               CPU(cores)   MEMORY(bytes)
stress-test-vpa-7c86789c8c-twwts   789m         8Mi

Step 3:レポート確認(VPAの推奨値を盗み見る!)

負荷をかけている間に、裏でVPAアナリストがどんなレポートをまとめているか確認します。oc describe vpaコマンドで、Recommendation(推奨)セクションに注目します。

# VPAの分析レポートを確認する
$ oc describe vpa stress-vpa-analyzer

...
  Recommendation:
    Container Recommendations:
      Container Name:  stress-container
      Lower Bound:
        Cpu:     25m
        Memory:  262144k
      Target:
        Cpu:     920m
        Memory:  262144k
      Uncapped Target:
        Cpu:     920m
        Memory:  262144k
      Upper Bound:
        Cpu:     147306m
        Memory:  1841334254
...

VPAのレポートを見てみます。

Target: 920m ← VPAが考える 「推奨値」 です。requests設定の最有力候補です。
Lower Bound: 25m ← 最小推奨リソースです。
Upper Bound: 147306m ← 最大推奨リソースです。

VPAはTargetとして「920mのCPUが妥当だろう」と分析してくれました!

まとめ:安全な"答え合わせ"で、リソース設定に自信を

"Offモード"のVPAは、その演技を見て最適なresourcesを安全に教えてくれるアナリストとして利用できます。
今回利用したstress-ngは、アプリケーションのさまざまな負荷シナリオを実行する便利なツールです。(昔からあるので色んなサイトで紹介されています。)

VPAを使えば、以下のシーンで活用できるかと思います!

  • 開発段階で、アプリの適切なリソース量を見積もる
  • 本番環境で、既存のPodのリソース設定が妥当か、診断する

requests設定で「なんとなく」になりそうなときはVPAを活用して、リソース設定に裏付けを加えてみてはいかがでしょう。

9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?