2.5.5. Vertical Pod Autoscaler Operator の使用


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

VPA を使用して、デプロイメントまたはステートフルセットなどの組み込みリソースや Pod を管理するカスタムリソースをスケーリングできます。詳細は、「Vertical Pod Autoscaler Operator の使用について」を参照してください。

前提条件

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

手順

特定のワークロードオブジェクトの 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
      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

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

      次のコマンドを使用して、VPA の推奨値を表示できます。

      $ oc get vpa <vpa-name> --output yaml

      出力には、以下のような 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"
      
      ...

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

2.5.5.1. Vertical Pod Autoscaler のカスタムリソースの例

Vertical Pod Autoscaler (VPA) Operator は、デプロイメントまたはステートフルセットなどの組み込みリソースだけでなく、Pod を管理するカスタムリソースも更新できます。

カスタムリソースで VPA を使用するには、CustomResourceDefinition (CRD) オブジェクトを作成する際に、/scale サブリソースの labelSelectorPath フィールドを設定する必要があります。/scale サブリソースは Scale オブジェクトを作成します。labelSelectorPath フィールドは、Scale オブジェクトおよびカスタムリソースの status.selector に対応するカスタムリソース内の JSON パスを定義します。以下は、カスタムリソースをターゲットとする VerticalPodAutoscaler 定義と共に、これらの要件を満たす CustomResourceDefinition および CustomResource の例です。/scale サブリソースコントラクトの例を以下に示します。

注記

この例では、Pod を所有することを許可するカスタムリソースのコントローラーが存在しないため、VPA による Pod のスケーリングは行われません。そのため、カスタムリソースと Pod 間の調整と状態管理を管理するために、Kubernetes がサポートする言語でコントローラーを作成する必要があります。この例は、VPA がカスタムリソースをスケーラブルなものとして認識できるようにするための設定を示しています。

カスタム CRD、CR の例

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: scalablepods.testing.openshift.io
spec:
  group: testing.openshift.io
  versions:
  - name: v1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              replicas:
                type: integer
                minimum: 0
              selector:
                type: string
          status:
            type: object
            properties:
              replicas:
                type: integer
    subresources:
      status: {}
      scale:
        specReplicasPath: .spec.replicas
        statusReplicasPath: .status.replicas
        labelSelectorPath: .spec.selector 
1

  scope: Namespaced
  names:
    plural: scalablepods
    singular: scalablepod
    kind: ScalablePod
    shortNames:
    - spod

1
カスタムリソースオブジェクトの status.selector フィールドに対応する JSON パスを指定します。

カスタム CR の例

apiVersion: testing.openshift.io/v1
kind: ScalablePod
metadata:
  name: scalable-cr
  namespace: default
spec:
  selector: "app=scalable-cr" 
1

  replicas: 1

1
管理対象の Pod に適用するラベルのタイプを指定します。これは、カスタムリソース定義オブジェクト内で labelSelectorPath が参照するフィールドです。

VPA オブジェクトの例

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: scalable-cr
  namespace: default
spec:
  targetRef:
    apiVersion: testing.openshift.io/v1
    kind: ScalablePod
    name: scalable-cr
  updatePolicy:
    updateMode: "Auto"

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る