カナリアリリースでは、元のバージョンを維持したまま、新しいアプリケーションバージョンをカナリアとしてデプロイします。この戦略により、新しいバージョンのパフォーマンスをテストし、問題を早期に特定して解決し、システム全体の安定性を確保できます。このトピックでは、カナリアモードを使用してアップグレードの安定性を向上させる方法について説明します。
適用範囲
Enterprise Edition または Ultimate Edition の Alibaba Cloud Service Mesh (ASM) インスタンスを作成済みであり、インスタンスのバージョンが 1.22.6.114 以降であること。詳細については、「ASM インスタンスの作成」をご参照ください。
ACK クラスターを作成し、それを ASM インスタンスに追加済みであること。詳細については、「ASM インスタンスへのクラスターの追加」をご参照ください。
Bookinfo アプリケーションをデプロイ済みであること。詳細については、「ASM インスタンスに関連付けられた ACK クラスターへのアプリケーションのデプロイ」をご参照ください。
仕組み
Alibaba Cloud Service Mesh (ASM) は、リビジョンとラベルに基づいたアップグレードモードをサポートしており、新しいコントロールプレーンバージョンのカナリアアップグレードをより安定的かつ安全に実行できます。このアップグレードモードでは、データプレーン上のメッシュプロキシが特定のコントロールプレーンバージョンに関連付けられます。これにより、低リスクで新しいバージョンをクラスターにデプロイできます。明示的に選択するまで、プロキシは新しいバージョンに接続しません。また、ワークロードを段階的に新しいコントロールプレーンに移行することもできます。各独立したコントロールプレーンはリビジョンと呼ばれ、istio.io/rev ラベルが付与されます。
このリビジョンベースのアップグレードをサポートするために、Istio は名前空間に istio.io/rev ラベルを導入しています。このラベルは、対応する名前空間のワークロードに対して、どのコントロールプレーンバージョンがサイドカープロキシをインジェクトするかを示します。例えば、ラベル istio.io/rev=1-23-6 は、その名前空間のワークロードにバージョン 1.23.6 のサイドカープロキシがインジェクトされることを示します。
カナリアアップグレード中、まず一部のサービスをアップグレードして、ターゲットバージョンが期待どおりであることを検証できます。バージョンが期待どおりでない場合は、迅速にロールバックしてサービスの安定性を確保できます。新しいバージョンが期待どおりであることを確認した後、カナリアバージョンを安定バージョンに昇格させることができます。その後、ローリングアップデートを使用してすべてのワークロードを最新バージョンにアップグレードします。これでデータプレーンのアップグレードは完了です。最後に、古いバージョンをアンインストールしてアップグレードを完了します。
事前準備
カナリアアップグレードでは、名前空間ラベルを使用してインジェクトされるサイドカープロキシのバージョンを指定する必要があります。したがって、インジェクションポリシーを正しく構成する必要があります。次の手順に従って、インジェクションポリシーの構成がカナリアアップグレードの要件を満たしていることを確認してください。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[インジェクションポリシー構成] ページで、[インジェクションポリシー構成管理] セクションの [Pod がある名前空間のラベルは条件を満たす必要があります] が [Istio-injection: Enabled を含む] に設定されていることを確認します。
説明istio-injection: enabledラベルはistio.io/rev: stableラベルと同じセマンティクスを持ちます。カナリアアップグレード中に、istio.io/rev: stableラベルを使用して、対応する名前空間の Pod に安定版のメッシュプロキシをインジェクトできます。istio.io/rev: canaryラベルを使用して、対応する名前空間の Pod にカナリア版のメッシュプロキシをインジェクトできます。アップグレード後、2つのラベルは同じセマンティクスを持つため、
istio.io/rev:stableをistio-injection: enabledに置き換えなくても、インジェクションは正常に機能し続けます。次の図は、アップグレード前のステータスを示しています:
ステップ 1:ASM コントロールプレーンのアップグレード
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[アップグレード管理] ページで、[カナリアアップグレード] タブをクリックします。[コントロールプレーン] タブで、[カナリアバージョン] を選択し、[新しい Server Load Balancer (CLB) インスタンスを作成] を選択します。[確認] をクリックします。[アップグレードを確認しますか?] ダイアログボックスで、[OK] をクリックします。
カナリアアップグレードでは、最大で 1 つのマイナーバージョンをスキップできます。この例では、ASM インスタンスのバージョンは 1.22 なので、最大でバージョン 1.23 にアップグレードできます。このトピックでは、v1.23.6 へのアップグレードを例として使用します。カナリアアップグレードのターゲットバージョンをデプロイすると、関連付けられた Server Load Balancer (CLB) インスタンスが作成されます。特別な要件がない場合は、CLB インスタンスのデフォルト仕様を選択できます。CLB の課金の詳細については、「CLB の課金概要」をご参照ください。
カナリアバージョンのデプロイは非同期プロセスであり、数分かかります。関連コンポーネントがデプロイされるまでお待ちください。新しいバージョンがデプロイされると、ページは次の図のように表示されます。

