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

Container Service for Kubernetes:HPA を利用した ALB Ingress の QPS によるアプリケーションのスケーリング

最終更新日:Jun 24, 2026

アプリケーションがリクエスト量に基づいて合計コンピューティングリソースを動的に調整する必要がある場合は、Log Service からの ALB Ingress の QPS メトリクスを使用して、HPA でアプリケーション Pod を自動スケーリングします。

前提条件

次の要件が満たされていることを確認します。

仕組み

  1. アプリケーション用の Deployment と Service を作成します。

  2. 外部トラフィックを Service にルーティングするための ALB Ingress を作成します。

  3. Log Service からのsls_alb_ingress_qps メトリクスを監視する Horizontal Pod Autoscaler (HPA) を作成します。

  4. QPS が Pod あたりのしきい値を超えると、HPA は Deployment をスケールアウトします。QPS が低下すると、HPA はスケールインします。

ステップ 1:アプリケーションと Service の作成

  1. tea.yaml という名前のファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: tea
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: nginx:1.7.9
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
      namespace: default
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: 80
      selector:
        app: tea
      type: NodePort
  2. マニフェストを適用します。

    kubectl apply -f tea.yaml

ステップ 2:ALB Ingress の作成

AlbConfigオブジェクトの作成

  1. クラスターに関連付けられている Log Service プロジェクトを検索します。ACK コンソールで、クラスターの詳細ページを開き、[クラスター情報] タブを選択し、[Log Service プロジェクト] を見つけて、プロジェクト名を記録します。alb-test.yaml という名前のファイルを作成します。

    フィールド 説明
    zoneMappings 同じ VPC 内の異なるゾーンにある、少なくとも 2 つの vSwitch ID。
    logProject Log Service プロジェクト名。
    logStore Logstore 名。alb_ で始まる必要があります。存在しない場合は自動的に作成されます。
    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb-demo
    spec:
      config:
        name: alb-test
        addressType: Internet        # インターネット向けのALB
        zoneMappings:
        - vSwitchId: vsw-uf6ccg2a9g71hx8go****   # 1つ目の vSwitch ID に置き換えます
        - vSwitchId: vsw-uf6nun9tql5t8nh15****   # 2つ目の vSwitch ID (異なるゾーン) に置き換えます
        accessLogConfig:
          logProject: "****"         # Log Service プロジェクト名に置き換えます
          logStore: "alb_****"       # Logstore 名に置き換えます。alb_ で始まる必要があります
  2. マニフェストを適用します。

    kubectl apply -f alb-test.yaml

IngressClassの作成

  1. alb.yaml という名前のファイルを作成します。

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-demo              # 上記の AlbConfig の metadata.name と一致させる必要があります
  2. マニフェストを適用します。

    kubectl apply -f alb.yaml

Ingressの作成

  1. tea-ingress.yaml という名前のファイルを作成します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: tea-ingress
    spec:
      ingressClassName: alb
      rules:
       - host: demo.ingress.top
         http:
          paths:
          - path: /tea
            pathType: Prefix
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
  2. マニフェストを適用します。

    kubectl apply -f tea-ingress.yaml
  3. Ingress に割り当てられた ALB アドレスを取得します。

    kubectl get ingress

    想定される出力:

    NAME          CLASS   HOSTS              ADDRESS                                            PORTS   AGE
    tea-ingress   alb     demo.ingress.top   alb-110zvs5nhsvfv*****.cn-chengdu.alb.aliyuncs.com   80      7m5s

    ステップ 4 のストレステストのために、ADDRESS の値をメモしておきます。

ステップ 3:HPA の作成

  1. hpa.yaml という名前のファイルを作成します。

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: ingress-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx-deployment-basic   # スケール対象のDeployment
      minReplicas: 2                   # Podの最小数
      maxReplicas: 10                  # Podの最大数
      metrics:
        - type: External
          external:
            metric:
              name: sls_alb_ingress_qps   # Log ServiceからのALB QPSメトリクス
              selector:
                matchLabels:
                  sls.project: "****"              # Log Service プロジェクト名に置き換えます
                  sls.logstore: "alb_****"         # Logstore 名に置き換えます
                  sls.ingress.route: "default-tea-svc-80"
                  # 形式:<名前空間>--<ポート>
                  # 例:default-nginx-80
            target:
              type: AverageValue        # Podあたりの平均QPSに基づいてスケーリング
              averageValue: 2           # Podあたりの平均QPSが2を超えるとスケールアウト

    この HPA は、nginx-deployment-basic を 2 から 10 の Pod の間でスケーリングします。Pod あたりの平均 QPS が 2 を超えるとスケールアウトし、QPS が低下するとスケールインします。

  2. マニフェストを適用します。

    kubectl apply -f hpa.yaml
  3. HPA が作成されたことを確認します。

    kubectl get hpa

    想定される出力:

    NAME          REFERENCE                           TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    ingress-hpa   Deployment/nginx-deployment-basic   0/2 (avg)   2         10        2          4h34m

    まだアプリケーションにトラフィックが到達していないため、QPS は 0 です。Pod 数は最小値 (2) になっています。

  4. (オプション) HPA の詳細を確認します。

    kubectl describe hpa ingress-hpa

    想定される出力:

    Name:                                            ingress-hpa
    Namespace:                                       default
    Labels:                                          <none>
    Annotations:                                     <none>
    CreationTimestamp:                               Tue, 31 Jan 2023 11:35:01 +0800
    Reference:                                       Deployment/nginx-deployment-basic
    Metrics:                                         ( current / target )
    "sls_alb_ingress_qps" (target average value):    0 / 2
    Min replicas:                                    2
    Max replicas:                                    10
    Deployment pods:                                 2 current / 2 desired

ステップ 4:自動スケーリングの検証

スケールアウトの検証

  1. ステップ 2 で取得した ALB アドレスに対してストレステストを実行します。プレースホルダーを実際のアドレスに置き換えます。

    ab -c 5 -n 5000 -H Host:demo.ingress.top http://alb-110zvs5nhsvfv*****.cn-chengdu.alb.aliyuncs.com/tea
  2. テストの実行中に、HPA のステータスをリアルタイムで監視します。

    kubectl get hpa ingress-hpa --watch

    QPS がしきい値を超えると、レプリカ数が増加します。[Ctrl]+[C] を押して停止します。

  3. ストレステストの後、スケールアウトを確認します。

    kubectl get hpa

    想定される出力:

    NAME          REFERENCE                           TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
    ingress-hpa   Deployment/nginx-deployment-basic   12500m/2 (avg)   2         10        10         15m

    REPLICAS10 になっており、Deployment が最大数までスケールアウトしたことが確認できます。

スケールインの検証

ストレステストが終了すると、QPS は 0 に低下し、HPA は Deployment をスケールインします。スケールインには約 5 分間の安定化ウィンドウがあるため、確認する前にしばらく待ちます。

kubectl get hpa

想定される出力:

NAME          REFERENCE                           TARGETS      MINPODS   MAXPODS   REPLICAS   AGE
ingress-hpa   Deployment/nginx-deployment-basic   0/2 (avg)    2         10        2          60m

REPLICAS2 に戻っており、Deployment がスケールインしたことが確認できます。

次のステップ

  • HPA 仕様behavior フィールドを設定して、スケールアウトとスケールインを調整できます。

  • 追加のAlibaba Cloud メトリクスに基づいてスケーリングできます。