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

Container Service for Kubernetes:Horizontal Pod Autoscaler (HPA) の実装

最終更新日:Jun 19, 2025

Horizontal Pod Autoscaler (HPA) 機能を有効にして、CPU 使用率、メモリ使用量、またはその他のメトリクスに基づいてポッドを自動的にスケーリングできます。 HPA は、ワークロードが急増したときに負荷の高いストレスを処理するためにレプリケートされたポッドを迅速にスケールアウトし、ワークロードが減少したときにリソースを節約するために適切にスケールインできます。 プロセス全体が自動化されており、人為的な介入は必要ありません。 E コマースサービス、オンライン教育、金融サービスなど、サービスの変動が大きく、サービス数が多い、スケーリング要件が頻繁にあるビジネスに最適です。

始める前に

HPA 機能をより適切に使用するために、このトピックを読む前に、Kubernetes 公式ドキュメント Horizontal Pod Autoscaling を読んで、HPA の基本原則、アルゴリズムの詳細、およびスケーリング構成を理解することをお勧めします。

さらに、Container Service for Kubernetes (ACK) クラスタは、スケジューリングレイヤーの弾力性のためのさまざまな ワークロードスケーリング ソリューションと、リソースレイヤーの弾力性のための ノードスケーリング ソリューションを提供します。 HPA 機能を使用する前に、自動スケーリング を読んで、さまざまなソリューションの適用可能なシナリオと使用制限を理解することをお勧めします。

前提条件

ACK コンソールで HPA が有効になっているアプリケーションを作成する

ACK は HPA と統合されています。 ACK コンソールで HPA が有効になっているアプリケーションを作成できます。 アプリケーションの作成時、または既存のアプリケーションに対して HPA を有効にできます。 ワークロードに対して HPA が有効になっているアプリケーションは 1 つだけ作成することをお勧めします。

アプリケーションの作成時に HPA を有効にする

以下では、Deployment アプリケーションを例として、アプリケーションの作成時に HPA を有効にする方法について説明します。 その他のワークロードタイプの手順も同様です。

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

  2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のペインで、[ワークロード] > [デプロイメント] を選択します。

  3. [デプロイメント] ページで、[イメージから作成] をクリックします。

  4. [作成] ページで、プロンプトに従って基本情報、コンテナ構成、サービス構成、およびスケーリング構成を入力して、HPA をサポートするデプロイメントを作成します。

    具体的な手順と構成パラメーターの詳細については、「デプロイメントを使用してステートレスアプリケーションを作成する」をご参照ください。 以下に、主要なパラメーターを示します。

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

    • [コンテナ]: イメージと必要な CPU およびメモリリソースを選択します。

      リソースプロファイリング機能を使用して、リソース使用量の履歴データを分析し、コンテナのリクエストと制限を構成するための推奨事項を取得できます。 詳細については、「リソースプロファイリング」をご参照ください。

      重要

      アプリケーションに必要な request リソースを構成する必要があります。 そうしないと、HPA を有効にできません。

    • [詳細設定]:

      • [アクセス制御] セクションで、[サービス] の右側にある [作成] をクリックしてパラメーターを設定します。

      • [スケーリング] セクションで、[HPA][有効化] を選択し、スケーリングしきい値と関連パラメーターを構成します。

        • [メトリクス]: CPU 使用率またはメモリ使用率を選択します。これは、「必要なリソース」フィールドで指定したものと同じである必要があります。 CPU 使用率とメモリ使用率の両方が指定されている場合、HPA は、いずれかのメトリクスがスケーリングしきい値に達すると、スケーリング操作を実行します。

        • [条件]: リソース使用量のしきい値を指定します。 HPA は、しきい値を超えるとスケーリングイベントをトリガーします。 Horizontal Pod Autoscaling の実行に使用されるアルゴリズムの詳細については、アルゴリズムの詳細 を参照してください。

        • [最大レプリカ数]: デプロイメントをスケーリングできるポッドの最大数を指定します。 このパラメーターの値は、レプリケートされたポッドの最小数よりも大きくなければなりません。

        • [最小レプリカ数]: デプロイメントで実行する必要があるポッドの最小数を指定します。 このパラメーターの値は、1 以上の整数である必要があります。

    作成後、[デプロイメント] ページで新しいデプロイメントを表示できます。 デプロイメント名をクリックし、[基本情報] ページの [ポッドスケーリング] タブをクリックします。 [HPA] セクションでは、CPU とメモリの使用量、レプリカの最大数と最小数など、HPA アクティビティに関連するメトリクスを監視できます。 また、このセクションでは、構成の更新や無効化など、HPA を管理することもできます。

