トラフィックがイングレスされると、マイクロサービスエンジン(MSE)のクラウドネイティブゲートウェイはビジネストラフィックの量に非常に敏感です。 Kubernetes の機能と MSE クラウドネイティブゲートウェイによって収集された 1 秒あたりのクエリ数(QPS)メトリックデータに基づいて、ビジネスアプリケーションはビジネス Pod の QPS 値に基づいて自動スケーリングを実行できます。 この方法では、必要に応じてバックエンドサービスをスケールアウトまたはスケールインできます。 このトピックでは、ゲートウェイアクセスログに基づいてコンテナサービス Kubernetes 版(ACK)クラスタ内のビジネスアプリケーションの自動スケーリングを実行する方法について説明します。
前提条件
クラウドネイティブゲートウェイが作成されていること。 詳細については、「クラウドネイティブゲートウェイを作成する」をご参照ください。
ACK マネージドクラスタが作成されていること。 詳細については、「ACK マネージドクラスタを作成する」をご参照ください。
手順
Alibaba Cloud ACK クラスタに次のリソースをデプロイします。
ACK コンソール にログインします。 左側のナビゲーションペインで、 を選択します。
検索ボックスに ack-alibaba-cloud-metrics-adapter と入力し、検索アイコンをクリックします。 次に、アプリケーションのカードをクリックし、詳細ページの右上隅にある [デプロイ] をクリックします。 [デプロイ] パネルで、関連設定を構成し、[OK] をクリックします。

左側のナビゲーションペインで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。 左側のペインで、 を選択します。
デプロイメント ページで、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
MSE クラウドネイティブゲートウェイにサービスソースを追加し、サービスを追加します。
MSE コンソール にログインします。 上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションペインで、Cloud-Native Gateway > ゲートウェイリスト を選択します。 [ゲートウェイ] ページで、ゲートウェイの名前をクリックします。
左側のナビゲーションペインで、Routes をクリックします。 表示されるページで、[ソース] タブをクリックします。
[ソース] ページで、Add Source をクリックします。 [ソースの追加] パネルで、Source Type を Container Service に設定し、アプリケーションがデプロイされている ACK クラスタを選択して、[OK] をクリックします。
左側のナビゲーションペインで、Routes をクリックします。 表示されるページで、[サービス] タブをクリックします。
[サービス] ページで、Add Service をクリックします。 [サービスの追加] パネルで、Services セクションで作成したサービスソースを選択し、OK をクリックします。
作成したサービスのルーティングルールを追加します。 詳細については、「ルーティングルールを作成する」をご参照ください。
ログ配送サービスを有効にします。
左側のナビゲーションペインで、パラメーターの設定 をクリックします。
オブザーバビリティパラメーター セクションで、
ログシッピング の横にある Compatible with NGINX Ingress アイコンをクリックします。 [ログ配送設定] ダイアログボックスで、[ログ配送を有効にする(ゲートウェイアクセスログをログサービスに配送する)] と をオンにします。
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 値のしきい値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