Knativeは、異なるリビジョン間のトラフィック分散を管理します。 コンソールでは、各リビジョンのトラフィック分散パーセンテージを定義し、パフォーマンスに基づいてこれらのパーセンテージを微調整できます。 このプロセスは、すべてのトラフィックが新しいバージョンに切り替えられ、カナリアリリースが完了するまで続きます。
前提条件
Knativeはクラスターにデプロイされています。 詳細については、「Knativeのデプロイ」「」をご参照ください。
手順1: Knativeサービスの作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
Knativeページの [サービス] タブで、名前空間を既定に設定します。 [サービスの作成] をクリックし、helloworld-goという名前のサービスをデプロイします。 サービスのデプロイ後、[作成] をクリックします。
次の表に、主要なパラメーターを示します。 パラメーターの詳細については、「Knativeを使用したサーバーレスアプリケーションのデプロイ」をご参照ください。
パラメーター
説明
名前空間
サービスが属する名前空間を選択します。
サービス名
サービスの名前を入力します。 この例では、helloworld-goが使用されます。
イメージ名
画像を選択するには、[画像の選択] をクリックします。 [画像の選択] ダイアログボックスで画像を選択し、[OK] をクリックします。 プライベートイメージレジストリのアドレスを入力することもできます。 レジストリアドレスは、domainname/namespace/imagename:tag形式である必要があります。 この例では、registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-goが使用されます。
イメージバージョン
[イメージバージョンの選択] をクリックし、イメージバージョンを選択します。 デフォルトでは、最新バージョンが使用されます。 この例では、73fbdd5 6が選択されている。
アクセスプロトコル
HTTPとgRPCがサポートされています。
説明注
gRPCは、HTTP/2標準とプロトコルバッファ (protobuf) シリアル化プロトコルに基づいて開発され、さまざまなプログラミング言語をサポートしています。 HTTP/1.1と比較して、HTTP/2を使用すると、パケットをより効率的に送受信できます。
コンテナポート
公開するコンテナーポート。 ポート番号は 1〜65535 である必要があります。
サービスの [ステータス] 列に [作成済み] が表示された場合、サービスがデプロイされます。
[サービス] ページで、
helloworld-go
サービスのドメイン名とゲートウェイIPアドレスをそれぞれ [デフォルトドメイン] 列と [ゲートウェイ] 列に記録します。次のコマンドを実行して、
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: カナリアリリースをデプロイするリビジョンを作成する
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
リビジョンを作成します。
On theサービスタブで、作成したサービスを選択し、詳細で、アクション列を作成します。
[リビジョンの作成] をクリックします。 [基本情報] ウィザードページで、[詳細] をクリックし、最新のリビジョンの環境変数を
[ターゲット=Knative]
に設定し、[次へ] をクリックします。On theトラフィック分割設定ウィザードページで、パーセント %パラメータを0に設定し、最新のリビジョンをクリックします。作成.
説明すべてのリビジョンのトラフィック比率の合計を100する必要があります。
リビジョンが完了したら、新しいバージョンの詳細をサービスタブをクリックします。
次のコマンドを実行して、
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へのアクセス要求はすべて古いバージョンに送信されます。
カナリアリリースを展開するには、トラフィック分割比率を変更します。
On theサービスタブで、作成したサービスを選択し、詳細で、アクション列を作成します。
[トラフィックの分割] をクリックします。 [トラフィックの分割] ダイアログボックスで、旧バージョンと新バージョンの両方で [パーセント %] パラメーターを50% に設定し、[OK] をクリックします。
の後パーセント %パラメータがサービスに設定されている場合、サービスの新旧バージョンの詳細を表示できます。サービスタブをクリックします。
次のコマンドを実行して、サービスにアクセスします。
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サービスの自動スケーリングを設定できます。 詳細については、「トラフィック変動に耐える自動スケーリングの有効化」をご参照ください。