Microservices Engine (MSE) ゲートウェイは、トラフィックのエントリポイントとして、アプリケーションのトラフィック量を最も正確に把握できます。ゲートウェイからの秒間クエリ数 (QPS) メトリクスを使用して、Container Service for Kubernetes (ACK) のアプリケーションの自動スケーリングを有効にします。これにより、バックエンドサービスをオンデマンドでスケーリングできます。このトピックでは、ゲートウェイのアクセスログを使用して ACK アプリケーションの自動スケーリングを構成する方法について説明します。
前提条件
操作手順
-
ACK クラスターに次のリソースをデプロイします。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
-
ack-alibaba-cloud-metrics-adapter を検索し、そのアプリケーションカードをクリックします。 詳細ページで [Deploy] をクリックします。 [Deploy] パネルで、パラメーターを設定し、OK をクリックします。
次のパラメーターを設定します:対象の [cluster] を選択し、[namespace] を
kube-systemに設定し、[release name] をack-alibaba-cloud-metrics-adapterに設定します。 -
ナビゲーションペインで、[Clusters] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
デプロイメント ページで、YAML のリソースの作成 をクリックします。 テンプレートリストから [Custom] を選択し、次の 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 オプションを有効にします。[Simple Log Service (SLS) Project] は [Use Default] のままにし、[OK] をクリックします。
-
ACK クラスターで、HorizontalPodAutoscaler (HPA) を作成し、その設定を構成します。
スケーリング対象のバックエンドアプリケーション、最小および最大のレプリカ数、スケーリングメトリクスを指定する必要があります。 次の設定例では、Pod あたりの平均 QPS が 10 を超えるとアプリケーションをスケールアウトします。 この例では、
sls.projectはログ転送プロジェクト名であり、ゲートウェイコンソールの [Parameter Settings] ページで確認できます。sls.ingress.routeは<namespace>-<service-name>-<service-port>という形式になります。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 でトラフィックをルーティングし、アプリケーションに負荷テストを実行します。 次に、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 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 Normal SuccessfulRescale 5m12s horizontal-pod-autoscaler New size: 4; reason: Normal SuccessfulRescale 3m41s horizontal-pod-autoscaler New size: 3; reason: All metrics below target Normal SuccessfulRescale 2m55s horizontal-pod-autoscaler New size: 1; reason: All metrics below target