Knative は、異なるリビジョン間でトラフィックを分散します。コンソールで各リビジョンのトラフィックの割合を設定できます。その後、トラフィックの 100% が新しいバージョンにルーティングされるまで、トラフィックの割合を継続的に調整し、サービスをモニターして、カナリアリリースを完了します。
前提条件
Knative は ACS クラスターにデプロイされています。詳細については、「Knative をデプロイする」をご参照ください。
ステップ 1: Knative サービスの作成
ACS コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけてその ID をクリックします。クラスター詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[Knative] ページの [サービス管理] タブで、[名前空間] を default に設定し、[サービスの作成] をクリックします。構成ページで、helloworld-go という名前のサービスを作成し、[作成] をクリックします。
次の表に、主要なパラメーターを示します。パラメーターの詳細については、「Knative を使用してサーバーレスアプリケーションをデプロイする」をご参照ください。
パラメーター
説明
名前空間
サービスが属する名前空間を選択します。
サービス名
サービスの名前を入力します。この例では、helloworld-go を使用します。
イメージ名
[イメージの選択] をクリックします。表示されるダイアログボックスで、イメージを選択し、[OK] をクリックします。非公開の レジストリ のアドレスを入力することもできます。アドレスは domainname/namespace/imagename:tag のフォーマットである必要があります。この例では、registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go を使用します。
アクセスプロトコル
HTTP と gRPC がサポートされています。
説明gRPC は、HTTP/2 プロトコル標準と Protocol Buffers (Protobuf) シリアル化プロトコルに基づいて開発されています。多くのプログラミング言語をサポートしています。HTTP と比較して、HTTP/2 はデータの送受信においてよりコンパクトで効率的です。
コンテナーポート
公開するコンテナーポート。ポート番号は 1 から 65535 の範囲である必要があります。
サービスの [ステータス] 列に [作成済み] と表示された場合、サービスはデプロイされています。
[サービス] ページで、[デフォルトドメイン] 列で
helloworld-goサービスのドメイン名を見つけ、[ゲートウェイ] 列でゲートウェイ IP アドレスを見つけます。次のコマンドを実行して
helloworld-goサービスにアクセスします:curl -H "Host: <default domain name>" http://<access gateway IP> # <default domain name> と <access gateway IP> を実際の値に置き換えます。期待される出力:
Hello World!この出力は、サービスが作成され、アクセス可能であることを示します。
ステップ 2: カナリアリリースをデプロイするためのリビジョンを作成する
ACS コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけてその ID をクリックします。クラスター詳細ページの左側のナビゲーションウィンドウで、 を選択します。
リビジョンを作成します。
[サービス管理] タブで、対象サービスの [アクション] 列にある [詳細] をクリックします。
[リビジョンの作成] をクリックします。[基本情報] ページで、[詳細設定] をクリックします。新しいリビジョンの環境変数を
TARGET=Knativeに設定し、[次へ] をクリックします。
[トラフィック分割設定] ウィザードで、最新リビジョンの [トラフィックの割合] を 0 に設定し、[作成] をクリックします。
説明すべてのリビジョンのトラフィックの割合の合計は 100 にする必要があります。
サービスを作成した後、[サービス] タブを選択して、新しいサービスバージョンの詳細を表示します。
次のコマンドを実行して
helloworld-goサービスにアクセスできます:curl -H "Host: <default domain name>" http://<access gateway IP> # <default domain name> と <access gateway IP> を実際の値に置き換えます。期待される出力:
Hello World!この出力は、サービスが作成され、アクセス可能であることを示します。新しいバージョンの [トラフィックの割合] は 0 であるため、helloworld-go サービスへのリクエストは引き続き古いバージョンにルーティングされます。
トラフィックの比率を変更して、段階的リリースを実行します。
[サービス管理] ページで、対象サービスの [アクション] 列にある [詳細] をクリックします。
[トラフィックの分割] をクリックします。[トラフィックの分割] ダイアログボックスで、新旧両バージョンの [トラフィック比率] を 50% に設定し、[OK] をクリックします。
サービスの [トラフィックの割合] を設定した後、[サービス管理] タブをクリックして、新旧のサービスバージョンの詳細を表示します。
次のコマンドを実行してサービスにアクセスします。
while true; do curl -H "Host: <default domain name>" http://<access gateway IP>; sleep 1; done # <default domain name> と <access gateway IP> を実際の値に置き換えます。説明このコマンドは、手動で終了するまで永続的に実行されます。
Ctrl+Cを押してコマンドを終了できます。期待される出力:
Hello World! Hello Knative! Hello World! Hello Knative! Hello World! Hello Knative! ...新旧両バージョンの [トラフィック比率] が 50% に設定されているため、helloworld-go サービスへのトラフィックは両者間で均等に分割されます。
[トラフィック比率] を調整することで、サービスの段階的リリースを続行できます。新しいバージョンの [トラフィック比率] が 100% に達すると、段階的リリースは完了です。このプロセス中に、新しいバージョンで問題が発生した場合は、[トラフィック比率] を調整することでいつでもロールバックできます。
参考
リクエスト数に基づいて Knative サービスを自動的にスケーリングできます。詳細については、「リクエスト数に基づく自動スケーリングの構成」をご参照ください。