Anthos Service Mesh の更新

このページでは、Anthos Service Mesh をアップグレードする方法について説明します。

プラットフォーム管理者は Anthos Service Mesh をアップグレードできます。Anthos Service Mesh のアップグレードはリビジョン ベースのカナリア アップグレードです。このアップグレードは、ワークロードの割合を少なくして新しいバージョンのテストを行うときに、コントロール プレーンの新しいバージョンと以前のバージョンの両方が実行されているものです。このアプローチはインプレース アップグレードよりも安全です。インプレース アップグレードでは、コントロール プレーンの新しいバージョンが以前のバージョンに置き換わります。

Anthos Service Mesh のコントロール プレーン コンポーネントのデプロイには 5~10 分ほどかかります。また、すべてのワークロードに新しいサイドカー プロキシを挿入し、現在の Anthos Service Mesh バージョンで更新されるようにする必要があります。サイドカー プロキシの更新に要する時間は、1 分あたり約 100 Pod であることが考えられますが、これは Pod 数、ノード数、デプロイのスケーリング設定、Pod 中断のコスト、その他の構成設定など、さまざまな要因に左右されます。

前提条件

アップグレードする前に、次の条件を満たしていることを確認してください。

  • 管理クラスタによって管理されるターゲット ユーザー クラスタがある。
  • ターゲット ユーザー クラスタに、アップグレード可能な Anthos Service Mesh インストールがすでにある。

既存のインストールを表示する

Anthos Service Mesh がクラスタにインストールされていることを確認します。

Console

管理センターのコンソールで、[サービス メッシュ] メニューに移動し、Anthos Service Mesh がインストールされているクラスタのリストを表示します。

API

現在の Anthos Service Mesh のインストールを説明する管理クラスタには、次のカスタム リソースがあります。

  • ServiceMeshFeatureSpec オブジェクトをユーザー クラスタの ID にバインドする ServiceMeshBinding オブジェクト。次のコマンドを実行して、オブジェクトを見つけます。このコマンドで複数のオブジェクトが返される可能性があるため、仕様にはターゲット クラスタの ID が設定されているオブジェクトを見つける必要があります。

    KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center
    

    オブジェクトのコンテンツの例を次に示します。

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshBinding
    metadata:
     name: service-mesh-binding-sample
     namespace: anthos-management-center
    spec:
     configs:
     - configRef:
         name: PREVIOUS_SERVICE_MESH_SPEC
         namespace: anthos-management-center
       placement:
         clusterIDs:
         - TARGET_CLUSTER_ID
    
  • Anthos Service Mesh のインストール仕様を定義する ServiceMeshFeatureSpec オブジェクト名前空間と名前は、前の例で説明した ServiceMeshBinding オブジェクトの config.configRef フィールドで参照されます。 次のコマンドを実行して、オブジェクトを表示します。

    KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshfeaturespec PREVIOUS_SERVICE_MESH_SPEC -n anthos-management-center -o yaml
    

    オブジェクトのコンテンツの例を次に示します。

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshFeatureSpec
    metadata:
     name:PREVIOUS_SERVICE_MESH_SPEC
     namespace: anthos-management-center
    spec:
     version: 1.7.3-asm.6
    

新しいバージョンの Anthos Service Mesh をインストール

新しいバージョンの Anthos Service Mesh に更新するには、Management Center コンソールまたは API を使用します。

Console

  1. Management Center コンソールで、[ダッシュボード] メニューに移動します。
  2. [Upgrades] タブをクリックして、利用可能なすべてのアップグレードを表示します。
  3. アップグレードするクラスタの [View Upgrades] をクリックします。
  4. 利用可能なアップグレードのリストで、アップグレードする対象の Anthos Service Mesh バージョンを見つけて [アップグレード] をクリックし、Anthos Service Mesh のアップグレード ページを開きます。利用可能なアップグレードのページ
  5. バージョン、説明、リリースノートへのリンクなど、対象のバージョンの情報を確認して、[続行] をクリックします。
  6. ポップアップ ダイアログで [アップグレード] をクリックして、ターゲット クラスタで Anthos Service Mesh の対象のバージョンのインストールを開始します。
  7. [サービス メッシュ] ページが開き、対象のバージョンがインストールされていることを確認できます。