既存のアプリケーションに対して HPA を有効にする

以下では、Deployment アプリケーションを例として、既存のアプリケーションに対して HPA を有効にする方法について説明します。 その他のワークロードタイプの手順も同様です。

ワークロードページを使用する

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

  2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のペインで、[ワークロード] > [デプロイメント] を選択します。

  3. [デプロイメント] ページで、ターゲットアプリケーション名をクリックし、[ポッドスケーリング] タブをクリックし、HPA の右側にある [作成] をクリックします。

  4. [作成] ダイアログボックスで、プロンプトに従って HPA 設定を構成します。

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

    • [メトリック]: CPU 使用率またはメモリ使用率を選択します。これは、「必要なリソース」フィールドで指定したものと同じである必要があります。 CPU 使用率とメモリ使用率の両方が指定されている場合、HPA は、いずれかのメトリクスがスケーリングしきい値に達すると、スケーリング操作を実行します。

    • [しきい値]: リソース使用量のしきい値を指定します。 HPA は、しきい値を超えるとスケーリングイベントをトリガーします。 Horizontal Pod Autoscaling の実行に使用されるアルゴリズムの詳細については、アルゴリズムの詳細 を参照してください。

    • [最大コンテナ数]: デプロイメントをスケーリングできるポッドの最大数を指定します。 このパラメーターの値は、レプリケートされたポッドの最小数よりも大きくなければなりません。

    • [最小コンテナ数]: デプロイメントで実行する必要があるポッドの最小数を指定します。 このパラメーターの値は、1 以上の整数である必要があります。

作成後、[デプロイメント] ページでデプロイメント名をクリックできます。 [基本情報] ページで、[ポッドスケーリング] タブをクリックします。 [HPA] セクションでは、CPU とメモリの使用量、レプリカの最大数と最小数など、HPA アクティビティに関連するメトリクスを監視できます。 また、このセクションでは、構成の更新や無効化など、HPA を管理することもできます。

ワークロードスケーリングページを使用する

説明

この機能は、ホワイトリストに登録されているユーザーのみが使用できます。 使用するには、 チケットを送信 してください。

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

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

  3. ページの右上隅にある [自動スケーリングの作成] をクリックします。 [HPA と CronHPA] タブで、必要に応じてワークロードを選択します。 [自動スケーリングポリシーの構成] セクションで、[HPA] チェックボックスをオンにし、プロンプトに従って HPA ポリシーを構成します。

    • [スケーリングポリシー名]: HPA ポリシーの名前を入力します。

    • [最小コンテナ数]: デプロイメントで実行する必要があるポッドの最小数を指定します。 このパラメーターの値は、1 以上の整数である必要があります。

    • [最大コンテナ数]: デプロイメントをスケーリングできるポッドの最大数を指定します。 このパラメーターの値は、レプリケートされたポッドの最小数よりも大きくなければなりません。

    • [スケーリングメトリック]: CPU、GPU、メモリ、NGINX Ingress リクエスト、およびカスタムメトリックをサポートします。これらは、構成されたリソースタイプと一致する必要があります。 複数のリソースタイプが指定されている場合、HPA は、いずれかのメトリックがスケーリングしきい値に達したことを検出するとすぐにスケーリング操作をトリガーします。

    • [しきい値]: リソース使用量のしきい値を指定します。 HPA は、しきい値を超えるとスケーリングイベントをトリガーします。 Horizontal Pod Autoscaling の実行に使用されるアルゴリズムの詳細については、アルゴリズムの詳細 を参照してください。

作成後、[ワークロードスケーリング] ページで HPA リストを表示できます。 新しい HPA タスクの [アクション] 列の [詳細] をクリックして、リソース使用量、レプリケートされたコンテナの最大数と最小数など、HPA アクティビティに関連するメトリクスを監視します。 また、このセクションでは、構成の更新や無効化など、HPA を管理することもできます。

