反復開発中にアプリケーションの新しいバージョンをリリースする際に互換性と安定性の課題に直面する場合は、Knative on ASM を使用して Knative サービスのトラフィック分割に基づくカナリアリリースを実行できます。ASM は Service Mesh の略です。Knative サービスを作成すると、Knative は自動的にサービスの最初の Revision を作成します。Knative サービスの構成が更新または変更されるたびに、Knative は新しい Revision を作成し、異なる Revision に配信されるトラフィックの割合を変更して、新しい Revision をリアルタイムで正確に検証できます。これにより、新しい Revision の大規模デプロイメントから発生する可能性のある潜在的なリスクが大幅に軽減され、サービスの継続性とユーザーエクスペリエンスを確保し、問題をタイムリーに発見して修正できます。
前提条件
Knative on ASM を使用して Knative サービスが作成されます。詳細については、「Knative on ASM を使用してサーバーレスアプリケーションをデプロイする」をご参照ください。
このトピックでは、デフォルトのドメイン名 example.com を使用して、サービスのカナリアリリースを実行する方法を示しています。カスタムドメイン名を使用する必要がある場合は、「Knative on ASM でカスタムドメイン名を設定する」をご参照ください。
ACK コンソールで Revision を作成する
ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のナビゲーションペインで、 を選択します。
[サービス] タブをクリックします。サービスのリストで、目的のサービスを見つけ、その名前をクリックします。表示されたページの右上で、[revision の作成] をクリックします。
[基本情報] ステップで、下部の [詳細設定] をクリックします。次に、追加[環境変数] の横にある 種類カスタム変数キーターゲット値/valuefromASM 上の Knative次へ をクリックし、 を に、 を に、 を に設定します。次に、 をクリックします。
[トラフィック分割設定] ステップで、トラフィック分割設定パーセント (%)0[最新の Revision] の 100作成 を に、以前の Revision の を に設定します。次に、 をクリックします。
説明すべてのリビジョンのトラフィックの割合の合計は 100% である必要があります。
リビジョンが作成された後、[サービス] タブをクリックします。サービスの一覧で、目的のサービスの名前をクリックします。[リビジョン情報] セクションで、作成されたリビジョンの詳細を表示できます。
サービスにアクセスするには、次のコマンドを実行します。
curl http://helloworld-go.default.example.com期待される出力:
Hello World!期待される出力は、helloworld-go サービスにアクセスするためのすべてのリクエストが以前の Revision に送信されることを示しています。
トラフィック分割の割合を変更して、サービスのカナリアリリースを実行する
ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のナビゲーションペインで、 を選択します。
[サービス] タブをクリックします。サービスの一覧で、目的のサービスの名前をクリックします。表示されたページの右上隅にある [トラフィック分割] をクリックします。[トラフィック分割] ダイアログボックスで、最新のレビジョンと以前のレビジョンの両方について、[パーセント (%)] を 50 に設定し、[OK] をクリックします。
トラフィック分割率の設定が完了したら、[サービス] タブをクリックします。サービスの一覧で、目的のサービスの名前をクリックします。表示されたページの [リビジョン情報] セクションで、新規および以前のリビジョンの詳細を表示できます。
サービスにアクセスするには、次のコマンドを実行します。
for i in `seq 20`; do curl http://helloworld-go.default.example.com; done;期待される出力:
Hello Knative on ASM! Hello Knative on ASM! Hello World! Hello Knative on ASM! Hello World! Hello World! Hello World! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello World! Hello Knative on ASM! Hello World! Hello Knative on ASM! Hello Knative on ASM! Hello World! Hello World!期待される出力は、helloworld-go サービスにアクセスするためのリクエストが、新しい Revision と以前の Revision にほぼ均等に配信されることを示しています。
新しいリビジョンのトラフィックの割合が 100% になるまで、[パーセント %] パラメーターの設定を徐々に調整します。
このプロセス中に、新しいリビジョンに問題が見つかった場合は、[Percent %] パラメーターの値を変更してロールバックを実行できます。
サービスに再度アクセスするには、次のコマンドを実行します。
for i in `seq 20`; do curl http://helloworld-go.default.example.com; done;期待される出力:
Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM!期待される出力は、helloworld-go サービスにアクセスするためのすべてのリクエストが新しい Revision に送信されることを示しています。これは、サービスのカナリアリリースが正常に実行されたことを示しています。
関連操作
Knative Serving は、各 Pod に Queue Proxy コンテナを追加します。Queue Proxy コンテナは、アプリケーションコンテナの同時実行メトリクスを Knative Pod Autoscaler (KPA) に送信します。KPA はメトリクスを受信した後、同時リクエスト数と関連する自動スケーリングアルゴリズムに基づいて、Deployment にプロビジョニングされる Pod の数を自動的に調整します。詳細については、「リクエスト数に基づいて Pod の自動スケーリングを有効にする」をご参照ください。