API

管理クラスタで kubectl コマンドを使用して以下の手順を行い、新しいバージョンの Anthos Service Mesh をインストールします。

  1. 新しいバージョン用に新しい ServiceMeshFeatureSpec オブジェクトを作成します。バージョン 1.8.3-asm.2 のサンプル オブジェクトを次に示します。

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshFeatureSpec
    metadata:
     name: NEW_SERVICE_MESH_SPEC
     namespace: anthos-management-center
    spec:
     version: 1.8.3-asm.2
    
  2. 既存の ServiceMeshBinding オブジェクトを更新して新しいエントリを挿入し、新しい ServiceMeshFeatureSpec をクラスタにバインドします。

     apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
     kind: ServiceMeshBinding
     metadata:
      name: service-mesh-binding-sample
      namespace: anthos-management-center
     spec:
      configs:
      - configRef:
          name: PREVIOUS_SERVICE_MESH_SPEC
          namespace: anthos-management-center
        placement:
          clusterIDs:
          - TARGET_CLUSTER_ID
      - configRef:
          name: NEW_SERVICE_MESH_SPEC
          namespace: anthos-management-center
        placement:
          clusterIDs:
          - TARGET_CLUSTER_ID
    
  3. Anthos Service Mesh の新しいバージョンが管理クラスタにインストールされます。次のコマンドを使用して、インストールの準備ができているかどうかを確認できます。

     KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center -o jsonpath="{range .items[*].status.bindingItemStatuses[*]}{'\n'}{['clusterID', 'configRef', 'conditions']}" | grep NEW_SERVICE_MESH_SPEC | grep TARGET_CLUSTER_ID
    

    TARGET_CLUSTER_IDNEW_SERVICE_MESH_SPEC は、ServiceMeshBinding オブジェクトで構成された値に置き換えます。

    出力例を次に示します。

    target-user-cluster-1 {"name":"new-spec-q64x7","namespace":"anthos-management-center"} [{"lastTransitionTime":"2021-05-27T18:06:27Z","message":"","observedGeneration":1,"reason":"Healthy","status":"True","type":"Ready"}]
    

    Ready 条件の status: true は、インストールが完了したことを示します。

以前のバージョンの Anthos Service Mesh は自動的には削除されません。手動で新しいバージョンの Anthos Service Mesh にワークロードを移行し、以前のバージョンをアンインストールする必要があります。

ワークロードの移行

ワークロードを移行するには、ユーザー クラスタで次の手順を行います。 

  1. 以前のバージョンと新しいバージョンの Anthos Service Mesh のリビジョン ラベルを取得します。これらの値は次の手順で確認できます。

    Console

    1. 管理センターのコンソールで、[Service Mesh] メニューに移動します。
    2. クラスタリストで、クラスタの [Revision] 列からリビジョン ラベルを見つけます。

    API

    次のコマンドを実行します。

     KUBECONFIG=USER_KUBECONFIG kubectl get pod -n istio-system -l app=istiod -L istio.io/rev
    

    出力例を次に示します。

    NAME                                READY   STATUS    RESTARTS   AGE   REV
    istiod-asm-173-6-756d989c58-p84b9   1/1     Running   0          13h   asm-173-6
    istiod-asm-173-6-756d989c58-t6vh8   1/1     Running   0          13h   asm-173-6
    istiod-asm-183-2-76f64c6bc7-2qnxq   1/1     Running   0          17h   asm-183-2
    istiod-asm-183-2-76f64c6bc7-8nrpz   1/1     Running   0          17h   asm-183-2
    

    出力では、リビジョン ラベルが REV 列の下に表示されます。この例での値は asm-183-2 です。このラベルは、新しい Anthos Service Mesh バージョンのサイドカー インジェクションをトリガーするために後で使用されます。

  2. リビジョン ラベルを名前空間に追加します。次のコマンドで、REVISION を新しい Anthos Service Mesh バージョンのリビジョン ラベルと一致する値に変更します。

    KUBECONFIG=USER_KUBECONFIG kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
    
  3. ワークロードを再起動して再インジェクションをトリガーします。たとえば、名前空間内のすべてのデプロイを再起動する場合は、次のようにします。

    KUBECONFIG=USER_KUBECONFIG kubectl rollout restart deployment -n NAMESPACE
    
  4. Pod が新しいバージョンの istiod を指すように構成されていることを確認します。

    KUBECONFIG=USER_KUBECONFIG kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    
  5. アプリケーションをテストして、ワークロードが正しく機能していることを確認します。

  6. 他の名前空間にワークロードがある場合は、ステップ 2~5 を繰り返して名前空間にラベルを付け、ワークロードを再起動します。

