Knative は、異なるリビジョン間のトラフィック分散を管理します。コンソールで各リビジョンのトラフィックの割合を設定し、パフォーマンスをモニタリングしながら、新しいリビジョンに徐々にトラフィックを移行できます。新しいリビジョンがトラフィックの 100% を処理するようになると、カナリアリリースは完了です。
前提条件
ACS クラスターにKnative をデプロイしていること。
ステップ1:Knative Serviceの作成
-
ACS コンソールにログインします。左側のナビゲーションペインで、クラスターリストをクリックします。
-
クラスターリスト ページで、対象のクラスターの名前をクリックします。左側のナビゲーションペインで、 を選択します。
-
[Knative] ページで、サービス管理 タブをクリックし、名前空間 ドロップダウンリストから [default] を選択し、サービスの作成 をクリックします。設定ページで、
helloworld-goという名前の Service をデプロイし、作成 をクリックします。次の表に、主要なパラメーターを示します。パラメーターの詳細については、「Knative Service のクイックデプロイ」をご参照ください。
パラメーター
説明
[名前空間]
Service が属する名前空間を選択します。
[サービス名]
Service の名前を入力します。この例では、
helloworld-goを使用します。[イメージ名]
イメージの選択 をクリックします。表示されたダイアログボックスで、目的のイメージを選択し、OK をクリックします。プライベートレジストリからイメージのパスを入力することもできます。形式は domainname/namespace/imagename:tag です。この例では、パスは registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go です。
[アクセスプロトコル]
HTTP と gRPC のアクセスプロトコルをサポートしています。
説明gRPC は、効率的な HTTP/2 標準に基づいて構築されており、Protocol Buffers (Protobuf) シリアル化プロトコルを使用し、多くのプログラミング言語をサポートしています。
[コンテナーポート]
公開するコンテナポートです。ポート番号は 1~65535 の範囲である必要があります。
対象 Service の ステータス 列に 作成済 と表示されている場合、Service は正常にデプロイされています。
サービス管理 ページで、
helloworld-goService の デフォルトドメイン 列と ゲートウェイ 列から、それぞれドメイン名とゲートウェイアドレスを取得します。次のコマンドを実行して、
helloworld-goService にアクセスします。curl -H "Host: <default_domain>" http://<gateway_ip> # <default_domain> と <gateway_ip> を実際の値に置き換えてください。期待される出力:
Hello World!この出力は、Service が作成され、アクセス可能であることを示しています。
ステップ2:カナリアリリースの実行
-
ACS コンソールにログインします。左側のナビゲーションペインで、クラスターリストをクリックします。
-
クラスターリスト ページで、対象のクラスターの名前をクリックします。左側のナビゲーションペインで、 を選択します。
Revision を作成します。
サービス管理 タブをクリックします。対象 Service の アクション 列にある 詳細 をクリックします。
Revision の作成 をクリックします。基本情報 ページで 高度 をクリックし、新しい Revision の環境変数を
TARGET=Knativeに設定してから、次へ をクリックします。
トラフィック分割設定 ページで、新しい Revision の [パーセント] を 0 に設定し、作成する をクリックします。
説明すべての Revision のトラフィックのパーセンテージの合計は 100% にする必要があります。
Revision が作成されたら、サービス管理 タブをクリックして、新しく作成された Revision の詳細を表示します。
次のコマンドを実行して、
helloworld-goService にアクセスします。curl -H "Host: <default_domain>" http://<gateway_ip> # <default_domain> と <gateway_ip> を実際の値に置き換えてください。期待される出力:
Hello World!期待どおり、新しい Revision の [パーセント] が 0 であるため、helloworld-go Service へのリクエストは、引き続き古い Revision にルーティングされます。
トラフィックのパーセンテージを変更して、カナリアリリースを実行します。
サービス管理 ページで、対象 Service の アクション 列にある 詳細 をクリックします。
[トラフィックパーセンテージの設定] をクリックします。トラフィックの分割 ダイアログボックスで、新しい Revision と古い Revision 両方の [パーセント] を 50% に設定し、OK をクリックします。
Service の [パーセント] が設定されたら、サービス管理 タブをクリックして、新しい Revision と古い Revision の詳細を表示します。
次のコマンドを実行して、Service にアクセスします。
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! ...新しい Revision と古い Revision の [パーセント] が 50% に設定されているため、helloworld-go Service へのリクエストは現在、2 つの Revision 間でほぼ均等に分割されます。
新しい Revision の [パーセント] が 100% に達するまで [パーセント] を調整し続けることで、Service のカナリアリリースを続行できます。これでカナリアリリースは完了です。このプロセス中に新しい Revision で問題が発見された場合は、いつでも [パーセント] を調整してロールバックを実行できます。
関連トピック
同時リクエスト数に基づいて、Knative Service のオートスケーリングを設定できます。詳細については、「リクエストベースのServiceのオートスケーリング設定」をご参照ください。