すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Horizontal Pod Autoscaling (HPA) の使用

最終更新日:Dec 03, 2025

アプリケーションコンテナーに対して Horizontal Pod Autoscaler (HPA) 機能を有効にすることで、CPU 使用率、メモリ使用率、またはその他のカスタムメトリックに基づいて Pod を自動的にスケーリングできます。HPA は、急なワークロードのスパイクに対応するために Pod レプリカを自動的にスケールアウトし、ワークロードが減少したときにはリソースを節約するために Pod レプリカをスケールインします。このプロセスは完全に自動化されています。HPA は、eコマース、オンライン教育、金融サービスなど、ワークロードの変動が大きく、頻繁なスケーリングが必要なサービスに最適です。

事前準備

HPA 機能を使用する前に、Kubernetes の公式ドキュメント Horizontal Pod Autoscaling をお読みになり、その基本原則、アルゴリズムの詳細、設定可能なスケーリング動作について理解することを推奨します。

Container Service for Kubernetes (ACK) クラスターは、さまざまなワークロードスケーリング (スケジューリングレイヤーの弾力性) およびノードスケーリング (リソースレイヤーの弾力性) ソリューションを提供します。先に進む前に、「Auto Scaling」をお読みになり、各ソリューションのユースケースと制限事項を理解してください。

前提条件

コンソールでの HPA アプリケーションの作成

Container Service for Kubernetes (ACK) は HPA と統合されており、ACK コンソールで HPA アプリケーションを作成できます。アプリケーションの作成時に HPA を有効にすることも、既存のアプリケーションに対して有効にすることもできます。各ワークロードに対しては、1つの HPA のみを作成することを推奨します。

アプリケーション作成時の HPA の作成

以下の手順では、ステートレスな Deployment を例に、アプリケーションで HPA を有効にする方法を説明します。他の種類のワークロードの手順も同様です。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。

  2. クラスター ページで、管理対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、ワークロード > 展開 を選択します。

  3. [ステートレス] ページで、[イメージから作成] をクリックします。

  4. [作成] ページで、アプリケーションの基本情報、コンテナー、サービス、スケーリングの設定を行い、Horizontal Pod Autoscaler (HPA) をサポートする Deployment を作成します。

    手順とパラメーターの詳細については、「ステートレスワークロード (Deployment) の作成」をご参照ください。以下に主要なパラメーターを説明します。

    • [基本情報]:アプリケーションの名前やレプリカ数などの基本設定を構成します。

    • [コンテナー設定]:コンテナーのイメージと、必要な CPU およびメモリリソースを構成します。

      リソースプロファイル機能を使用して、過去のリソース使用量データを分析し、コンテナーのリクエストとリミットを設定するための推奨値を取得できます。詳細については、「リソースプロファイル」をご参照ください。

      重要

      アプリケーションのリクエストリソースを設定する必要があります。設定しない場合、コンテナーの自動スケーリングは実行できません。

    • [詳細設定]

      • [アクセス設定] セクションで、[サービス] の横にある [作成] をクリックしてサービスを構成します。

      • [スケーリング設定] セクションで、[メトリックベースのスケーリング][有効化] に設定し、スケーリングの条件とパラメーターを構成します。

        • [メトリック]:サポートされているメトリックは CPU とメモリです。メトリックタイプは、設定したリソースタイプと一致する必要があります。CPU とメモリの両方を指定した場合、いずれかのメトリックがしきい値に達すると HPA がスケーリングイベントをトリガーします。

        • [トリガー条件]:リソース使用率のパーセンテージを指定します。リソース使用量がこの値を超えると、アプリケーションはスケールアウトします。水平ポッド自動スケーリングのアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。

        • [最大レプリカ数]:Deployment がスケールアウトできるレプリカの最大数です。この値は、最小レプリカ数より大きい必要があります。

        • [最小レプリカ数]:Deployment のレプリカの最小数で、1 以上の整数である必要があります。

    Deployment が作成された後、[Deployment] ページで表示できます。Deployment 名をクリックし、[Pod スケーリング] タブをクリックします。このタブでは、CPU やメモリの使用率、レプリカの最大数・最小数など、Horizontal Pod Autoscaler (HPA) のアクティビティに関連するメトリックを表示できます。また、HPA の構成の更新や無効化など、HPA の管理も行えます。

既存アプリケーションに対する HPA の作成

以下の手順では、ステートレスな Deployment を例に、既存のアプリケーションで HPA を有効にする方法を説明します。他の種類のワークロードの手順も同様です。

