マイクロサービスアーキテクチャを使用するシナリオでは、トラフィックを分散およびルーティングするために Knative で MSE Ingress を使用することをお勧めします。MSE Ingress は、運用管理不要のフルマネージド Ingress です。MSE Ingress を使用して、リクエストに基づいて自動スケーリングを実装できます。単一のポッドによって処理される同時リクエスト数を正確に制御できるため、大規模なクラウドネイティブ分散アプリケーションのトラフィックガバナンス要求を満たすのに役立ちます。
前提条件
Knative が ACS クラスタにデプロイされていること。詳細については、Knative のデプロイを参照してください。
MSE Ingress コントローラーがインストールされ、MSE Ingress コントローラーに権限が付与されていること。詳細については、MSE Ingress コントローラーへの権限の付与を参照してください。
仕組み
個々のポッドのスループットは制限されています。複数のリクエストが同じポッドにルーティングされると、対応するサーバーが過負荷になる可能性があります。したがって、各ポッドで処理される同時リクエスト数を正確に制御する必要があります。たとえば、AI 生成コンテンツ (AIGC) のシナリオでは、単一のリクエストが大量の GPU リソースを占有する可能性があります。各ポッドで処理される同時リクエスト数を厳密に制限する必要があります。MSE Ingress と連携することで、Knative はポッドを正確にスケールアウトして、多数のクラウドネイティブ分散アプリケーションがデプロイされているシナリオでのトラフィック管理要件を満たすことができます。
次の図では、MultidimPodAutoscaler (MPA) が MSE Ingress から同時リクエストの総数を取得し、リクエストの処理に必要なポッド数を計算してから、ポッドをスケーリングします。これにより、負荷を認識した自動スケーリングが実装されます。MSE Ingress は、ルーティングルールと条件に基づいて、リクエストを異なるサービスまたはバージョンに正確にルーティングできます。

ステップ 1: MSE Ingress をデプロイする
ACS コンソールにログインします。左側のナビゲーションペインで、クラスタをクリックします。
クラスタページで、管理するクラスタを見つけて、その ID をクリックします。クラスタ詳細ページの左側のナビゲーションペインで、 を選択します。
コンポーネントタブで、Knative のデプロイをクリックし、Gateway パラメーターにMSE を選択し、プロンプトに従ってデプロイを完了します。
ステップ 2: MSE Ingress を使用してサービスにアクセスする
ACS コンソールにログインします。左側のナビゲーションペインで、クラスタをクリックします。
クラスタページで、管理するクラスタを見つけて、その ID をクリックします。クラスタ詳細ページの左側のナビゲーションペインで、 を選択します。
Knative ページの サービスタブで、名前空間を default に設定し、テンプレートから作成をクリックし、次の YAML コンテンツをテンプレートエディターにコピーして、作成をクリックします。
このテンプレートは、
helloworld-goという名前のサービスを作成します。重要{REGION-ID}を、クラスタが存在するリージョンに置き換えて、Knative サービスがイメージを想定どおりにプルできるようにします。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: metadata: annotations: autoscaling.knative.dev/class: mpa.autoscaling.knative.dev # MSE メトリックに基づいてポッドをスケーリングします。ポッドはゼロにスケーリングできます。 autoscaling.knative.dev/max-scale: '20' # 許可されるポッドの最大数を 20 に設定します。 spec: containerConcurrency: 5 # 各ポッドが処理できる同時リクエストの最大数を 5 に設定します。 containers: - image: registry-vpc.{REGION-ID}.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # {REGION-ID} は、クラスタが存在するリージョンです (例: cn-hangzhou)。 env: - name: TARGET value: "Knative"サービスの ステータス列に 作成済みと表示されている場合、サービスはデプロイされています。
サービスページで、
helloworld-goサービスのドメイン名とゲートウェイ IP アドレスを、それぞれ デフォルトドメイン列と ゲートウェイ列に記録します。次のコマンドを実行して、
helloworld-goサービスにアクセスします。curl -H "host: helloworld-go.default.example.com" http://8.141.XX.XX # 取得した実際のゲートウェイ IP アドレスとドメイン名を指定します。予期される出力:
Hello Knative!
ステップ 3: 同時リクエスト数に基づいて自動スケーリングを実行する
負荷テストツール hey をインストールします。
hey の詳細については、Hey を参照してください。
次のコマンドを実行して、サービスのストレステストを実行します。
# 100,000 件のリクエストを送信し、同時実行数を 50 に、リクエストタイムアウト期間を 180 秒に設定します。 hey -n 100000 -c 50 -t 180 -host "helloworld-go.default.example.com" "http://8.141.XX.XX"予期される出力:
Summary: Total: 86.0126 secs Slowest: 0.1672 secs Fastest: 0.0276 secs Average: 0.0337 secs Requests/sec: 1162.6199 Total data: 1500000 bytes Size/request: 15 bytes Response time histogram: 0.028 [1] | 0.042 [95291] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.056 [4573] |■■ 0.069 [64] | 0.083 [19] | 0.097 [2] | 0.111 [0] | 0.125 [0] | 0.139 [18] | 0.153 [23] | 0.167 [9] | Latency distribution: 10% in 0.0294 secs 25% in 0.0305 secs 50% in 0.0327 secs 75% in 0.0367 secs 90% in 0.0386 secs 95% in 0.0405 secs 99% in 0.0433 secs Details (average, fastest, slowest): DNS+dialup: 0.0000 secs, 0.0276 secs, 0.1672 secs DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0000 secs req write: 0.0000 secs, 0.0000 secs, 0.0009 secs resp wait: 0.0336 secs, 0.0276 secs, 0.1671 secs resp read: 0.0000 secs, 0.0000 secs, 0.0009 secs Status code distribution: [200] 100000 responses出力は、100,000 件のリクエストが送信されたことを示しています。すべてのリクエストが処理されています。
次のコマンドを実行して、ポッドのスケーリングをクエリします。
説明コマンドは、手動で終了するまで永続的に実行されます。
Ctrl + Cを押してコマンドを終了できます。kubectl get pods --watch
(オプション) ステップ 3: Knative モニタリングダッシュボードを表示する
Knative は、すぐに使えるモニタリング機能を提供します。Knative ページで、モニタリングダッシュボードタブをクリックして、指定されたサービスのモニタリングデータを表示します。Knative ダッシュボードの詳細については、Knative ダッシュボードの表示を参照してください。

関連情報
Knative サービスのカスタムドメイン名を指定できます。詳細については、カスタムドメイン名の構成を参照してください。
HTTPS 経由で Knative サービスにアクセスするための証明書を構成できます。詳細については、HTTPS 経由でサービスにアクセスするための証明書の構成を参照してください。
ネットワーク効率を向上させるために、Knative に gRPC サービスをデプロイできます。詳細については、Knative への gRPC サービスのデプロイを参照してください。
プローブを構成して、Knative サービスのヘルスステータスと可用性を監視できます。詳細については、Knative でのポートプローブの構成を参照してください。