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

Microservices Engine:ゲートウェイの QPS 値に基づいて ACK クラスタ内のバックエンドアプリケーションの自動スケーリングを実行する

最終更新日:Jan 08, 2025

トラフィックがイングレスされると、マイクロサービスエンジン(MSE)のクラウドネイティブゲートウェイはビジネストラフィックの量に非常に敏感です。 Kubernetes の機能と MSE クラウドネイティブゲートウェイによって収集された 1 秒あたりのクエリ数(QPS)メトリックデータに基づいて、ビジネスアプリケーションはビジネス Pod の QPS 値に基づいて自動スケーリングを実行できます。 この方法では、必要に応じてバックエンドサービスをスケールアウトまたはスケールインできます。 このトピックでは、ゲートウェイアクセスログに基づいてコンテナサービス Kubernetes 版(ACK)クラスタ内のビジネスアプリケーションの自動スケーリングを実行する方法について説明します。

前提条件

手順

  1. Alibaba Cloud ACK クラスタに次のリソースをデプロイします。

    1. ACK コンソール にログインします。 左側のナビゲーションペインで、[マーケットプレイス] > [マーケットプレイス] を選択します。

    2. 検索ボックスに ack-alibaba-cloud-metrics-adapter と入力し、検索アイコンをクリックします。 次に、アプリケーションのカードをクリックし、詳細ページの右上隅にある [デプロイ] をクリックします。 [デプロイ] パネルで、関連設定を構成し、[OK] をクリックします。

      ack-alibaba-cloud-metrics-adapter.png

    3. 左側のナビゲーションペインで、[クラスタ] をクリックします。

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

    5. デプロイメント ページで、YAML のリソースの作成 をクリックします。 [サンプルテンプレート] ドロップダウンリストから [カスタム] を選択し、コードエディタに次の YAML コードを入力して、デプロイ をクリックします。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: httpbin-deploy
        labels:
          app: httpbin-deploy
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: httpbin
        template:
          metadata:
            labels:
              app: httpbin
          spec:
            containers:
            - image: kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - name: http
                containerPort: 80
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin-svc
        namespace: default
        labels:
          app: httpbin-svc
      spec:
        ports:
          - port: 8080
            name: http
            protocol: TCP
            targetPort: 80
        selector:
          app: httpbin
        type: ClusterIP
  2. MSE クラウドネイティブゲートウェイにサービスソースを追加し、サービスを追加します。

    1. MSE コンソール にログインします。 上部のナビゲーションバーで、リージョンを選択します。

    2. 左側のナビゲーションペインで、Cloud-Native Gateway > ゲートウェイリスト を選択します。 [ゲートウェイ] ページで、ゲートウェイの名前をクリックします。

    3. 左側のナビゲーションペインで、Routes をクリックします。 表示されるページで、[ソース] タブをクリックします。

    4. [ソース] ページで、Add Source をクリックします。 [ソースの追加] パネルで、Source TypeContainer Service に設定し、アプリケーションがデプロイされている ACK クラスタを選択して、[OK] をクリックします。

    5. 左側のナビゲーションペインで、Routes をクリックします。 表示されるページで、[サービス] タブをクリックします。

    6. [サービス] ページで、Add Service をクリックします。 [サービスの追加] パネルで、Services セクションで作成したサービスソースを選択し、OK をクリックします。

  3. 作成したサービスのルーティングルールを追加します。 詳細については、「ルーティングルールを作成する」をご参照ください。

  4. ログ配送サービスを有効にします。

    1. 左側のナビゲーションペインで、パラメーターの設定 をクリックします。

    2. オブザーバビリティパラメーター セクションで、图标2.pngログシッピング の横にある Compatible with NGINX Ingress アイコンをクリックします。 [ログ配送設定] ダイアログボックスで、[ログ配送を有効にする(ゲートウェイアクセスログをログサービスに配送する)] と をオンにします。

      日志投递开启.png

  5. ACK クラスタで HorizontalPodAutoscaler(HPA)を作成し、関連設定を構成します。

    設定には、自動スケーリングを実行する必要があるバックエンドビジネスアプリケーション、自動スケーリング中のレプリカの最小数、自動スケーリング中のレプリカの最大数、および自動スケーリングの基準となるメトリックが含まれます。 次のサンプルコードでは、 sls.project パラメータの値は、MSE コンソールのゲートウェイの [概要] ページでログが配信されるプロジェクトの名前です。 sls.ingress.route パラメータの値は、<サービスの名前空間>-<サービス名>-<サービスのポート番号> 形式です。 この例では、ビジネス Pod の平均 QPS 値が 10 を超えるとスケールアウトがトリガーされます。

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: higress-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1beta2
        kind: Deployment
        name: httpbin-deploy
      minReplicas: 1
      maxReplicas: 10
      metrics:
        - type: External
          external:
            metric:
              name: sls_ingress_qps
              selector:
                matchLabels:
                  sls.project: "aliyun-product-data-xxxxxxxxxxxxx-cn-hangzhou" // ログが配信されるプロジェクト名
                  sls.logstore: "nginx-ingress"  // ログストア名
                  sls.ingress.route: "default-httpbin-svc-8080" // サービスの名前空間-サービス名-サービスのポート番号
            target:
              type: AverageValue
              averageValue: 10  // 平均 QPS 値のしきい値
    
  6. QPS を制御し、ゲートウェイルートを使用してビジネスアプリケーションのストレステストを実行し、HPA イベントを観察して検証します。

    次のコマンドを実行して結果を確認します。

    kubectl describe hpa higress-hpa

    出力例:

    Normal  SuccessfulRescale  9m     horizontal-pod-autoscaler  New size: 3; reason: external metric sls_ingress_qps(&LabelSelector{MatchLabels:map[string]string{sls.ingress.route: default-httpbin-svc-8080,sls.logstore: nginx-ingress,sls.project: aliyun-product-data-xxxxxxxxxxxxxxxx-cn-hangzhou,},MatchExpressions:[]LabelSelectorRequirement{},}) above target // 外部メトリック sls_ingress_qps がターゲットを超えたため、新しいサイズは 3
    Normal  SuccessfulRescale  8m45s  horizontal-pod-autoscaler  New size: 4; reason: external metric sls_ingress_qps(&LabelSelector{MatchLabels:map[string]string{sls.ingress.route: default-httpbin-svc-8080,sls.logstore: nginx-ingress,sls.project: aliyun-product-data-xxxxxxxxxxxxxxxx-cn-hangzhou,},MatchExpressions:[]LabelSelectorRequirement{},}) above target // 外部メトリック sls_ingress_qps がターゲットを超えたため、新しいサイズは 4
    Normal  SuccessfulRescale  5m12s  horizontal-pod-autoscaler  New size: 4; reason:
    Normal  SuccessfulRescale  3m41s  horizontal-pod-autoscaler  New size: 3; reason: All metrics below target // すべてのメトリックがターゲットを下回っているため、新しいサイズは 3
    Normal  SuccessfulRescale  2m55s  horizontal-pod-autoscaler  New size: 1; reason: All metrics below target // すべてのメトリックがターゲットを下回っているため、新しいサイズは 1