クラスタ内からマネージド正規サービス コントローラへの移行

注: 正規サービスは Cloud Service Mesh バージョン 1.6.8 以降で自動的にサポートされます。

このガイドでは、クラスタ内正規サービス コントローラからマネージド正規サービス コントローラに移行する手順について説明します。

クラスタ内正規サービス コントローラは非推奨となっており、今後の更新はされません。クラスタ内コントローラの既存のデプロイは引き続き動作しますが、今後のリリースとの互換性を確保し、最新機能にアクセスして継続的にサポートを受けられるように、マネージド正規サービス コントローラに移行することを強くおすすめします。バージョン 1.25 以降の asmcli を使用したすべての Cloud Service Mesh インストールは、マネージド正規サービス コントローラでプロビジョニングされます。

1. Cloud Service Mesh のフリート機能を有効にする

マネージド正規サービス コントローラは、Cloud Service Mesh フリート機能の一部としてインストールされます。次のコマンドを使用してこの機能を有効にします。

  gcloud container fleet mesh enable --project FLEET_PROJECT_ID
  

FLEET_PROJECT_ID は、フリートホスト プロジェクトの ID に置き換えます。通常、FLEET_PROJECT_ID はプロジェクトと同じ名前になります。

複数のクラスタを登録する場合でも、Cloud Service Mesh の有効化はフリートレベルで行われるため、このコマンドを実行する必要があるのは 1 回だけです。

Cloud Service Mesh サービス アカウントに権限を付与する

クラスタのプロジェクトがフリートホスト プロジェクトと異なる場合は、フリート プロジェクトの Cloud Service Mesh サービス アカウントにクラスタ プロジェクトへのアクセスを許可する必要があります。

この手順は、クラスタ プロジェクトごとに 1 回だけ行う必要があります。以前に、このクラスタとフリート プロジェクトの組み合わせに対してマネージド Cloud Service Mesh を構成していた場合、これらの変更はすでに適用されているため、次のコマンドを実行する必要はありません。

フリート プロジェクトのサービス アカウントに、クラスタ プロジェクトにアクセスするための権限を付与します。

  gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \
    --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
    --role roles/anthosservicemesh.serviceAgent

CLUSTER_PROJECT_ID はクラスタのプロジェクト ID に、FLEET_PROJECT_NUMBER はフリートのプロジェクト番号に置き換えます。

フリートのプロジェクト番号を確認するには、Google Cloud プロジェクトのドキュメントの手順をご覧ください。

2. クラスタ内正規サービス コントローラを無効にする

マネージド正規サービス コントローラは、クラスタ内正規サービス コントローラと併用できません。そのため、クラスタ内コントローラを無効にする必要があります。

  1. クラスタ内コントローラを確認する: クラスタ内正規コントローラが存在するかどうかを確認します。

    kubectl get deployment canonical-service-controller-manager -n asm-system
    
  2. クラスタ内コントローラを削除する: デプロイが見つかった場合は、次のコマンドを実行して、デプロイ(および asm-system Namespace 全体)を削除できます。

    kubectl delete namespace asm-system
    

3. マネージド正規コントローラが動作していることを確認する

マネージド正規サービス コントローラは、機能の状態でステータスを報告します。機能の状態を確認することで、インストールが正しく機能していることを確認できます。

  1. 機能の状態を確認する: 次のコマンドを使用して、機能の状態を取得します。

    gcloud container fleet mesh describe --project FLEET_PROJECT_ID
    
  2. ステータスを確認する: クラスタの状態を確認し、state.codeOK であることを確認します。

    • 重要: 状態が OK に移行するまでに最大で 15 分かかることがあります。しばらく待ってからコマンドを再実行します。
    • state.codeOK の場合のみ、次の手順に進みます。
    • 15 分経っても state.codeOK にならない場合は、マネージド正規サービス コントローラの問題を解決するでトラブルシューティングのガイダンスをご覧ください。

    出力例:

    membershipStates:
        projects/<project-number>/locations/<location>/memberships/<membership-name>:
          state:
            code: OK
            description:
              Revision(s) ready for use: istiod-asm-183-2.
    
  3. マネージド正規サービス コントローラが機能していることを確認する: サイドカーが挿入された Pod をデプロイしてマネージド正規サービス コントローラが正しく機能していることを確認し、コントローラが対応する正規サービスを自動的に作成するかどうかを確認します。

    1. 自動サイドカー インジェクションが有効になっている Namespace を作成します。

      kubectl create namespace NAMESPACE_NAME
      

      自動サイドカー インジェクションを有効にするのセクションに沿って、新しく作成した Namespace で自動サイドカー インジェクションを有効にします。

    2. 次の内容で simple_pod.yaml という名前の YAML ファイルを作成します。

          apiVersion: v1
          kind: Pod
          metadata:
            name: simple-pod
            labels:
              app: my-app
          spec:
            containers:
            - name: my-container
              image: nginx:latest
              ports:
              - containerPort: 80
      

      app ラベルは、正規サービスの名前を決定します。詳細については、正規サービスの定義をご覧ください。

    3. 次のコマンドを使用して Pod をデプロイします。NAMESPACE_NAME は、自動サイドカー インジェクションを有効にした Namespace の名前に置き換えます。

      kubectl apply -f simple_pod.yaml -n NAMESPACE_NAME
      
    4. Pod が作成されたことを確認します。

      kubectl get pods -n NAMESPACE_NAME
      

      出力例:

      NAME                             READY   STATUS    RESTARTS   AGE
      simple-pod                       2/2     Running   0          9s
      

      Note: [READY] 列に 2/2 と表示されていることを確認します。これは、メインコンテナとサイドカー プロキシの両方が正常に実行されていることを示します。異なる値が表示された場合は、Namespace で自動サイドカー インジェクションが有効になっていない可能性があります。

    5. 正規サービスの作成を確認する: 次のコマンドを実行して、Namespace 内のすべての正規サービスを一覧表示します。正規サービス my-app が作成されたことを確認します。

      kubectl get canonicalservices -n NAMESPACE_NAME
      

      出力例:

        NAME          AGE
        my-app        3s
      
    6. クリーンアップ: Pod、正規サービス、Namespace を削除します。

      kubectl delete -f simple_pod.yaml -n NAMESPACE_NAME
      kubectl delete canonicalservices my-app -n NAMESPACE_NAME
      kubectl delete namespace NAMESPACE_NAME
      

    トラブルシューティング:

クラスタ内正規サービス コントローラに戻す

マネージド正規サービス コントローラに問題が発生した場合は、次のコマンドを使用してクラスタ内コントローラを再インストールできます。

  kubectl apply -f \
  https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-packages/release-1.25/asm/canonical-service/controller.yaml

次のステップ

以下の内容について学習します。