サービスメッシュ (ASM) では、ASM ゲートウェイのカナリアアップグレードを実行できます。これにより、スムーズなアップグレードエクスペリエンスが提供されます。このトピックでは、ASM ゲートウェイのカナリアアップグレードを実行する方法について説明します。この例では、インプレースアップグレードが使用されます。
前提条件
バージョン 1.20 以降の ASM インスタンスにコンテナサービス Kubernetes 版 (ACK) クラスタが追加されています。詳細については、「ASM インスタンスへのクラスタの追加」をご参照ください。ASM インスタンスの更新方法の詳細については、「ASM インスタンスの更新」をご参照ください。
イングレスゲートウェイがデプロイされています。詳細については、「イングレスゲートウェイの作成」をご参照ください。
背景情報
ASM ゲートウェイは、サービストラフィックのイングレスまたはエグレスを管理します。高可用性である必要があります。ASM ゲートウェイのアップグレード後にビジネスの継続性を確保するために、ASM ゲートウェイのカナリアアップグレードを実行できます。ゲートウェイ Pod の新しいバージョンを起動して、トラフィックが Pod から適切に転送されることを確認できます。その後、ASM ゲートウェイを完全にアップグレードできます。Pod からトラフィックが転送されるときに問題が発生した場合は、いつでも新しいバージョンの Pod を削除できます。問題が解決したら、アップグレードを続行できます。
ASM ゲートウェイのカナリアアップグレードは、ASM インスタンスのカナリアアップグレードとは異なります。ASM ゲートウェイのカナリアアップグレードは、対応する ASM インスタンスのインプレースアップグレードまたはカナリアアップグレードを実装するかどうかに関係なく使用できます。
ASM ゲートウェイのカナリアアップグレードの概要
ASM インスタンスの制御プレーンとデータプレーンのアップグレードは互いに独立しています。制御プレーンのアップグレードが完了した後、データプレーンをアップグレードできます。次のセクションでは、ASM ゲートウェイのカナリアアップグレードの仕組みについて説明します。
制御プレーンに対応するデータプレーン上に 1 つの Pod のみを提供するデプロイメントを作成します。このデプロイメントは、カナリアデプロイメントと呼ばれます。カナリアデプロイメントは、ASM ゲートウェイの元のデプロイメントと同じサービスに属します。違いは、カナリアデプロイメントの名前には -canary というサフィックスが付いていることです。
カナリアデプロイメントと同じ名前のデプロイメントが ASM ゲートウェイが存在する名前空間に存在する場合、そのデプロイメントは上書きされません。 ASM ゲートウェイのカナリアアップグレードを実行する前に、カナリアデプロイメントと同じ名前のデプロイメントが存在しないことを確認してください。 たとえば、ASM ゲートウェイ名が ingressgateway の場合、istio-system 名前空間に istio-ingressgateway-canary という名前のデプロイメントが存在しないことを確認してください。
ASM インスタンスのインプレースアップグレード
ASM インスタンスの制御プレーンがアップグレードされた後、ASM ゲートウェイは元のバージョンです。最初にカナリアデプロイメントを作成できます。カナリアデプロイメントの準備が完了すると、一部のトラフィックがカナリアデプロイメントによって作成された Pod に転送されます。トラフィックがカナリアデプロイメントによって作成された Pod に適切に転送されているかどうかを確認します。そうでない場合は、エラーログを保持し、カナリアデプロイメントを削除します。問題を解決し、トラフィック分散検証のためにカナリアデプロイメントを再デプロイします。トラフィックがカナリアデプロイメントによって作成された Pod に適切に転送できることを確認したら、ASM ゲートウェイを目的のバージョンにアップグレードします。
ASM インスタンスのカナリアアップグレード
ASM インスタンスのカナリアアップグレードを実行する場合、ASM ゲートウェイのカナリアアップグレードも実装できます。ASM インスタンスのカナリアアップグレード中に、新しいバージョンの制御プレーンがデフォルトで使用された後、ASM ゲートウェイはアップグレードされる状態になります。トラフィック分散検証のために、ASM ゲートウェイのカナリアデプロイメントをデプロイできます。トラフィックがカナリアデプロイメントによって作成された Pod に転送できることを確認したら、ASM ゲートウェイをアップグレードします。
ASM ゲートウェイが新しいバージョンにアップグレードされた後、設定を変更してデプロイされたカナリアデプロイメントを削除できます。
ステップ 1:制御プレーンをアップグレードする
アップグレード中にトラフィック損失のリスクを最小限に抑えるために、ASM ゲートウェイをアップグレードする前に、ASM ゲートウェイのグレースフルシャットダウン機能を有効にします。詳細については、「グレースフルシャットダウンを有効にしてトラフィック損失を防ぐ」をご参照ください。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[アップグレード管理] ページの [インプレースアップグレード] タブで、[アップグレードの事前チェックを実行] をクリックします。[注記] メッセージで、[OK] をクリックします。
説明ページに [現在、最新バージョンであるため、アップグレードする必要はありません] というメッセージが表示された場合、ASM インスタンスは最新バージョンであり、アップグレードできません。
アップグレードの事前チェックに合格したら、[アップグレード] をクリックします。[注記] メッセージで、[OK] をクリックします。
ステップ 2:ASM ゲートウェイのカナリアデプロイメントをデプロイする
アノテーションを追加して、カナリアデプロイメントをデプロイできます。
次のいずれかの方法を使用して、
asm.alibabacloud.com/enable-canary-deployment: "true"アノテーションを ASM ゲートウェイの YAML ファイルに追加して、カナリアデプロイメントをデプロイします。方法 1:ASM コンソールを使用する
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで、目的のイングレスゲートウェイを見つけ、[アクション] 列の [YAML] をクリックします。[編集] ダイアログボックスで、
metadataセクションのannotationsフィールドにasm.alibabacloud.com/enable-canary-deployment: "true"アノテーションを追加し、[OK] をクリックします。
方法 2:kubectl コマンドを実行する
次のコマンドを実行して、ASM ゲートウェイの YAML ファイルを開きます。
kubectl edit IstioGateway <YOUR-INGRESSGATEWAY-NAME> -n istio-system // ASM ゲートウェイのYAMLファイルを編集するために使用しますYAML ファイルを変更して、
metadataセクションのannotationsフィールドにasm.alibabacloud.com/enable-canary-deployment: "true"アノテーションを追加し、ファイルを保存します。 // アノテーションを追加します
kubeconfig ファイルの情報に基づいて kubectl を使用してデータプレーンに接続し、次のコマンドを実行してデプロイされたカナリアデプロイメントを表示します。
この例では、ASM ゲートウェイの名前は
ingressgatewayです。ご使用のゲートウェイの名前に置き換えてください。kubectl -n istio-system get deployment | grep ingressgateway // デプロイされたカナリアデプロイメントを表示するために使用します予期される出力:
istio-ingressgateway 1/1 1 1 10m istio-ingressgateway-canary 1/1 1 1 55s // カナリアデプロイメントが表示されます-canaryというサフィックスが付いたデプロイメントは、カナリアデプロイメントです。カナリアデプロイメントの準備が完了したら、カナリアデプロイメントによって作成された Pod に一部のトラフィックが流れているかどうかを確認します。例外が発生した場合は、ASM ゲートウェイログを保持し、追加されたアノテーションを削除します。カナリアデプロイメントは削除され、すべてのトラフィックは、-canary というサフィックスが付いていない名前の元のデプロイメントによって作成された Pod に流れます。問題が解決したら、トラフィック分散検証のためにカナリアデプロイメントを再デプロイします。
ステップ 3:トラフィック分散検証に合格したら ASM ゲートウェイをアップグレードする
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[データプレーン] セクションの [アップグレード] 列で、アップグレードする ASM ゲートウェイを選択し、[ゲートウェイのアップグレード] をクリックします。[注記] メッセージで、[OK] をクリックします。
ステップ 4:カナリアデプロイメントを削除する
ASM ゲートウェイがアップグレードされた後、ステップ 2 で追加されたアノテーションを削除します。カナリアデプロイメントは自動的に削除されます。
カナリアデプロイメントのバージョンは常に制御プレーンのバージョンと同じです。カナリアデプロイメントを削除しないと、次回制御プレーンをアップグレードするときにカナリアデプロイメントも同時にアップグレードされます。