次の図は、この時点でのステータスを示しています:
ステップ 2:reviews-v2 にインジェクトされるプロキシの新しいバージョンへのアップグレード
ステップ 1で、カナリアアップグレードを使用して v1.23.6 の Istio コントロールプレーンをデプロイしました。次の手順では、Bookinfo アプリケーションの reviews-v2 バージョンにインジェクトされるメッシュプロキシのバージョンを v1.23 に更新し、このバージョンが期待どおりであることを確認する方法について説明します。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[グローバル名前空間] ページの [自動インジェクション] 列で、[default] 名前空間のラベルが
istio-injection: enabledであるかどうかを確認します。ラベルが
istio-injection: enabledの場合、バージョン 1.22 のメッシュプロキシがインジェクトされます。[グローバル名前空間] ページの [自動インジェクション] 列で、[default] 名前空間を見つけ、[バージョン 1-23-6 のインジェクトに切り替え] をクリックします。[確認] ダイアログボックスで、[OK] をクリックします。
デフォルトのグローバル名前空間のラベルが
istio.io/rev: canaryに切り替わります。データプレーンのデフォルト名前空間のラベルも即座にistio.io/rev: canaryに同期されます。その後、[グローバル名前空間] ページには、デフォルト名前空間にバージョン 1.23 のメッシュプロキシがインジェクトされることが表示されます。デフォルト名前空間で作成された新しいワークロード (Pod) には、バージョン 1.23 のメッシュプロキシがインジェクトされます。他の名前空間のラベルは変更されません。それらには引き続きバージョン 1.22 のメッシュプロキシがインジェクトされます。説明上記の手順は、アップグレード前に自動インジェクションがすでに有効化されていた名前空間で、インジェクトされるサイドカーメッシュプロキシのバージョンを切り替える方法を説明しています。アップグレード前にサイドカーメッシュプロキシのインジェクションが有効化されていなかった名前空間については、通常どおり自動インジェクションを有効化できます。インジェクションを有効化する際に、必要なサイドカーメッシュプロキシのバージョンを選択できます。サービスメッシュは、選択に基づいて
istio.io/rev:stableまたはistio.io/rev:canaryラベルを名前空間に追加します。reviews-v2 ワークロードのローリングアップデートを実行します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] を選択します。
[クラスター] ページで、ターゲットクラスターの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[Deployments] ページで、[reviews-v2] を見つけます。[アクション] 列で、を選択します。[再デプロイ] ダイアログボックスで、[OK] をクリックします。
[Deployments] ページで、[reviews-v2] をクリックします。[Pod] タブで、ローリングアップデート後に reviews-v2 に対応する Pod が正常に起動したか、また新しい Pod にバージョン 1.23 のサイドカープロキシがインジェクトされているかを確認します。

ローリングアップデート後、reviews-v2 に対応する Pod は正常に起動し、新しい Pod には v1.23 のサイドカーメッシュプロキシがインジェクトされます。
ブラウザを開き、Bookinfo ページにアクセスします。トラフィックが期待どおりであるかを確認します。
次の図に示すように、reviews-v2 バージョンにアクセスできます。この結果は期待どおりです。

次の図は、この時点でのステータスを示しています:
ステップ 3:reviews-v2 のバージョン 1.22 へのロールバック
ステップ 2での検証が失敗した場合、または他の理由でロールバックする場合は、次の手順に従います。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[グローバル名前空間] ページの [自動インジェクション] 列で、[default] 名前空間を見つけ、[バージョン 1-22-6 のインジェクトに切り替え] をクリックします。[確認] ダイアログボックスで、[OK] をクリックします。
ロールバック前、名前空間のラベルは
istio.io/rev: canaryであり、デフォルト名前空間にはバージョン 1.23 のメッシュプロキシがインジェクトされます。ロールバック後、ラベルは
istio.io/rev: stableに切り替わります。データプレーンのデフォルト名前空間のラベルもistio.io/rev: stableに同期されます。これで、デフォルト名前空間にはバージョン 1.22 のメッシュプロキシがインジェクトされます。ACK コンソールで reviews-v2 ワークロードを再デプロイします。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] を選択します。
[クラスター] ページで、ターゲットクラスターの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[Deployments] ページで、[名前空間] を [default] に設定します。[アクション] 列で、[reviews-v2] を見つけ、を選択します。[再デプロイ] ダイアログボックスで、[OK] をクリックします。
[Deployments] ページで、[reviews-v2] という名前をクリックします。[Pod] タブで、ローリングアップデート後に reviews-v2 に対応する Pod が正常に起動したか、また新しい Pod にバージョン 1.22 のサイドカープロキシがインジェクトされているかを確認します。

