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

Container Service for Kubernetes:水平ポッド自動スケーリングの実装

最終更新日:Jan 23, 2025

水平ポッドオートスケーラー (HPA) 機能を有効にして、CPU使用率、メモリ使用量、またはその他のメトリックに基づいてポッドを自動的にスケーリングできます。 HPAは、複製されたポッドをすばやくスケールアウトして、ワークロードが急増したときに重いストレスに対処し、ワークロードが減少したときに適切にスケールインしてリソースを節約できます。 プロセス全体は自動化されており、人間の介入は必要ありません。 eコマースサービス、オンライン教育、金融サービスなど、サービスの変動が大きく、サービス数が多く、頻繁にスケーリングが必要な企業に最適です。

前提条件

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

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

  2. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。

  3. 詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [デプロイ] を選択します。

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

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

    特定の手順と設定パラメーターの詳細については、「イメージからステートレスアプリケーションを作成する」をご参照ください。 次のリストに、主要なパラメーターについて説明します。

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

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

      重要

      アプリケーションが必要とするリクエストリソースを設定します。 そうでない場合、HPAは有効になりません。

    • 高度な:

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

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

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

        • 条件 :リソース使用量のしきい値を指定します。 HPAは、しきい値を超えるとスケーリングイベントをトリガーします。 水平ポッドの自動スケーリングの実行に使用されるアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。

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

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

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

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

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

    重要

    アプリケーションに必要なリクエストリソースを設定する必要があります。 それ以外の場合は、HPAを有効にできません。

    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 # Replace it with your actual <image_name:tags>.
            ports:
            - containerPort: 80
            resources:
              requests:                         # This parameter is required for running the 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  # The minimum number of containers that must run for the Deployment. The value of this parameter must be an integer greater than or equal to 1.
      maxReplicas: 10  # The maximum number of containers to which the Deployment can be scaled. The value of this parameter must be greater than minReplicas.
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50 # The average utilization of the target resource, which is the ratio of the average value of resource usage to its request amount.
                   

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

    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx
      minReplicas: 1  # Must be an integer greater than or equal to 1.
      maxReplicas: 10  # Must be greater than 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 name> コマンドを実行すると、次の出力と同様の警告が返され、HPAがまだデプロイ中であることを示します。 この例のHPA名はnginx-hpa.ymlです。 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 name> コマンドをもう一度実行して、水平スケーリングのステータスを確認します。

    次の出力が返された場合、HPAは期待どおりに実行されます。

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