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

Alibaba Cloud Service Mesh:Knative Serviceのトラフィック分割によるカナリアリリース

最終更新日:Mar 11, 2026

Knative Serviceの新しいバージョンをリリースする際、すべてのトラフィックを一度に新しいバージョンにルーティングすると、そのバージョンに問題があった場合にダウンタイムのリスクがあります。トラフィック分割を使用すると、まずリクエストのごく一部を新しいRevisionにルーティングし、安定性を検証してから、その割合を徐々に増やすことができます。どの段階で問題が発生した場合でも、すぐに以前のRevisionにトラフィックを戻してください。

仕組み

Alibaba Cloud Service Mesh (ASM) 上の Knative では、すべての Knative Service に1つ以上のRevisionがあります。

  • Knative Serviceを作成すると、Knativeは最初のRevisionを自動的に作成します。

  • サービス構成を更新するたびに、Knativeは新しいRevisionを作成します。

  • 各Revisionにルーティングされるトラフィックの割合を制御します。すべてのRevisionの割合の合計は100%である必要があります。

一般的なカナリアリリースは、次の進行に従います。

  1. 新しいRevisionを作成し、トラフィックの0%を割り当てます。

  2. 新しいRevisionが正しく機能することを確認します。

  3. 以前のRevisionから新しいRevisionへトラフィックを徐々にシフトします (例: 10% -> 50% -> 100%)。

  4. 新しいRevisionでどの段階でも問題が発生した場合は、そのトラフィックを0%に戻し、以前のRevisionを100%に復元します。

前提条件

開始する前に、以下を準備してください。

説明

このトピックでは、デフォルトドメイン名 example.com を使用します。カスタムドメイン名を使用するには、「Knative on ASM でのカスタムドメイン名の設定」をご参照ください。

ステップ1: トラフィック0%での新しいRevisionの作成

本番トラフィックを送信せずに新しいRevisionを作成します。これにより、Revisionをユーザーに公開する前に、正常にデプロイされたことを確認できます。

  1. ACK コンソール」にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Knative] を選択します。

  3. [サービス] タブをクリックします。 サービスを探し、その名前をクリックします。 右上隅にある [リビジョンを作成] をクリックします。

  4. [基本情報] ステップで、下部にある [詳細設定] をクリックします。 [環境変数] の横にある [追加] をクリックして以下の設定を行い、[次へ] をクリックします。

    パラメーター
    タイプカスタム
    変数キーTARGET
    値/ValueFromKnative on ASM
  5. [トラフィック分割設定] ステップで、[最新リビジョン][パーセント %]0 に、前のリビジョンを 100 に設定し、[作成] をクリックします。

    説明

    すべてのRevisionのトラフィックの割合の合計は100%である必要があります。

  6. リビジョンが作成されたら、[サービス] タブをクリックして、サービス名をクリックします。[リビジョン情報] セクションで、新しいリビジョンが表示されることを確認します。

  7. 次のコマンドを実行して、すべてのトラフィックが引き続き以前のRevisionに送られていることを確認します。予想される出力: すべてのリクエストが Hello World! を返します。これは、以前のRevisionが引き続きトラフィックの100%を処理していることを確認します。

       for i in $(seq 20); do curl http://helloworld-go.default.example.com; done
       Hello World!

ステップ2: 新しいRevisionへのトラフィックシフト

問題をモニタリングしながら、新しいRevisionのトラフィックの割合を段階的に増やします。

  1. ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター]をクリックします。

  2. [クラスター] ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Knative] を選択します。

  3. [サービス] タブをクリックし、サービス名をクリックします。右上隅の [トラフィックの分割] をクリックします。「トラフィックの分割」ダイアログボックスで、最新のリビジョンと前のリビジョンの両方で [パーセント %]50 に設定し、[OK] をクリックします。

  4. トラフィックの分割を保存したら、[サービス] タブをクリックして、サービス名をクリックします。[リビジョン情報] セクションで、更新されたトラフィックの割合を確認します。

  5. 複数のリクエストを送信して、トラフィックが両方のRevision間で分散されていることを確認します。予想される出力 (省略): レスポンスは Hello World! (以前のRevision) と Hello Knative on ASM! (新しいRevision) の間で交互に表示され、おおよそ50/50の分割に一致します。

       for i in $(seq 20); do curl http://helloworld-go.default.example.com; done
       Hello Knative on ASM!
       Hello Knative on ASM!
       Hello World!
       Hello Knative on ASM!
       Hello World!
       ...
  6. 新しいRevisionが安定している場合は、ステップ3を繰り返してトラフィックの割合を増やします。新しいRevisionがトラフィックの100%を処理するまで続行します。

  7. 新しいRevisionが100%に達したら、切り替えを確認します。予想される出力: すべてのリクエストが Hello Knative on ASM! を返します。これは、カナリアリリースが完了したことを確認します。

       for i in $(seq 20); do curl http://helloworld-go.default.example.com; done
       Hello Knative on ASM!
       Hello Knative on ASM!
       Hello Knative on ASM!
       ...

以前のRevisionへのロールバック

カナリアリリース中に新しいRevisionでエラー、高レイテンシー、または予期しない動作が検出された場合は、すぐにロールバックしてください。

  1. サービスの詳細ページで、右上隅の[トラフィックを分割]をクリックします。

  2. 「トラフィックの分割」ダイアログボックスで、[パーセント %] を、新しいリビジョンでは 0 に、前のリビジョンでは 100 に設定します。[OK] をクリックします。

  3. リクエストを送信してロールバックを確認します。すべてのレスポンスが Hello World! を返します。これは、トラフィックが以前のRevisionに完全に復元されたことを確認します。

       for i in $(seq 20); do curl http://helloworld-go.default.example.com; done

次のステップ

カナリアリリース後、Pod数がトラフィック量に応じて自動的に調整されるようにオートスケーリングを構成します。Knative Servingは、同時実行メトリックを Knative Pod Autoscaler (KPA) に報告する Queue Proxyコンテナを各Podに追加します。KPAは、同時リクエスト量に基づいてPodの数をスケーリングします。詳細については、「リクエスト数に基づくPodのオートスケーリングの有効化」をご参照ください。