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

Container Service for Kubernetes:Knative Serviceのトラフィック分割に基づいてカナリアリリースを実行する

最終更新日:Nov 15, 2024

Knativeは、異なるリビジョン間のトラフィック分散を管理します。 コンソールでは、各リビジョンのトラフィック分散パーセンテージを定義し、パフォーマンスに基づいてこれらのパーセンテージを微調整できます。 このプロセスは、すべてのトラフィックが新しいバージョンに切り替えられ、カナリアリリースが完了するまで続きます。

前提条件

Knativeはクラスターにデプロイされています。 詳細については、「」「Knativeのデプロイ」をご参照ください。

手順1: Knativeサービスの作成

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

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

  3. Knativeページの [サービス] タブで、名前空間既定に設定します。 [サービスの作成] をクリックし、helloworld-goという名前のサービスをデプロイします。 サービスのデプロイ後、[作成] をクリックします。

    次の表に、主要なパラメーターを示します。 パラメーターの詳細については、「Knativeを使用したサーバーレスアプリケーションのデプロイ」をご参照ください。

    パラメーター

    説明

    名前空間

    サービスが属する名前空間を選択します。

    サービス名

    サービスの名前を入力します。 この例では、helloworld-goが使用されます。

    イメージ名

    画像を選択するには、[画像の選択] をクリックします。 [画像の選択] ダイアログボックスで画像を選択し、[OK] をクリックします。 プライベートイメージレジストリのアドレスを入力することもできます。 レジストリアドレスは、domainname/namespace/imagename:tag形式である必要があります。 この例では、registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-goが使用されます。

    イメージバージョン

    [イメージバージョンの選択] をクリックし、イメージバージョンを選択します。 デフォルトでは、最新バージョンが使用されます。 この例では、73fbdd5 6が選択されている。

    アクセスプロトコル

    HTTPgRPCがサポートされています。

    説明

    gRPCは、HTTP/2標準とプロトコルバッファ (protobuf) シリアル化プロトコルに基づいて開発され、さまざまなプログラミング言語をサポートしています。 HTTP/1.1と比較して、HTTP/2を使用すると、パケットをより効率的に送受信できます。

    コンテナポート

    公開するコンテナーポート。 ポート番号は 1〜65535 である必要があります。

    サービスの [ステータス] 列に [作成済み] が表示された場合、サービスがデプロイされます。

  4. [サービス] ページで、helloworld-goサービスのドメイン名とゲートウェイIPアドレスをそれぞれ [デフォルトドメイン] 列と [ゲートウェイ] 列に記録します。

  5. 次のコマンドを実行して、helloworld-go Serviceにアクセスします。

    curl -H "host: <Default domain name>" http://<Gateway IP address> # Replace the gateway IP address and domain name with the actual values.

    期待される出力:

    Hello World!

    出力は、サービスが作成され、通常どおりアクセスできることを示します。

ステップ2: カナリアリリースをデプロイするリビジョンを作成する

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

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

  3. リビジョンを作成します。

    1. On theサービスタブで、作成したサービスを選択し、詳細で、アクション列を作成します。

    2. [リビジョンの作成] をクリックします。 [基本情報] ウィザードページで、[詳細] をクリックし、最新のリビジョンの環境変数を [ターゲット=Knative] に設定し、[次へ] をクリックします。

      11

    3. On theトラフィック分割設定ウィザードページで、パーセント %パラメータを0に設定し、最新のリビジョンをクリックします。作成.

      説明

      すべてのリビジョンのトラフィック比率の合計を100する必要があります。

    4. リビジョンが完了したら、新しいバージョンの詳細をサービスタブをクリックします。

    5. 次のコマンドを実行して、helloworld-go Serviceにアクセスします。

      curl -H "host: <Default domain name>" http://<Gateway IP address> # Replace the gateway IP address and domain name with the actual values.

      期待される出力:

      Hello World!

      出力は、サービスが作成され、通常どおりアクセスできることを示します。 新しいバージョンのPercent % パラメーターは0に設定されています。 つまり、helloworld-go Serviceへのアクセス要求はすべて古いバージョンに送信されます。

  4. カナリアリリースを展開するには、トラフィック分割比率を変更します。

    1. On theサービスタブで、作成したサービスを選択し、詳細で、アクション列を作成します。

    2. [トラフィックの分割] をクリックします。 [トラフィックの分割] ダイアログボックスで、旧バージョンと新バージョンの両方で [パーセント %] パラメーターを50% に設定し、[OK] をクリックします。

    3. の後パーセント %パラメータがサービスに設定されている場合、サービスの新旧バージョンの詳細を表示できます。サービスタブをクリックします。

    4. 次のコマンドを実行して、サービスにアクセスします。

      while true; do curl -H "host: <Default domain name>" http://<Gateway IP address>; slesp 1; done # Replace the gateway IP address and domain name with the actual values.

      説明

      このコマンドは、手動で終了するまで永続的に実行されます。 Ctrl + Cを押してコマンドを終了します。

      期待される出力:

      Hello World!
      Hello Knative!
      Hello World!
      Hello Knative!
      Hello World!
      Hello Knative!
      ...

      Percent % パラメーターは、旧バージョンと新バージョンの両方で50% に設定されています。 つまり、helloworld-goサービスへのアクセス要求は、旧バージョンと新バージョンに均等に分散されます。

      Percent % パラメーターの値を変更して、カナリアリリースを実装できます。 新しいバージョンのPercent % パラメーターを100% に設定すると、新しいバージョンは完全にリリースされます。 プロセス中に、Percent % パラメーターの値を変更して、新しいバージョンで問題が見つかった場合にロールバックできます。

関連ドキュメント

リクエスト数に基づいて、Knativeサービスの自動スケーリングを設定できます。 詳細については、「トラフィック変動に耐える自動スケーリングの有効化」をご参照ください。