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

Container Service for Kubernetes:水平 Pod オートスケーラー (HPA) の使用

最終更新日:Aug 26, 2026

水平 Pod オートスケーラー (HPA) を有効にすると、CPU 使用率、メモリ使用量、またはカスタムメトリクスに基づいて Pod を自動的にスケーリングできます。HPA は、トラフィックスパイクを処理するために Pod のレプリカ数を増やし、アイドル期間中にはリソースを自動的に節約するために数を減らします。この機能は、e コマースプラットフォーム、オンライン教育サービス、金融アプリケーションなど、頻繁なスケーリングを必要とする変動の激しいワークロードを持つアプリケーションに最適です。

事前準備

HPA を効果的に使用するために、Kubernetes の公式ドキュメント「Horizontal Pod Autoscaling」をお読みいただき、その基本原則、アルゴリズム、設定可能なスケーリング動作を理解することを推奨します。

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

前提条件

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

ACK は HPA と統合されており、コンソールから HPA を有効にしたアプリケーションを作成できます。新しいアプリケーションを作成するとき、または既存のアプリケーションに対して HPA を有効にできます。ワークロードごとに作成する HPA は 1 つだけにすることを推奨します。

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

次の例では、Deployment を使用して、アプリケーションの作成時に HPA を有効にする方法を示します。他のワークロードタイプの手順も同様です。

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

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

  3. デプロイメント ページで、イメージによる作成 をクリックします。

  4. 作成する ページで、画面の指示に従い、アプリケーションの基本情報、コンテナ、サービス、スケーリングを設定して、HPA に対応した Deployment を作成します。

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

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

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

      リソースプロファイリング機能は、過去のリソース使用状況を分析し、コンテナの Requests と Limits を設定するための推奨事項を提供します。詳細については、「リソースプロファイリング」をご参照ください。

      重要

      HPA を有効にするには、アプリケーションにリソースの requests を設定する必要があります。

    • [詳細設定]:

      • スケーリング セクションで、HPA有効 を選択し、スケーリングの条件とパラメーターを設定します。

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

        • トリガー条件:リソース使用率のしきい値で、パーセンテージで指定します。リソース使用率がこのしきい値を超えると、コンテナはスケールアウトします。水平 Pod オートスケーラーのアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。

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

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

    作成が完了したら、デプロイメント ページで作成した Deployment を表示できます。Deployment 名をクリックし、Deployment の詳細ページで ポッドのスケーリング タブをクリックします。このセクションでは、CPU やメモリの使用率、レプリカの最大数や最小数など、HPA のアクティビティに関連するメトリクスを表示し、設定を更新したり無効にしたりして HPA を管理できます。

既存アプリケーションでの HPA の有効化

この例では、既存の Deployment で HPA を有効にする方法を示します。他のワークロードタイプの手順も同様です。

ワークロードページ

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

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

  3. デプロイメント ページで、対象アプリケーションの名前をクリックし、ポッドのスケーリング タブをクリックして、HPA セクションの 作成する をクリックします。

  4. 作成する ダイアログボックスで、画面の指示に従ってスケーリング設定を構成します。

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

    • [メトリック]:追加 をクリックします。

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

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

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

  • [コンテナーの最小数]:Deployment がスケールダウンできるレプリカの最小数です。値は 1 以上の整数である必要があります。

設定が完了したら、[デプロイメント] ページで Deployment 名をクリックし、Deployment の詳細ページで ポッドのスケーリング タブをクリックします。このエリアでは、CPU やメモリの使用率、レプリカの最大数や最小数など、HPA のアクティビティに関連するメトリクスを表示し、設定を更新したり無効にしたりして HPA を管理できます。

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

説明

このページは、許可リストに登録されたユーザーのみが利用できます。アクセスをリクエストするには、チケットを送信してください。

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[Auto Scaling] > [Workload Scaling] を選択します。

  3. ページの右上隅にある オートスケーリングを作成する をクリックし、HPA および CronHPA タブをクリックします。対象のワークロードを選択し、スケーリングポリシーを設定する セクションで HPA を選択し、プロンプトに従って HPA ポリシーを設定します。

    • [スケーリングポリシー名]:HPA ポリシーの名前です。

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

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

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

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

作成が完了したら、ワークロードスケーリング ページで HPA のリストを表示できます。アクション 列では、リソース使用率やレプリカの最大数・最小数など、HPA のアクティビティに関連するメトリクスを表示し、設定を更新したり無効にしたりして HPA を管理できます。

結果の確認

  1. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[Auto Scaling] > [Workload Scaling] を選択します。

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

説明

本番環境では、アプリケーションは Pod の負荷に基づいてスケーリングします。テスト環境で Pod にストレステストを実行して、水平スケーリングの動作を確認することもできます。

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

オーケストレーションテンプレートを使用して手動で HPA を作成し、対象の Deployment にバインドすることもできます。ワークロードごとに作成する HPA は 1 つだけにすることを推奨します。この例では、HPA をサポートする Nginx アプリケーションをデプロイする方法を示します。

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

    重要

    HPA を実装するには、Pod にリソースの requests を設定する必要があります。設定しない場合、HPA は機能しません。リソースプロファイリング機能を使用して、過去のリソース使用状況データを分析し、コンテナの Requests と Limits を設定するための推奨事項を取得できます。詳細については、「リソースプロファイリング」をご参照ください。

    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 # 実際の  に置き換えます。
            ports:
            - containerPort: 80
            resources:
              requests:         # requests を設定する必要があります。設定しない場合、HPA はメトリクスを計算できないため、ステータスが 'unknown' になります。
                cpu: 500m
  2. 次のコマンドを実行して、Nginx アプリケーションを作成します。

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

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

    Kubernetes 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 # 目標の平均リソース使用率。平均リソース使用量と要求リソース量の比率です。
                   

    Kubernetes 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 を作成する代わりに、cpumemory の両方のリソースタイプを metrics フィールドで指定できます。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 名は 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 のスケーリング感度の調整」をご参照ください。

よくある質問

関連ドキュメント

その他の関連操作

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

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

  • アプリケーションのリソース使用に周期的な変化があり、ルールで定義するのが難しい場合は、AHPA を使用して過去のメトリクスに基づいてワークロードパターンを自動的に識別し、Pod のオートスケーリングを実行できます。詳細については、「オートスケーリング予測 (AHPA)」をご参照ください。

  • Pod のリソース使用量に基づいてリソース制限を自動的に設定するには、「垂直 Pod オートスケーラー (VPA) の使用」をご参照ください。

  • メッセージキュー、スケジュール、またはカスタムメトリクスからのイベントに基づいて柔軟なスケーリングポリシーを作成するには、「イベント駆動のオートスケーリング」をご参照ください。

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

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