ワークロードページ

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。

  2. クラスター ページで、管理対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、ワークロード > 展開 を選択します。

  3. [ステートレス] ページで、対象のアプリケーション名をクリックし、[コンテナースケーリング] タブをクリックして、HPA エリアで [作成] をクリックします。

  4. [作成] ダイアログボックスで、スケーリング設定を構成します。

    • [名前]:HPA ポリシーの名前を指定します。

    • [メトリック] については、[追加] をクリックします。

      • [メトリック]:サポートされているメトリックは CPU とメモリです。メトリックタイプは、設定したリソースタイプと一致する必要があります。CPU とメモリの両方を指定した場合、いずれかのメトリックがしきい値に達すると HPA がスケーリングイベントをトリガーします。

      • [しきい値]:リソース使用率のパーセンテージです。リソース使用量がこの値を超えると、コンテナーはスケールアウトします。水平ポッド自動スケーリングのアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。

  • [最大レプリカ数]:Deployment がスケールアウトできるレプリカの最大数です。この値は、最小レプリカ数より大きい必要があります。

  • [最小レプリカ数]:Deployment のレプリカの最小数で、1 以上の整数である必要があります。

構成が完了したら、[Deployment] ページで Deployment 名をクリックし、[Pod スケーリング] タブをクリックします。このタブでは、CPU やメモリの使用率、レプリカの最小数・最大数など、Horizontal Pod Autoscaler (HPA) のメトリックを表示できます。また、HPA の構成の更新や無効化など、HPA の管理も行えます。

ワークロードスケーリングページ

説明

このページはホワイトリストのユーザーのみが利用できます。利用するには、チケットを送信してください。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。

  2. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のペインで、[ワークロードスケーリング] をクリックします。

  3. 右上隅にある [自動スケーリングの作成] をクリックし、[HPA と CronHPA] タブをクリックします。対象のワークロードを選択します。[スケーリングポリシーの設定] セクションで、[メトリックベースの自動スケーリング HPA] を選択し、HPA ポリシーを構成します。

    • [ポリシー名]:HPA ポリシーの名前です。

    • [最小レプリカ数]:ワークロードのレプリカの最小数です。値は 1 以上である必要があります。

    • [最大レプリカ数]:ワークロードがスケールアウトできるレプリカの最大数です。この値は、最小レプリカ数より大きい必要があります。

    • [メトリック名]:サポートされているメトリックには、CPU、GPU、メモリ、Nginx Ingress リクエスト、カスタムメトリックが含まれます。メトリックタイプは、指定されたリソースタイプと一致する必要があります。複数のリソースタイプを指定した場合、いずれかのメトリックがしきい値に達すると HPA がスケーリングイベントをトリガーします。

    • [しきい値]:コンテナーのスケールアウトをトリガーするリソース使用率のパーセンテージです。水平ポッド自動スケーリングのアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。

HPA が作成された後、[ワークロードスケーリング] ページで HPA のリストを表示できます。[操作] 列で、リソース使用率やレプリカの最小数・最大数など、HPA のメトリックを表示できます。また、構成の更新や無効化など、HPA の管理も行えます。

結果の検証

  1. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のペインで、[ワークロードスケーリング] をクリックします。

  2. [水平スケーリング] タブをクリックし、[HPA] を選択して、スケーリングのステータスとタスクリストを表示します。

説明

本番環境では、アプリケーションは Pod のペイロードに基づいてスケーリングします。ステージング環境で Pod に負荷テストを実施して、水平スケーリングの動作を検証することもできます。

kubectl を使用した HPA アプリケーションの作成

