Knative を使用すると、リビジョン間でトラフィックを分割できます。コンソールで各リビジョンのトラフィックの割合を設定し、サービスを監視しながら徐々に割合を調整できます。すべてのトラフィック (100%) が新しいリビジョンにルーティングされると、カナリアリリースは完了です。
前提条件
開始する前に、以下を確認してください。
クラスターに Knative がデプロイされていること。詳細については、「クイックスタート:Knative サービスのデプロイ」をご参照ください。
ステップ1:Knative サービスの作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
サービス管理 ページの Knative タブで、[Namespace] ドロップダウンリストから [名前空間] を選択し、サービスの作成 をクリックします。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サービスのドメインとゲートウェイアドレスを、それぞれ デフォルトドメイン 列と ゲートウェイ 列から取得します。次のコマンドを実行して、
helloworld-goサービスにアクセスします。curl -H "Host: <default_domain>" http://<gateway_ip> # <default_domain> と <gateway_ip> を実際の値に置き換えてください。期待される出力:
Hello World!この出力は、サービスが実行中であり、アクセス可能であることを示しています。
ステップ2:カナリアリリース用のリビジョンの作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
リビジョンを作成します。
サービス管理 タブをクリックします。対象のサービスを見つけ、詳細 列の アクション をクリックします。
Revision の作成 をクリックします。設定ウィザードの 基本情報 ステップで 高度 をクリックし、新しいリビジョンの環境変数を
TARGET=Knativeに設定してから、次へ をクリックします。
トラフィック分割設定 ステップで、新しいリビジョンの [割合] を 0 に設定し、作成する をクリックします。
説明すべてのリビジョンのトラフィックの割合の合計は 100% にする必要があります。
リビジョンが作成されたら、サービス管理 タブをクリックして、新しいサービスリビジョンの詳細を表示します。
次のコマンドを実行して、
helloworld-goサービスにアクセスします。curl -H "Host: <default_domain>" http://<gateway_ip> # <default_domain> と <gateway_ip> を実際の値に置き換えてください。期待される出力:
Hello World!この出力は、サービスが実行中であり、アクセス可能であることを示しています。新しいリビジョンの [割合] が 0 であるため、
helloworld-goサービスへのリクエストは、引き続き古いリビジョンに送信されます。
トラフィックの割合を変更して、カナリアリリースを実行します。
サービス管理 ページで、対象のサービスを見つけ、詳細 列の アクション をクリックします。
[トラフィックの割合を設定] をクリックします。トラフィックの分割 ダイアログボックスで、新しいリビジョンと古いリビジョンの両方の [割合] を 50% に設定し、OK をクリックします。
[割合] を設定したら、サービス管理 タブをクリックして、新しいリビジョンと古いリビジョンの詳細を表示します。
次のコマンドを実行して、サービスにアクセスします。
while true; do curl -H "Host: <default_domain>" http://<gateway_ip>; sleep 1; done # <default_domain> と <gateway_ip> を実際の値に置き換えてください。説明このコマンドは、停止するまで継続的に実行されます。コマンドを停止するには、
Ctrl+Cを押します。期待される出力:
Hello World! Hello Knative! Hello World! Hello Knative! Hello World! Hello Knative! ...新しいリビジョンと古いリビジョンの [割合] がそれぞれ 50% であるため、Knative は
helloworld-goサービスへのリクエストを 2 つのリビジョン間でほぼ均等に分割します。[割合] を調整してサービスのカナリアリリースを続行し、新しいバージョンの [割合] が 100% に達するとリリースが完了します。このプロセス中に新しいバージョンで問題が見つかった場合は、[割合] を調整することでいつでもロールバックできます。
関連ドキュメント
リクエスト数に基づいて Knative サービスのオートスケーリングを設定できます。詳細については、「リクエスト数に基づくサービスのオートスケーリング」をご参照ください。