カナリアリリースでは、安定版と並行してアプリケーションの新しいバージョンをデプロイすることで、テストを行うことができます。この方法により、システムの安定性を損なうことなく、問題を早期に発見して修正できます。このトピックでは、カナリアアップグレードを使用してご利用の Alibaba Cloud Service Mesh (ASM) インスタンスの安定性を向上させる方法について説明します。
前提条件
-
バージョン 1.22.6.114 以降を実行する Enterprise Edition または Ultimate Edition の ASM インスタンスが必要です。詳細については、「ASM インスタンスの作成」をご参照ください。
-
Container Service for Kubernetes (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 インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
-
Sidecar Proxy injection ページで、Injection strategy configuration management の下で、The labels of the pod's namespace must meet the conditions. が Include istio-injection: enabled に設定されていることを確認します。[インジェクションポリシー構成] ページの [サイドカーインジェクションが必要な Pod を選択] セクションでは、Pod の名前空間のラベル条件はデフォルトで [istio-injection: enabled を含む] です。
説明istio-injection: enabledラベルは、意味的にはistio.io/rev: stableと同等です。カナリアアップグレード中、istio.io/rev: stableラベルは対応する名前空間の Pod に安定版リビジョンのサイドカープロキシをインジェクトし、istio.io/rev: canaryラベルはカナリアリビジョンをインジェクトします。アップグレード後、
istio.io/rev:stableは意味的に同一であるため、istio-injection: enabledに置き換える必要はありません。
手順 1:コントロールプレーンのアップグレード
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
-
Upgrade Management ページで、Canary Upgrade タブをクリックします。Control Plane タブで、Canary version: と [新しい Server Load Balancer (CLB) インスタンスを作成] を選択し、Confirm をクリックします。Confirm upgrade? ダイアログボックスで、OK をクリックします。
カナリアアップグレードでは、最大で 1 つのマイナーバージョンをスキップできます。この例では、ASM インスタンスのバージョンは 1.22 なので、バージョン 1.23 までアップグレードできます。このトピックでは、v1.23.6 を例として使用します。カナリアアップグレードのターゲットバージョンをデプロイすると、ASM は Server Load Balancer (CLB) インスタンスを作成し、ターゲットバージョンに関連付けます。特別な要件がない場合は、CLB インスタンスのデフォルト仕様を使用できます。CLB の課金の詳細については、「CLB の課金概要」をご参照ください。
コンポーネントがデプロイされるのを待ちます。デプロイが完了すると、ページは自動的に更新されます。
進捗バーに、プロセスが第 2 ステップの [新しいバージョンのデプロイ] にあることが表示されます。現在のバージョンとカナリアバージョンの両方のステータスは [カナリアアップグレード中] です。ページには、新しいコントロールプレーンがデプロイされたこと、および新しいバージョンを検証する必要があることが表示されます。[バージョン切り替え] をクリックしてアップグレードを続行するか、[アップグレードの取り消し] をクリックしてロールバックできます。
手順 2:reviews-v2 サイドカープロキシのアップグレード
手順 1 では、カナリアアップグレードを使用してバージョン v1.23.6 の Istio コントロールプレーンをデプロイしました。次の手順では、Bookinfo アプリケーションの reviews-v2 サービスのインジェクトされたサイドカープロキシを v1.23 に更新して、このバージョンを検証する方法について説明します。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
-
Global Namespace ページで、Automatic Sidecar Injection 列で、default 名前空間のラベルが
istio-injection: enabledであるかどうかを確認します。ラベルが
istio-injection: enabledの場合、バージョン 1.22 のサイドカープロキシがインジェクトされていることを示します。 -
Global Namespace ページで、default 名前空間を見つけます。Automatic Sidecar Injection 列で、[1-23-6 バージョンのインジェクトに切り替え] をクリックします。Confirm ダイアログボックスで、OK をクリックします。
デフォルトのグローバル名前空間のラベルは
istio.io/rev: canaryに変更され、データプレーン上のデフォルト名前空間のラベルもistio.io/rev: canaryに同期されます。Global Namespace ページには、デフォルト名前空間にバージョン 1.23 のサイドカープロキシがインジェクトされていることが表示されます。デフォルト名前空間で作成された新しい Pod には、バージョン 1.23 のサイドカープロキシがインジェクトされます。他の名前空間のラベルは変更されないため、引き続きバージョン 1.22 のサイドカープロキシを使用します。説明上記の手順は、アップグレード前に自動インジェクションが有効になっていた名前空間のサイドカープロキシのバージョンを切り替える方法を説明しています。自動インジェクションが有効になっていなかった名前空間については、それを有効にして目的のサイドカープロキシのバージョンを選択できます。ASM は、選択に基づいて名前空間に
istio.io/rev:stableまたはistio.io/rev:canaryラベルを追加します。 -
reviews-v2 ワークロードのローリングアップデートを実行します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、をクリックします。
-
展開 ページで、reviews-v2 を見つけます。アクション 列で、を選択します。再デプロイ ダイアログボックスで、OK をクリックします。
-
展開 ページで、reviews-v2 をクリックします。ポッド タブで、ローリングアップデート後に reviews-v2 の Pod が正常に起動したか、および新しい Pod にバージョン 1.23 のサイドカープロキシがインジェクトされているかどうかを確認します。
ローリングアップデート後、reviews-v2 の Pod は正常に起動し、新しい Pod には v1.23 のサイドカープロキシがインジェクトされます。
-
ブラウザを開き、Bookinfo ページにアクセスして、トラフィックが期待どおりにルーティングされているか確認します。
次の図に示すように、reviews-v2 サービスに期待どおりにアクセスできます。Bookinfo ページは正しく読み込まれます。[Book Reviews] セクションには黒い星の評価が付いた書評が表示され、ページの右下隅には
Reviews served by: reviews-v2-5b5fdb5d7c-xxxと表示されます。これは、reviews-v2 Pod がレビューを提供しており、トラフィックが期待どおりにルーティングされていることを示しています。
手順 3:reviews-v2 のロールバック
手順 2 の検証が失敗した場合、または他の理由でロールバックする必要がある場合は、次の手順に従います。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
-
Global Namespace ページで、default 名前空間を見つけます。Automatic Sidecar Injection 列で、[1-22-6 バージョンのインジェクトに切り替え] をクリックします。Confirm ダイアログボックスで、OK をクリックします。
ロールバック前、名前空間のラベルは
istio.io/rev: canaryであり、デフォルト名前空間にはバージョン 1.23 のサイドカープロキシがインジェクトされていました。ロールバック後、ラベルは
istio.io/rev: stableに切り替わり、データプレーン上のdefault名前空間のラベルもistio.io/rev: stableに更新されます。その結果、バージョン 1.22 のメッシュプロキシがdefault名前空間にインジェクトされます。 -
ACK コンソールで reviews-v2 ワークロードを再デプロイします。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、をクリックします。
-
展開 ページで、名前空間 ドロップダウンリストから default を選択します。reviews-v2 を見つけます。アクション 列で、を選択します。再デプロイ ダイアログボックスで、OK をクリックします。
-
展開 ページで、reviews-v2 をクリックします。ポッド タブで、ローリングアップデート後に reviews-v2 の Pod が正常に起動したか、および新しい Pod にバージョン 1.22 のサイドカープロキシがインジェクトされているかどうかを確認します。
ローリングアップデート後、reviews-v2 の Pod は正常に起動し、新しい Pod にはバージョン 1.22 のサイドカープロキシがインジェクトされます。
手順 4:アップグレードの取り消し
ロールバックが成功した後、カナリアアップグレードを取り消して、ASM インスタンスを初期バージョンの 1.22 に戻すことができます。
アップグレードを取り消す前に、すべての名前空間に安定版のサイドカープロキシバージョンがインジェクトされていることを確認してください。そうでない場合、取り消しは失敗します。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
-
Upgrade Management ページで、Canary Upgrade タブで、Undo upgrade をクリックします。Confirm the cancellation of the upgrade? ダイアログボックスで、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 のサイドカープロキシに切り替える必要があり、アップグレードを取り消すことはできなくなります。New version deployment ステージ中にすべての検証を完了してください。
-
バージョンを昇格させると、ASM は
istio.io/rev: stableまたはistio-injection: enabledラベルを持つ名前空間に新しいバージョン 1.23 のサイドカープロキシをインジェクトします。istio.io/rev: canaryラベルはもはや有効ではありません。したがって、バージョンを昇格させるとき、ASM はすべてのistio.io/rev: canaryラベルを自動的にistio.io/rev: stableに変更します。Upgrade Management ページの Canary Upgrade タブで Version switching をクリックするときに、この変更を確認してください。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
-
Upgrade Management ページで、Canary Upgrade タブで、Update Version をクリックします。Confirm version switching? ダイアログボックスで、プロンプトをよく読み、OK をクリックします。
昇格後、バージョン 1.22 のサイドカープロキシを持つ既存のワークロードは影響を受けません。ただし、再デプロイされたすべての Pod にはバージョン 1.23 のサイドカープロキシがインジェクトされます。昇格が完了すると、ページが更新されます。
進捗バーに、プロセスが第 3 ステップの [バージョン切り替え] にあることが表示されます。現在のバージョンとカナリアバージョンの両方のステータスは [カナリアアップグレード中] です。ページには、バージョンの切り替えが成功したことが示されます。これで、データプレーンをアップグレードできます。この時点で、[データプレーンのアップグレード] をクリックして続行するか、[古いバージョンを非公開にする] をクリックしてアップグレードを完了できます。
手順 7:データプレーンのアップグレード
この時点で、ASM のバージョンは 1.23.6 です。istio.io/rev=stable、istio.io/rev=1-23-6、または istio-injection=enabled ラベルを持つ名前空間には、バージョン 1.23 のサイドカープロキシがインジェクトされます。ワークロードのローリングアップデートを実行して、インジェクトされたサイドカープロキシを新しいバージョン 1.23 にアップグレードすることで、データプレーンのアップグレードを完了できます。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
-
Upgrade Management ページで、Canary Upgrade タブで、Data plane タブをクリックして、必要に応じて ASM ゲートウェイまたはワークロードをアップグレードします。
-
ASM ゲートウェイのアップグレード:ASM Gateways セクションで、ターゲットゲートウェイを見つけます。Actions 列で、Rolling Upgrade をクリックします。Confirm to perform rolling upgrade? ダイアログボックスで、OK をクリックして、ASM ゲートウェイを新しいバージョン 1.23 にアップグレードします。
-
ワークロードのアップグレード:Workload to be upgraded セクションで、Namespace を選択します。ターゲットワークロードを見つけます。Actions 列で、Rolling Upgrade をクリックします。Confirm to perform rolling upgrade? ダイアログボックスで、OK をクリックして、ワークロードを新しいバージョン 1.23 にアップグレードします。
説明アップグレードされた ASM ゲートウェイまたはワークロードはリストに表示されません。
左側のナビゲーションウィンドウで Instances Status をクリックして、アップグレードされていないすべてのワークロードまたはゲートウェイインスタンスを表示することもできます。
-
手順 8:古いバージョンの非公開
すべてのデータプレーンワークロードをアップグレードした後、古いバージョン 1.22 を非公開にできます。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
-
Upgrade Management ページで、Canary Upgrade タブで、Offline old version をクリックします。Are you sure to offline the previous version of the Control Plane? ダイアログボックスで、OK をクリックします。