結果の検証

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

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

説明

アプリケーションの実行が開始されると、コンテナリソースはポッド間の負荷に基づいて自動的にスケーリングされます。 また、アプリケーションのポッドで CPU ストレステストを実行することにより、ステージング環境で HPA が有効になっているかどうかを確認することもできます。

kubectl を使用して HPA が有効になっているアプリケーションを作成する

オーケストレーションテンプレートを使用して HPA を作成し、HPA を有効にするデプロイメントに HPA を関連付けることもできます。 その後、kubectl コマンドを実行して HPA を有効にできます。 ワークロードに対して HPA が有効になっているアプリケーションは 1 つだけ作成することをお勧めします。 次の例では、NGINX アプリケーションに対して HPA が有効になっています。

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

    重要

    アプリケーションに必要な 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:       # このパラメーターは HPA メトリクスの計算に必要です。 そうしないと、HPA は不明なステータスを表示します。
                cpu: 500m
  2. 次のコマンドを実行して、NGINX アプリケーションを作成します。

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

    scaleTargetRef パラメーターを使用して、HPA を nginx デプロイメントに関連付け、ポッド内のすべてのコンテナの平均 CPU 使用率が 50% に達したときにスケーリング操作をトリガーします。

    Kubernetes バージョンが 1.24 以後のクラスターの YAML テンプレート

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx
      minReplicas: 1  # デプロイメントで実行する必要があるコンテナの最小数。 このパラメーターの値は、1 以上の整数である必要があります。
      maxReplicas: 10  # デプロイメントをスケーリングできるコンテナの最大数。 このパラメーターの値は、minReplicas よりも大きくなければなりません。
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50 # ターゲットリソースの平均使用率。これは、リソース使用量の平均値とそのリクエスト量の比率です。
                   

    Kubernetes バージョンが 1.24 より前のクラスターの YAML テンプレート

    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx
      minReplicas: 1  # 1 以上の整数である必要があります。
      maxReplicas: 10  # minReplicas よりも大きくなければなりません。
      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名> コマンドを実行すると、次の出力に類似した警告が返されます。これは、HPA がまだデプロイされていることを示しています。 この例の HPA 名は nginx-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 が作成され、ポッドがスケーリング条件に達するまで待ちます。これは、この例では、NGINX のポッド CPU 使用率が 50% を超えたときです。 その後、kubectl describe hpa <HPA名> コマンドを再度実行して、水平スケーリングステータスを確認します。

    次の出力が返された場合、HPA は想定どおりに実行されています。

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

関連操作

デフォルトのスケーリング動作がビジネス要件を満たしていない場合は、behavior パラメーターの scaleUp フィールドと scaleDown フィールドを指定して、よりきめ細かいスケールアウトとスケールインの設定を行うことができます。 詳細については、構成可能なスケーリング動作 を参照してください。

behavior でサポートされている一般的なシナリオは次のとおりです。

  • トラフィックの急増時に迅速なスケーリングを実現します。

  • 負荷の変動が頻繁に発生するシナリオでは、迅速なスケールアップと遅いスケールダウンを実装します。

  • 状態に敏感なアプリケーションのスケールダウンを防ぎます。

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

behavior パラメーターと構成例の詳細については、「HPA のスケーリング動作を微調整する」をご参照ください。

よくある質問

参考資料

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

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

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

  • アプリケーションリソースの使用量にルールで定義するのが難しい周期的な変更がある場合は、Advanced Horizontal Pod Autoscaling (AHPA) を使用してリソース使用サイクルを自動的に識別し、履歴メトリクスに基づいてポッドをスケーリングできます。 詳細については、「AHPA に基づく予測スケーリング」をご参照ください。

  • ポッドが十分な計算リソースを取得できるように、ポッドリソースの使用量に基づいてポッドのリソース制限を自動的に設定する必要がある場合は、「Vertical Pod Autoscaler (VPA)」をご参照ください。

  • メッセージキュー、タイミング戦略、カスタムメトリック、その他の Kubernetes イベントに基づいてポッドのスケーリングポリシーを柔軟にカスタマイズする必要がある場合は、「イベント駆動型自動スケーリング」をご参照ください。

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

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