オーケストレーションテンプレートから手動で HPA を作成し、スケーリングしたい Deployment オブジェクトにバインドすることもできます。その後、kubectl コマンドを使用してコンテナーの自動スケーリングを構成できます。各ワークロードに対しては、1つの HPA のみを作成することを推奨します。以下の手順では、HPA をサポートする Nginx アプリケーションを例として使用します。

  1. nginx.yml という名前のファイルを作成し、次の内容をコピーします。

    重要

    HPA を実装する場合、Pod の request リソースを設定する必要があります。そうしないと、HPA は実行できません。リソースプロファイル機能を使用して、過去のリソース使用量データを分析し、コンテナーのリクエストとリミットを設定するための推奨値を取得できます。詳細については、「リソースプロファイル」をご参照ください。

    YAML の例を展開して表示

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx  
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9 # 実際の <image_name:tags> に置き換えてください。
            ports:
            - containerPort: 80
            resources:
              requests:         # requests を設定する必要があります。設定しない場合、HPA は計算を実行できず、メトリックは不明として表示されます。
                cpu: 500m
  2. 次のコマンドを実行して Nginx アプリケーションを作成します。

    kubectl apply -f nginx.yml
  3. hpa.yml という名前のファイルを作成し、次の内容をコピーして HPA を作成します。

    scaleTargetRef を使用して、HPA がバインドされるオブジェクトを指定します。この例では、HPA は nginx という名前の Deployment にバインドされます。すべての Pod 内のすべてのコンテナーの平均 CPU 使用率が 50% に達すると、スケーリングイベントがトリガーされます。

    1.24 以降

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx
      minReplicas: 1  # Deployment のレプリカの最小数。値は 1 以上の整数である必要があります。
      maxReplicas: 10  # Deployment のレプリカの最大数。値は minReplicas より大きい必要があります。
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50 # リソースの目標平均使用率。これは、平均リソース使用量とリクエストされた量との比率です。
                   

    1.24 より前

    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx
      minReplicas: 1  # 値は 1 以上の整数である必要があります。
      maxReplicas: 10  # 値は最小レプリカ数より大きい必要があります。
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
                   

    CPU とメモリの両方のメトリックを指定したい場合は、2つの HPA を作成する代わりに、metrics フィールドに cpumemory の両方のリソースタイプを指定できます。HPA は、いずれかのメトリックがスケーリングのしきい値に達したことを検出すると、スケーリング操作を実行します。

    metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
      - type: Resource
        resource:
          name: memory
          target:
            type: Utilization
            averageUtilization: 50
  4. 次のコマンドを実行して HPA を作成します。

    kubectl apply -f hpa.yml

    この時点で、kubectl describe hpa <HPA_name> コマンドを実行します。この例では、HPA 名は nginx-hpa です。出力に次の警告メッセージが表示されることが想定されます。このメッセージは、HPA がまだデプロイ中であることを示します。kubectl get hpa コマンドを実行して HPA のステータスを確認できます。

    Warning  FailedGetResourceMetric       2m (x6 over 4m)  horizontal-pod-autoscaler  missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7
    
    Warning  FailedComputeMetricsReplicas  2m (x6 over 4m)  horizontal-pod-autoscaler  failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5
  5. HPA が作成され、Pod がスケーリング条件を満たすのを待ちます。この例では、スケーリング条件は Nginx Pod の CPU 使用率が 50% を超えることです。その後、再度 kubectl describe hpa <HPA_name> コマンドを実行して、水平スケーリングのステータスを表示します。

    次の出力は、HPA が期待どおりに実行されていることを示します。

    Type    Reason             Age   From                       Message
      ----    ------             ----  ----                       -------
      Normal  SuccessfulRescale  5m6s  horizontal-pod-autoscaler  New size: 1; reason: All metrics below target

関連操作

デフォルトのスケーリング動作がビジネス要件を満たさない場合は、behavior フィールドを使用して、スケールダウン (scaleDown) とスケールアウト (scaleUp) の動作をより詳細に構成できます。詳細については、「設定可能なスケーリング動作」をご参照ください。

behavior フィールドでサポートされる典型的なシナリオには、以下が含まれますが、これらに限定されません:

  • トラフィックスパイク時の迅速なスケールアウト。

  • 負荷変動が頻繁なシナリオでの迅速なスケールアウトと緩やかなスケールインの実装。

  • 状態に敏感なアプリケーションに対するスケールインの無効化。

  • リソースに制約がある、またはコストに敏感なシナリオでは、stabilizationWindowSeconds 安定化ウィンドウを使用してスケールアウトの速度を制限できます。これにより、一時的な変動による頻繁な調整を減らすことができます。

behavior の構成と例の詳細については、「HPA のスケーリング感度の調整」をご参照ください。

よくある質問

関連ドキュメント

その他の関連ドキュメント

その他の ワークロードスケーリングソリューション

  • アプリケーションのリソース使用量に周期的な変化があり、Crontab ポリシーのようにスケジュールに基づいて Pod をスケーリングする必要がある場合は、「CronHPA を使用したスケジュールに基づく水平ポッドスケーリング」をご参照ください。

  • アプリケーションのリソース使用量に周期的な変化があり、ルールで定義するのが難しい場合は、AHPA を使用して過去のメトリックからビジネスサイクルを自動的に識別し、それに応じて Pod をスケーリングできます。詳細については、「予測型自動スケーリング (AHPA)」をご参照ください。

  • Pod のリソース使用量に基づいてリソースリミットを自動的に設定し、Pod が十分な計算リソースを持つようにするには、「Vertical Pod Autoscaling (VPA) の使用」をご参照ください。

  • メッセージキュー、スケジュールされたポリシー、カスタムメトリックなどの Kubernetes イベントに基づいて Pod のスケーリングポリシーを柔軟にカスタマイズするには、「イベント駆動型自動スケーリング」をご参照ください。

組み合わせソリューション

HPA をノードの自動スケーリング機能と組み合わせて使用することで、クラスターのリソースが不足した場合にノードを自動的にスケーリングできます。詳細については、「ノードの自動スケーリングの有効化」をご参照ください。