すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:ASM ゲートウェイのカナリアアップグレードを実行する

最終更新日:Jan 14, 2025

サービスメッシュ (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 ゲートウェイのグレースフルシャットダウン機能を有効にします。詳細については、「グレースフルシャットダウンを有効にしてトラフィック損失を防ぐ」をご参照ください。

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM インスタンス] > [アップグレード管理] を選択します。

  3. [アップグレード管理] ページの [インプレースアップグレード] タブで、[アップグレードの事前チェックを実行] をクリックします。[注記] メッセージで、[OK] をクリックします。

    説明

    ページに [現在、最新バージョンであるため、アップグレードする必要はありません] というメッセージが表示された場合、ASM インスタンスは最新バージョンであり、アップグレードできません。

  4. アップグレードの事前チェックに合格したら、[アップグレード] をクリックします。[注記] メッセージで、[OK] をクリックします。

ステップ 2:ASM ゲートウェイのカナリアデプロイメントをデプロイする

アノテーションを追加して、カナリアデプロイメントをデプロイできます。

  1. 次のいずれかの方法を使用して、asm.alibabacloud.com/enable-canary-deployment: "true" アノテーションを ASM ゲートウェイの YAML ファイルに追加して、カナリアデプロイメントをデプロイします。

    方法 1:ASM コンソールを使用する

    1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

    2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

    3. [イングレスゲートウェイ] ページで、目的のイングレスゲートウェイを見つけ、[アクション] 列の [YAML] をクリックします。[編集] ダイアログボックスで、metadata セクションの annotations フィールドに asm.alibabacloud.com/enable-canary-deployment: "true" アノテーションを追加し、[OK] をクリックします。

    方法 2:kubectl コマンドを実行する

    1. 次のコマンドを実行して、ASM ゲートウェイの YAML ファイルを開きます。

      kubectl edit IstioGateway <YOUR-INGRESSGATEWAY-NAME> -n istio-system
      // ASM ゲートウェイのYAMLファイルを編集するために使用します
    2. YAML ファイルを変更して、metadata セクションの annotations フィールドに asm.alibabacloud.com/enable-canary-deployment: "true" アノテーションを追加し、ファイルを保存します。 // アノテーションを追加します

    アノテーションが追加された YAML コードのサンプルを表示する

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      labels:
        asm-gateway-type: ingress
      annotations:
        asm.alibabacloud.com/enable-canary-deployment: "true" # Add this annotation. // このアノテーションを追加します
      name: ingressgateway
      namespace: istio-system
    spec:
      clusterIds:
        - xxxxxxxxxxxxxx
      disableContainerPortExposed: true
      dnsPolicy: ClusterFirst
      externalTrafficPolicy: Local
      gatewayType: ingress
      ports:
        - name: http-0
          port: 80
          protocol: HTTP
          targetPort: 80
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 4G
        requests:
          cpu: 200m
          memory: 256Mi
      rollingMaxSurge: 25%
      rollingMaxUnavailable: 25%
      serviceAnnotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: 'on'
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: '10'
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCU
        service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
      serviceType: LoadBalancer
  2. 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 ゲートウェイをアップグレードする

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM インスタンス] > [アップグレード管理] を選択します。

  3. [データプレーン] セクションの [アップグレード] 列で、アップグレードする ASM ゲートウェイを選択し、[ゲートウェイのアップグレード] をクリックします。[注記] メッセージで、[OK] をクリックします。

ステップ 4:カナリアデプロイメントを削除する

ASM ゲートウェイがアップグレードされた後、ステップ 2 で追加されたアノテーションを削除します。カナリアデプロイメントは自動的に削除されます。

重要

カナリアデプロイメントのバージョンは常に制御プレーンのバージョンと同じです。カナリアデプロイメントを削除しないと、次回制御プレーンをアップグレードするときにカナリアデプロイメントも同時にアップグレードされます。