このページでは、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
- Management Center コンソールで、[ダッシュボード] メニューに移動します。
- [Upgrades] タブをクリックして、利用可能なすべてのアップグレードを表示します。
- アップグレードするクラスタの [View Upgrades] をクリックします。
- 利用可能なアップグレードのリストで、アップグレードする対象の Anthos Service Mesh バージョンを見つけて [アップグレード] をクリックし、Anthos Service Mesh のアップグレード ページを開きます。
- バージョン、説明、リリースノートへのリンクなど、対象のバージョンの情報を確認して、[続行] をクリックします。
- ポップアップ ダイアログで [アップグレード] をクリックして、ターゲット クラスタで Anthos Service Mesh の対象のバージョンのインストールを開始します。
- [サービス メッシュ] ページが開き、対象のバージョンがインストールされていることを確認できます。
API
管理クラスタで kubectl
コマンドを使用して以下の手順を行い、新しいバージョンの Anthos Service Mesh をインストールします。
新しいバージョン用に新しい
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
既存の
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
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_ID
とNEW_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 にワークロードを移行し、以前のバージョンをアンインストールする必要があります。
ワークロードの移行
ワークロードを移行するには、ユーザー クラスタで次の手順を行います。
以前のバージョンと新しいバージョンの Anthos Service Mesh のリビジョン ラベルを取得します。これらの値は次の手順で確認できます。
Console
- 管理センターのコンソールで、[Service Mesh] メニューに移動します。
- クラスタリストで、クラスタの [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 バージョンのサイドカー インジェクションをトリガーするために後で使用されます。リビジョン ラベルを名前空間に追加します。次のコマンドで、
REVISION
を新しい Anthos Service Mesh バージョンのリビジョン ラベルと一致する値に変更します。KUBECONFIG=USER_KUBECONFIG kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
ワークロードを再起動して再インジェクションをトリガーします。たとえば、名前空間内のすべてのデプロイを再起動する場合は、次のようにします。
KUBECONFIG=USER_KUBECONFIG kubectl rollout restart deployment -n NAMESPACE
Pod が新しいバージョンの
istiod
を指すように構成されていることを確認します。KUBECONFIG=USER_KUBECONFIG kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
アプリケーションをテストして、ワークロードが正しく機能していることを確認します。
他の名前空間にワークロードがある場合は、ステップ 2~5 を繰り返して名前空間にラベルを付け、ワークロードを再起動します。
以前のバージョンの Anthos Service Mesh を削除する
アプリケーションが想定どおりに動作している場合は、Management Center または API を使用して以前のバージョンの Anthos Service Mesh をアンインストールできます。
Console
- 管理センターのコンソールで、[Service Mesh] メニューに移動します。
- [Versions] 列で、以前の Anthos Service Mesh バージョンのリンクをクリックします。
- [Edit Service Mesh] ページで、[Remove Service Mesh] をクリックします。
- 削除前の信頼性チェックの結果がポップアップ ダイアログに表示されます。このダイアログには、名前空間と Pod の
istio.io/rev
ラベルをチェックして、以前のバージョンの Anthos Service Mesh に依存するすべての Namespace と Pod が一覧表示されます。チェックでこれらの依存関係のいずれかが見つかった場合、これらの Pod または名前空間を移行するまで続行できません。 - 信頼性チェックに合格したら、[Remove] をクリックして、ターゲット クラスタ上の Anthos Service Mesh のアンインストールを開始します。
削除リクエストを送信すると、[サービス メッシュ] ページが開き、以前のバージョンの Anthos Service Mesh が表示されなくなります。以前の Anthos Service Mesh リソースのアンインストールが完了するまで数分かかる場合があります。
API
以前のバージョンの Anthos Service Mesh を削除する前に、そのバージョンの Anthos Service Mesh に依存する Pod または名前空間がないことを確認してください。
次のコマンドを実行して、名前空間の依存関係を確認します。
KUBECONFIG=USER_KUBECONFIG kubectl get namespace -l istio.io/rev=PREVIOUS_REVISION
PREVIOUS_REVISION
は、以前の Anthos Service Mesh バージョンのリビジョン ラベルに置き換えます。次のコマンドを実行して、Pod の依存関係を確認します。
KUBECONFIG=USER_KUBECONFIG kubectl get pod -l istio.io/rev=PREVIOUS_REVISION --field-selector metadata.namespace!=istio-system --all-namespaces
クエリが空の結果を返す場合は、次のステップに進みます。 それ以外の場合は、続行する前にまずワークロードを移行します。
管理クラスタの
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
ServiceMeshBinding
が更新されると、以前のバージョンの Anthos Service Mesh バージョンの削除が開始されます。アンインストールの完了には数分かかることがあります。次のコマンドを実行して、以前のバージョンが削除されたことを確認します。KUBECONFIG=USER_KUBECONFIG kubectl get deployment -n istio-system -l istio.io/rev=PREVIOUS_REVISION
このコマンドは、アンインストールが完了すると空の結果を返します。