以前のバージョンの Anthos Service Mesh を削除する

アプリケーションが想定どおりに動作している場合は、Management Center または API を使用して以前のバージョンの Anthos Service Mesh をアンインストールできます。

Console

  1. 管理センターのコンソールで、[Service Mesh] メニューに移動します。
  2. [Versions] 列で、以前の Anthos Service Mesh バージョンのリンクをクリックします。
  3. [Edit Service Mesh] ページで、[Remove Service Mesh] をクリックします。
  4. 削除前の信頼性チェックの結果がポップアップ ダイアログに表示されます。このダイアログには、名前空間と Pod の istio.io/rev ラベルをチェックして、以前のバージョンの Anthos Service Mesh に依存するすべての Namespace と Pod が一覧表示されます。チェックでこれらの依存関係のいずれかが見つかった場合、これらの Pod または名前空間を移行するまで続行できません。
  5. 信頼性チェックに合格したら、[Remove] をクリックして、ターゲット クラスタ上の Anthos Service Mesh のアンインストールを開始します。

削除リクエストを送信すると、[サービス メッシュ] ページが開き、以前のバージョンの Anthos Service Mesh が表示されなくなります。以前の Anthos Service Mesh リソースのアンインストールが完了するまで数分かかる場合があります。

API

  1. 以前のバージョンの Anthos Service Mesh を削除する前に、そのバージョンの Anthos Service Mesh に依存する Pod または名前空間がないことを確認してください。

    1. 次のコマンドを実行して、名前空間の依存関係を確認します。

      KUBECONFIG=USER_KUBECONFIG kubectl get namespace -l istio.io/rev=PREVIOUS_REVISION  
      

      PREVIOUS_REVISION は、以前の Anthos Service Mesh バージョンのリビジョン ラベルに置き換えます。

    2. 次のコマンドを実行して、Pod の依存関係を確認します。

      KUBECONFIG=USER_KUBECONFIG kubectl get pod -l istio.io/rev=PREVIOUS_REVISION --field-selector metadata.namespace!=istio-system --all-namespaces
      

    クエリが空の結果を返す場合は、次のステップに進みます。 それ以外の場合は、続行する前にまずワークロードを移行します。

  2. 管理クラスタの ServiceMeshBinding オブジェクトを更新し、以前の機能仕様をターゲット クラスタからバインド解除します。PREVIOUS_SERVICE_MESH_SPEC エントリを削除した後の ServiceMeshBinding オブジェクトの例を次に示します。

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshBinding
    metadata:
     name: service-mesh-binding-sample
     namespace: anthos-management-center
    spec:
     configs:
     - configRef:
         name: NEW_SERVICE_MESH_SPEC
         namespace: anthos-management-center
       placement:
         clusterIDs:
         -  TARGET_CLUSTER_ID
    
  3. ServiceMeshBinding が更新されると、以前のバージョンの Anthos Service Mesh バージョンの削除が開始されます。アンインストールの完了には数分かかることがあります。次のコマンドを実行して、以前のバージョンが削除されたことを確認します。

    KUBECONFIG=USER_KUBECONFIG kubectl get deployment -n istio-system -l istio.io/rev=PREVIOUS_REVISION
    

    このコマンドは、アンインストールが完了すると空の結果を返します。