Knative は、異なる Revision 間のトラフィック分散を管理します。コンソールを使用して各 Revision のトラフィックの割合を定義し、サービスのトラフィックの 100% が新しいバージョンにルーティングされるまで、観察に基づいて割合を微調整できます。このプロセスにより、段階的リリースが完了します。
前提条件
ステップ 1: Knative サービスを作成する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Knative] ページの [サービス管理] タブで、[名前空間] を default に設定します。[サービスの作成] をクリックします。次に、[作成] をクリックして、helloworld-go という名前のサービスをデプロイします。
次の表に、主要な設定項目を示します。設定項目の詳細については、「Knative サービスをデプロイする」をご参照ください。
設定項目
説明
サービス名
サービスのカスタム名。この例では、サービス名は helloworld-go です。
イメージ名
[イメージの選択] をクリックします。表示されるダイアログボックスで、必要なイメージとそのバージョンを選択し、[OK] をクリックします。
非公開の レジストリ を入力することもできます。フォーマットは domainname/namespace/imagename:tag です。例: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56。
アクセスプロトコル
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: Revision を作成して段階的リリースを実行する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
Revision を作成します。
[サービス管理] タブで、対象サービスの [アクション] 列にある [詳細] をクリックします。
[Revision の作成] をクリックします。[基本情報] ページで、[詳細設定] をクリックします。新しい Revision の環境変数を
TARGET=Knativeに設定し、[次へ] をクリックします。
[トラフィック分割設定] ウィザードで、最新の Revision の [トラフィックの割合] を 0 に設定し、[作成] をクリックします。
説明すべての Revision のトラフィックの割合の合計は 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 サービスの自動スケーリングを実装できます。詳細については、「トラフィックリクエスト数に基づくサービスの自動スケーリングの実装」をご参照ください。