クラスタ内からマネージド正規サービス コントローラへの移行
注: 正規サービスは 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. クラスタ内正規サービス コントローラを無効にする
マネージド正規サービス コントローラは、クラスタ内正規サービス コントローラと併用できません。そのため、クラスタ内コントローラを無効にする必要があります。
クラスタ内コントローラを確認する: クラスタ内正規コントローラが存在するかどうかを確認します。
kubectl get deployment canonical-service-controller-manager -n asm-system
クラスタ内コントローラを削除する: デプロイが見つかった場合は、次のコマンドを実行して、デプロイ(および asm-system Namespace 全体)を削除できます。
kubectl delete namespace asm-system
3. マネージド正規コントローラが動作していることを確認する
マネージド正規サービス コントローラは、機能の状態でステータスを報告します。機能の状態を確認することで、インストールが正しく機能していることを確認できます。
機能の状態を確認する: 次のコマンドを使用して、機能の状態を取得します。
gcloud container fleet mesh describe --project FLEET_PROJECT_ID
ステータスを確認する: クラスタの状態を確認し、
state.code
がOK
であることを確認します。- 重要: 状態が
OK
に移行するまでに最大で 15 分かかることがあります。しばらく待ってからコマンドを再実行します。 state.code
がOK
の場合のみ、次の手順に進みます。- 15 分経っても
state.code
がOK
にならない場合は、マネージド正規サービス コントローラの問題を解決するでトラブルシューティングのガイダンスをご覧ください。
出力例:
membershipStates: projects/<project-number>/locations/<location>/memberships/<membership-name>: state: code: OK description: Revision(s) ready for use: istiod-asm-183-2.
- 重要: 状態が
マネージド正規サービス コントローラが機能していることを確認する: サイドカーが挿入された Pod をデプロイしてマネージド正規サービス コントローラが正しく機能していることを確認し、コントローラが対応する正規サービスを自動的に作成するかどうかを確認します。
自動サイドカー インジェクションが有効になっている Namespace を作成します。
kubectl create namespace NAMESPACE_NAME
自動サイドカー インジェクションを有効にするのセクションに沿って、新しく作成した Namespace で自動サイドカー インジェクションを有効にします。
次の内容で
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
ラベルは、正規サービスの名前を決定します。詳細については、正規サービスの定義をご覧ください。次のコマンドを使用して Pod をデプロイします。NAMESPACE_NAME は、自動サイドカー インジェクションを有効にした Namespace の名前に置き換えます。
kubectl apply -f simple_pod.yaml -n NAMESPACE_NAME
Pod が作成されたことを確認します。
kubectl get pods -n NAMESPACE_NAME
出力例:
NAME READY STATUS RESTARTS AGE simple-pod 2/2 Running 0 9s
Note
: [READY] 列に2/2
と表示されていることを確認します。これは、メインコンテナとサイドカー プロキシの両方が正常に実行されていることを示します。異なる値が表示された場合は、Namespace で自動サイドカー インジェクションが有効になっていない可能性があります。正規サービスの作成を確認する: 次のコマンドを実行して、Namespace 内のすべての正規サービスを一覧表示します。正規サービス
my-app
が作成されたことを確認します。kubectl get canonicalservices -n NAMESPACE_NAME
出力例:
NAME AGE my-app 3s
クリーンアップ: Pod、正規サービス、Namespace を削除します。
kubectl delete -f simple_pod.yaml -n NAMESPACE_NAME kubectl delete canonicalservices my-app -n NAMESPACE_NAME kubectl delete namespace NAMESPACE_NAME
トラブルシューティング:
- 必要な正規サービスが作成されていない場合は、Cloud Service Mesh での正規サービスの問題の解決をご覧ください。
- 問題が解決しない場合は、クラスタ内コントローラに戻すことができます。クラスタ内正規サービス コントローラに戻すをご覧ください。
クラスタ内正規サービス コントローラに戻す
マネージド正規サービス コントローラに問題が発生した場合は、次のコマンドを使用してクラスタ内コントローラを再インストールできます。
kubectl apply -f \
https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-packages/release-1.25/asm/canonical-service/controller.yaml
次のステップ
以下の内容について学習します。