ローリングアップデート後、reviews-v2 に対応する Pod は正常に起動し、新しい Pod にはバージョン 1.22 のサイドカープロキシがインジェクトされます。
ステップ 4:アップグレードの取り消し
ロールバックが成功した後、カナリアアップグレードを取り消し、ASM インスタンスを元のバージョン 1.22 に戻すことができます。
アップグレードを取り消す前に、すべての名前空間に安定版のサイドカープロキシバージョンがインジェクトされていることを確認してください。そうでない場合、アップグレードを取り消すことはできません。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[アップグレード管理] ページの [カナリアアップグレード] タブで、[アップグレードの取り消し] をクリックします。[アップグレードの取り消しを確認しますか?] ダイアログボックスで、[OK] をクリックします。
[アップグレードの取り消し] をクリックすると、カナリアリリースバージョンのコントロールプレーンコンポーネント (この例ではバージョン 1.23) が削除されます。安定バージョンのコントロールプレーンコンポーネント (この例ではバージョン 1.22) のみが保持されます。
次の図は、この時点でのステータスを示しています:
ステップ 5:再アップグレードと検証
ASM インスタンス全体が ステップ 1 の前の状態になり、アップグレードの準備が整いました。この例では、reviews-v1、reviews-v2、および reviews-v3 ワークロードのみを検証します。検証が成功するまで、必要に応じて上記の手順に従って任意のワークロードをアップグレードおよび検証できます。
ステップ 6:検証合格後の公式バージョンへの切り替え
上記の手順で、reviews-v1、reviews-v2、および reviews-v3 がバージョン 1.23 (新バージョン) のメッシュプロキシを使用でき、機能が期待どおりに動作することが検証されました。この時点で、バージョン 1.23 を公式バージョンに昇格させることができます。
バージョンを切り替えると、アップグレードは旧バージョンの公開停止に進みます。この時点で、すべてのワークロードを新しいバージョン 1.23 のサイドカーメッシュプロキシに切り替える必要があり、アップグレードを取り消すことはできなくなります。[新バージョンデプロイ] フェーズですべての検証作業を完了するようにしてください。
バージョン切り替え後、
istio.io/rev: stableおよびistio-injection: enabledラベルを持つ名前空間には、新しいバージョン 1.23 のサイドカーメッシュプロキシがインジェクトされます。istio.io/rev: canaryラベルはもはや効力を失います。したがって、バージョンを切り替える際、ASM はすべてのistio.io/rev: canaryラベルを自動的にistio.io/rev: stableに変更します。[アップグレード管理] ページの [カナリアアップグレード] タブで [バージョンの切り替え] をクリックする際に、これを確認する必要があります。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[アップグレード管理] ページの [カナリアアップグレード] タブで、[バージョンのアップグレード] をクリックします。[バージョンを切り替えますか?] ダイアログボックスで、プロンプトを注意深くお読みください。情報を確認した後、[OK] をクリックします。
切り替えが成功すると、既存のバージョン 1.22 のメッシュプロキシは保持され、対応するワークロードは影響を受けません。ただし、再デプロイされたすべての Pod にはバージョン 1.23 のサイドカープロキシがインジェクトされます。切り替えと更新後のページは次の図のようになります。

次の図は、この時点でのステータスを示しています:
ステップ 7:データプレーンのアップグレード
この時点で、ASM のバージョンは 1.23 です。istio.io/rev=stable、istio.io/rev=1-23-6、または istio-injection=enabled ラベルを持つ名前空間には、すべてバージョン 1.23 のサイドカーメッシュプロキシがインジェクトされます。ワークロードのローリングアップデートを実行して、インジェクトされたサイドカーメッシュプロキシを新しいバージョン 1.23 にアップグレードできます。これでデータプレーンのアップグレードは完了です。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[アップグレード管理] ページの [カナリアアップグレード] タブで、[データプレーン] タブをクリックします。必要に応じて ASM ゲートウェイまたはワークロードをアップグレードできます。
ASM ゲートウェイのアップグレード: [ASM ゲートウェイ] セクションで、ターゲットのゲートウェイを見つけます。[アクション] 列で、[ローリングアップグレード] をクリックします。[ローリングアップグレードを実行しますか?] ダイアログボックスで、[OK] をクリックして ASM ゲートウェイを新しいバージョン 1.23 にアップグレードします。
ワークロードのアップグレード: [アップグレードするワークロード] セクションで、[名前空間] を切り替えます。次に、ターゲットのワークロードを見つけます。[アクション] 列で、[ローリングアップグレード] をクリックします。[ローリングアップグレードを実行しますか?] ダイアログボックスで、[OK] をクリックしてワークロードを新しいバージョン 1.23 にアップグレードします。
説明このリストには、アップグレード済みの ASM ゲートウェイやワークロードは表示されません。
左側のナビゲーションウィンドウで [メッシュステータス] をクリックして、アップグレードされていないグローバルワークロードまたはゲートウェイインスタンスを表示することもできます。
次の図は、データプレーンのアップグレードが完了した後のステータスを示しています。
ステップ 8:旧バージョンの公開停止
データプレーン上のすべてのワークロードがアップグレードされた後、旧バージョン 1.22 を公開停止できます。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[アップグレード管理] ページの [カナリアアップグレード] タブで、[旧バージョンの公開停止] をクリックします。[コントロールプレーンの旧バージョンを公開停止しますか?] ダイアログボックスで、[OK] をクリックします。
次の図は、この時点でのステータスを示しています。