Cloud Service Mesh をアップグレードする
このページでは、次の作業の方法を説明します。
asmcliを実行して、Cloud Service Mesh から Cloud Service Mesh1.27.1にアップグレードする。必要に応じて、Ingress ゲートウェイをデプロイする。
カナリア アップグレードを実行して、ワークロードを新しいコントロール プレーンに移行する。
アップグレード可能な Cloud Service Mesh のバージョンは、プラットフォームによって異なります。
GKE
Google Kubernetes Engine の Cloud Service Mesh 1.27.1-asm.5 には、次のバージョンから直接アップグレードできます。
1.25+
オンプレミス
次のバージョンから、Google Distributed Cloud の Cloud Service Mesh 1.27.1-asm.5 と、Google Distributed Cloud に直接アップグレードできます。
1.25+
GKE on AWS
次のバージョンから、GKE on AWS の Cloud Service Mesh 1.27.1-asm.5 に直接アップグレードできます。
1.25+
GKE on Azure
GKE on Azure は Cloud Service Mesh 1.16 のみをサポートします。以前のバージョンの Cloud Service Mesh からのアップグレードはサポートされていません。
Amazon EKS
EKS に Cloud Service Mesh 1.7 がインストールされている場合は、新しいクラスタに Cloud Service Mesh 1.27をインストールする必要があります。Cloud Service Mesh 1.7 から Cloud Service Mesh1.27 へのアップグレードはサポートされていません。
Microsoft AKS
AKS に Cloud Service Mesh 1.7 がインストールされている場合は、新しいクラスタに Cloud Service Mesh 1.27をインストールする必要があります。Cloud Service Mesh 1.7 から Cloud Service Mesh1.27 へのアップグレードはサポートされていません。
始める前に
始める前に、次のことを行ってください。
- 前提条件を確認する。
- アップグレードの計画を確認する。
- 必要なツールをインストールする。
asmcliをダウンロードする。- クラスタ管理者の権限を付与する。
- プロジェクトとクラスタを検証する。
コントロール プレーンのカスタマイズ
以前のインストールをカスタマイズした場合は、Cloud Service Mesh バージョンにアップグレードするか、Istio から移行する際に、同じカスタマイズを行う必要があります。--set values フラグを istioctl install に追加してインストールをカスタマイズした場合は、それらの設定をオーバーレイ ファイルと呼ばれる IstioOperator YAML ファイルに追加する必要があります。オーバーレイ ファイルを指定するには、スクリプトの実行時にファイル名で --custom_overlay オプションを使用します。このスクリプトは、オーバーレイ ファイルを istioctl install に渡します。
認証局
アップグレード中に認証局(CA)が変更されると、ダウンタイムが発生します。アップグレード中は、すべてのワークロードが新しい CA で新しいコントロール プレーンを使用するように切り替わるまで、mTLS トラフィックが中断されます。
Anthos Service Mesh をアップグレードする
Cloud Service Mesh のアップグレード方法の概要は次のとおりです。
Cloud Service Mesh 認証局を使用する GKE でマルチクラスタ メッシュをアップグレードする場合は、
asmcli create-meshを実行して、フリートの Workload Identity を信頼し、アップグレード中にクラスタ間でロード バランシングが停止しないように、マルチクラスタを構成します。asmcli installを実行して、単一クラスタに Cloud Service Mesh をインストールします。コマンドラインの例については、以降のセクションをご覧ください。これらの例には、必須の引数とオプション引数の両方が含まれています。サンプルのゲートウェイやツール(istioctlなど)を簡単に見つけられるように、必ずoutput_dir引数を指定することをおすすめします。例の一覧については、右側のナビゲーション バーをご覧ください。必要に応じて、Ingress ゲートウェイをインストールまたはアップグレードします。デフォルトでは、
asmcliはistio-ingressgatewayをインストールしません。コントロール プレーンとゲートウェイを個別にデプロイして管理することをおすすめします。クラスタ内コントロール プレーンにデフォルトのistio-ingressgatewayをインストールする必要がある場合は、--option legacy-default-ingressgateway引数を指定します。Cloud Service Mesh の設定を完了するには、自動サイドカー インジェクションを有効にして、ワークロードをデプロイまたは再デプロイする必要があります。
フリートの Workload Identity を信頼するようにマルチクラスタ メッシュを構成する
Cloud Service Mesh 認証局を認証局として使用する GKE でマルチクラスタ メッシュをアップグレードする場合は、各クラスタをアップグレードする前に asmcli create-mesh を実行する必要があります。このコマンドは、アップグレード後にフリートの Workload Identity プール FLEET_PROJECT_ID.svc.id.goog を信頼ドメインとして使用するように Cloud Service Mesh 認証局を構成します。asmcli create-mesh コマンド:
- すべてのクラスタを同じフリートに登録します。
- フリート Workload Identity を信頼するようにメッシュを構成します。
- リモート シークレットを作成します。
各クラスタの URI または kubeconfig ファイルのパスを指定できます。
クラスタ URI
次のコマンドで、FLEET_PROJECT_ID をフリート ホスト プロジェクトのプロジェクト ID に置き換え、クラスタ URI を各クラスタのクラスタ名、ゾーンまたはリージョン、プロジェクト ID に置き換えます。
./asmcli create-mesh \
FLEET_PROJECT_ID \
PROJECT_ID_1/CLUSTER_LOCATION_1/CLUSTER_NAME_1 \
PROJECT_ID_2/CLUSTER_LOCATION_2/CLUSTER_NAME_2 # \
# Add a line for each cluster in the mesh
kubeconfig ファイル
次のコマンドで、FLEET_PROJECT_ID をフリート ホスト プロジェクトのプロジェクト ID に、PATH_TO_KUBECONFIG を各 kubeconfig へのパスに置き換えます。
./asmcli create-mesh \
FLEET_PROJECT_ID \
PATH_TO_KUBECONFIG_1 \
PATH_TO_KUBECONFIG_2 # \
# Add a line for each cluster in the mesh
デフォルトの機能と Mesh CA を使用してアップグレードする
このセクションでは、asmcli を実行して、プラットフォームのデフォルトのサポートされている機能を使用して Cloud Service Mesh をアップグレードし、認証局として Cloud Service Mesh 認証局を有効にする方法について説明します。
GKE
次のコマンドを実行して、デフォルト機能と Cloud Service Mesh 認証局を備えたコントロール プレーンをアップグレードします。プレースホルダに値を入力します。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca
--project_id、--cluster_name、--cluster_location: クラスタが属するプロジェクト ID、クラスタ名、クラスタゾーンまたはリージョンを指定します。--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。このオプションを指定しない場合、asmcliは、クラスタ登録時にクラスタが作成されたプロジェクトを使用します。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca mesh_ca: 認証局として Cloud Service Mesh 認証局を使用します。アップグレード中に認証局を変更すると、ダウンタイムが発生します。asmcliは、フリートの Workload Identity を使用するように Cloud Service Mesh 認証局を構成します。
他の GKE Enterprise クラスタ
他の GKE Enterprise クラスタで次のコマンドを実行して、デフォルトの機能と Cloud Service Mesh 認証局を備えたコントロール プレーンをアップグレードします。プレースホルダに値を入力します。
現在のコンテキストをユーザー クラスタに設定します。
kubectl config use-context CLUSTER_NAMEasmcli installを実行します。./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca mesh_ca--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。--kubeconfig:kubeconfigファイルのフルパス。環境変数$PWDはここでは機能しません。また、kubeconfigファイルの相対的な場所(「~」を使用した相対名)も機能しません。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--platform multicloud: プラットフォームがオンプレミスやマルチクラウドなど、 Google Cloud以外のものであることを指定します。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca mesh_ca: 認証局として Cloud Service Mesh 認証局を使用します。アップグレード中に認証局を変更すると、ダウンタイムが発生します。asmcliは、フリートの Workload Identity を使用するように Cloud Service Mesh 認証局を構成します。
CA Service とデフォルト機能をアップグレードする
このセクションでは、asmcli を実行して、プラットフォームのデフォルトのサポート機能を使用して Cloud Service Mesh をアップグレードし、Certificate Authority Service を有効にする方法について説明します。
GKE
次のコマンドを実行して、デフォルト機能と Certificate Authority Service を備えたコントロール プレーンをアップグレードします。プレースホルダに値を入力します。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca gcp_cas \
--ca_pool projects/PROJECT_NAME/locations/ca_region/caPools/CA_POOL
--project_id、--cluster_name、--cluster_location: クラスタが属するプロジェクト ID、クラスタ名、クラスタゾーンまたはリージョンを指定します。--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。このオプションを指定しない場合、asmcliは、クラスタ登録時にクラスタが作成されたプロジェクトを使用します。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca gcp_cas認証局として Certificate Authority Service を使用します。アップグレード中に認証局を変更すると、ダウンタイムが発生します。asmcliは、フリートの Workload Identity を使用するように Certificate Authority Service を構成します。--ca_pool: Certificate Authority Service の CA プールの完全な識別子。
オンプレミス
Google Distributed Cloud または Google Distributed Cloud で次のコマンドを実行して、デフォルトの機能と Certificate Authority Service を備えたコントロール プレーンをアップグレードします。プレースホルダに値を入力します。
現在のコンテキストをユーザー クラスタに設定します。
kubectl config use-context CLUSTER_NAMEasmcli installを実行します。./asmcli install \ --kubeconfig KUBECONFIG_FILE \ --fleet_id FLEET_PROJECT_ID \ --output_dir DIR_PATH \ --enable_all \ --ca gcp_cas \ --platform multicloud \ --ca_pool projects/PROJECT_NAME/locations/ca_region/caPools/CA_POOL--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。--kubeconfig:kubeconfigファイルのフルパス。環境変数$PWDはここでは機能しません。また、kubeconfigファイルの相対的な場所(「~」を使用した相対名)も機能しません。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--platform multicloud: プラットフォームがオンプレミスやマルチクラウドなど、 Google Cloud以外のものであることを指定します。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca gcp_cas認証局として Certificate Authority Service を使用します。アップグレード中に認証局を変更すると、ダウンタイムが発生します。asmcliは、フリートの Workload Identity を使用するように Certificate Authority Service を構成します。--ca_pool: Certificate Authority Service の CA プールの完全な識別子。
Istio CA を使用するデフォルト機能をアップグレードする
このセクションでは、asmcli を実行して、プラットフォームのデフォルトのサポート機能を使用して Cloud Service Mesh をアップグレードし、Istio CA を有効にする方法について説明します。
GKE
次のコマンドを実行して、デフォルトの機能と Istio CA を備えたコントロール プレーンをアップグレードします。プレースホルダに値を入力します。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca citadel
--project_id、--cluster_name、--cluster_location: クラスタが属するプロジェクト ID、クラスタ名、クラスタゾーンまたはリージョンを指定します。--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。このオプションを指定しない場合、asmcliは、クラスタ登録時にクラスタが作成されたプロジェクトを使用します。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca citadel: Istio CA を使用します。アップグレード中に認証局を変更すると、ダウンタイムが発生します。
オンプレミス
Google Distributed Cloud または Google Distributed Cloud で次のコマンドを実行して、デフォルトの機能と Istio CA を備えたコントロール プレーンをアップグレードします。プレースホルダに値を入力します。
現在のコンテキストをユーザー クラスタに設定します。
kubectl config use-context CLUSTER_NAMEasmcli installを実行します。./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。--kubeconfig:kubeconfigファイルのフルパス。環境変数$PWDはここでは機能しません。また、kubeconfigファイルの相対的な場所(「~」を使用した相対名)も機能しません。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--platform multicloud: プラットフォームがオンプレミスやマルチクラウドなど、 Google Cloud以外のものであることを指定します。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca citadel: 認証局として Istio CA を使用します。--ca_cert: 中間証明書--ca_key: 中間証明書の鍵--root_cert: ルート証明書--cert_chain: 証明書チェーン
AWS
GKE on AWS で次のコマンドを実行して、デフォルトの機能と Istio CA を備えたコントロール プレーンをアップグレードします。プレースホルダに値を入力します。公開サブネットまたは非公開サブネットで Ingress を有効にすることもできます。
公開
現在のコンテキストをユーザー クラスタに設定します。
kubectl config use-context CLUSTER_NAMEasmcli installを実行します。./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。--kubeconfig:kubeconfigファイルのフルパス。環境変数$PWDはここでは機能しません。また、kubeconfigファイルの相対的な場所(「~」を使用した相対名)も機能しません。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--platform multicloud: プラットフォームがオンプレミスやマルチクラウドなど、 Google Cloud以外のものであることを指定します。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca citadel: 認証局として Istio CA を使用します。--ca_cert: 中間証明書--ca_key: 中間証明書の鍵--root_cert: ルート証明書--cert_chain: 証明書チェーン
非公開
現在のコンテキストをユーザー クラスタに設定します。
kubectl config use-context CLUSTER_NAME次の YAML を
istio-operator-internal-lb.yamlというファイルに保存します。apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - enabled: true k8s: serviceAnnotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" name: istio-ingressgatewayasmcli installを実行します。./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH --custom_overlay istio-operator-internal-lb.yaml--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。--kubeconfig:kubeconfigファイルのフルパス。環境変数$PWDはここでは機能しません。また、kubeconfigファイルの相対的な場所(「~」を使用した相対名)も機能しません。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--platform multicloud: プラットフォームがオンプレミスやマルチクラウドなど、 Google Cloud以外のものであることを指定します。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca citadel: 認証局として Istio CA を使用します。--ca_cert: 中間証明書--ca_key: 中間証明書の鍵--root_cert: ルート証明書--cert_chain: 証明書チェーン
Amazon EKS
Amazon EKS で次のコマンドを実行して、デフォルトの機能と Istio CA を備えたコントロール プレーンをアップグレードします。プレースホルダに値を入力します。
現在のコンテキストをユーザー クラスタに設定します。
kubectl config use-context CLUSTER_NAMEasmcli installを実行します。./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。--kubeconfig:kubeconfigファイルのフルパス。環境変数$PWDはここでは機能しません。また、kubeconfigファイルの相対的な場所(「~」を使用した相対名)も機能しません。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--platform multicloud: プラットフォームがオンプレミスやマルチクラウドなど、 Google Cloud以外のものであることを指定します。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca citadel: 認証局として Istio CA を使用します。--ca_cert: 中間証明書--ca_key: 中間証明書の鍵--root_cert: ルート証明書--cert_chain: 証明書チェーン
Microsoft AKS
Amazon EKS で次のコマンドを実行して、デフォルトの機能と Istio CA を備えたコントロール プレーンをアップグレードします。プレースホルダに値を入力します。
現在のコンテキストをユーザー クラスタに設定します。
kubectl config use-context CLUSTER_NAMEasmcli installを実行します。HUB_REGISTRATION_EXTRA_FLAGS=--has-private-issuer ./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。--kubeconfig:kubeconfigファイルのフルパス。環境変数$PWDはここでは機能しません。また、kubeconfigファイルの相対的な場所(「~」を使用した相対名)も機能しません。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--platform multicloud: プラットフォームがオンプレミスやマルチクラウドなど、 Google Cloud以外のものであることを指定します。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca citadel: 認証局として Istio CA を使用します。--ca_cert: 中間証明書--ca_key: 中間証明書の鍵--root_cert: ルート証明書--cert_chain: 証明書チェーン
オプション機能を使用してアップグレードする
オーバーレイ ファイルは IstioOperator カスタム リソース(CR)を含む YAML ファイルです。asmcli に渡してコントロール プレーンを構成します。YAML ファイルを asmcli に渡すことで、デフォルトのコントロール プレーン構成をオーバーライドし、オプション機能を有効にできます。複数のオーバーレイを重ねることができます。各オーバーレイ ファイルは、以前のレイヤの構成をオーバーライドします。
GKE
次のコマンドを実行して、オプション機能を備えたコントロール プレーンをインストールします。複数のファイルを追加するには、--custom_overlay とファイル名を指定します(例: --custom_overlayoverlay_file1.yaml
--custom_overlay overlay_file2.yaml --custom_overlay overlay_file3.yaml)。指定されたプレースホルダに値を入力します。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca \
--custom_overlay OVERLAY_FILE
--project_id、--cluster_name、--cluster_location: クラスタが属するプロジェクト ID、クラスタ名、クラスタゾーンまたはリージョンを指定します。--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。このオプションを指定しない場合、asmcliは、クラスタ登録時にクラスタが作成されたプロジェクトを使用します。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca mesh_ca: 認証局として Cloud Service Mesh 認証局を使用します。アップグレード中に認証局を変更すると、ダウンタイムが発生します。asmcliは、フリートの Workload Identity を使用するように Cloud Service Mesh 認証局を構成します。--custom_overlay: オーバーレイ ファイルの名前を指定します。
Google Cloud 以外
Google Distributed Cloud、Google Distributed Cloud、GKE on AWS、Amazon EKS、または Microsoft AKS で次のコマンドを実行します。プレースホルダに値を入力します。
現在のコンテキストをユーザー クラスタに設定します。
kubectl config use-context CLUSTER_NAMEasmcli installを実行します。./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca mesh_ca \ --custom_overlay OVERLAY_FILE--fleet_id: フリート ホスト プロジェクトのプロジェクト ID。--kubeconfig:kubeconfigファイルのフルパス。環境変数$PWDはここでは機能しません。また、kubeconfigファイルの相対的な場所(「~」を使用した相対名)も機能しません。--output_dir:asmcliがanthos-service-meshパッケージをダウンロードして、istioctl、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcliはファイルをtmpディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数$PWDはここでは機能しません。--platform multicloud: プラットフォームがオンプレミスやマルチクラウドなど、 Google Cloud以外のものであることを指定します。--enable_all: スクリプトが次の処理を行います。- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
--ca mesh_ca: 認証局として Cloud Service Mesh 認証局を使用します。アップグレード中に認証局を変更すると、ダウンタイムが発生します。asmcliは、フリートの Workload Identity を使用するように Cloud Service Mesh 認証局を構成します。--custom_overlay: オーバーレイ ファイルの名前を指定します。
ゲートウェイをアップグレードする
ゲートウェイをデプロイしている場合は、それもアップグレードする必要があります。簡単なアップグレード方法については、ゲートウェイのインストールとアップグレード ガイドでインプレース アップグレードのセクションをご覧ください。
新しいコントロール プレーンに切り替える
istiodのにリビジョン ラベルを取得します。kubectl get pod -n istio-system -L istio.io/revこのコマンドからの出力は、次のようになります。
NAME READY STATUS RESTARTS AGE REV istiod-asm-1271-5-67998f4b55-lrzpz 1/1 Running 0 68m asm-1264-7 istiod-asm-1271-5-67998f4b55-r76kr 1/1 Running 0 68m asm-1264-7 istiod-1264-7-1-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1271-5 istiod-1264-7-1-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1271-5
出力の
REV列にある、新しいバージョンのリビジョン ラベルの値をメモします。この例での値はasm-1271-5です。古い
istiodバージョンのリビジョン ラベルの値もメモしてください。これは、新しいバージョンへのワークロードの移行を完了した後に古いバージョンのistiodを削除するために必要です。この出力例では、古いバージョンのリビジョン ラベルの値はasm-1264-7です。
リビジョン ラベルをアプリケーションの名前空間に追加し、
istio-injectionラベル(存在する場合)を削除します。次のコマンドで、REVISIONをistiodの新しいリビジョンと一致する値に変更します。kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
出力に
"istio-injection not found"が表示された場合は、無視してかまいません。これは、以前、名前空間にistio-injectionラベルが付加されていなかったことを意味します。名前空間にistio-injectionとリビジョン ラベルの両方があると自動インジェクション動作は未定義になるため、Cloud Service Mesh ドキュメント内のすべてのkubectl labelコマンドでは明示的に一方のみが設定されることになります。Pod を再起動してインジェクションを再度トリガーします。
kubectl rollout restart deployment -n NAMESPACE
アプリケーションをテストして、ワークロードが正しく機能していることを確認します。
他の名前空間にワークロードがある場合は、手順を繰り返して名前空間にラベルを付け、Pod を再起動します。
アプリケーションが想定どおりに動作していることを確認したら、
istiodの新しいバージョンへの移行のステップに進みます。アプリケーションに問題がある場合は、次の手順に沿ってロールバックを行います。移行を完了させる
アプリケーションが想定どおりに動作していることを確認したら、古いコントロール プレーンを削除して新しいバージョンへの移行を完了します。
anthos-service-meshGitHub リポジトリから取得したファイルがあるディレクトリに移動します。新しいコントロール プレーンを使用するように検証 Webhook を構成します。
kubectl apply -f asm/istio/istiod-service.yamlデフォルトのタグを移動します。
<OUTPUT_DIR>/istioctl tag set default --revision REVISION --overwrite古いバージョンの
istiodを削除します。使用するコマンドは、Istio から移行するか、以前のバージョンの Cloud Service Mesh からアップグレードするかによって異なります。移行
Istio から移行した場合、古い
istiodにはリビジョン ラベルがありません。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=trueアップグレード
以前の Cloud Service Mesh バージョンからアップグレードした場合は、次のコマンドで、
OLD_REVISIONが以前のバージョンのistiodのリビジョン ラベルと一致することを確認します。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-OLD_REVISION -n istio-system --ignore-not-found=true古いリビジョンの
validatingwebhookconfigurationリソースを削除します。kubectl delete validatingwebhookconfiguration istio-validator-OLD_REVISION-istio-system -n istio-system --ignore-not-found=true
古いバージョンの
IstioOperator構成を削除します。kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system --ignore-not-found=true想定される出力は次のようになります。
istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted
ロールバック
新しいバージョンの
istiodでアプリケーションをテストしたときに問題が発生した場合、以前のバージョンにロールバックする手順は次のとおりです。以前のバージョンの
istiodで自動挿入を有効にする場合は、名前空間に再びラベルを付けます。使用するコマンドは、リビジョン ラベルと以前のバージョンのistio-injection=enabledのどちらを使用するかによって異なります。自動挿入にリビジョン ラベルを使用した場合:
kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwriteistio-injection=enabledを使用した場合:kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
予想される出力:
namespace/NAMESPACE labeled
名前空間のリビジョン ラベルが、以前のバージョンの
istiodのリビジョン ラベルと一致していることを確認します。kubectl get ns NAMESPACE --show-labelsプロキシが Istio のバージョンになるように、Pod を再起動してインジェクションを再度トリガーします。
kubectl rollout restart deployment -n NAMESPACEistiodの新しいバージョンを削除します。次のコマンドのREVISIONの値が正しいことを確認します。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true新しいバージョンの
IstioOperator構成を削除します。kubectl delete IstioOperator installed-state-REVISION -n istio-system --ignore-not-found=true予想される出力は次のようになります。
istiooperator.install.istio.io "installed-state-REVISION" deleted
--disable_canonical_serviceフラグを含めなかった場合、asmcliで Canonical Service コントローラが有効になります。有効にしたままにすることをおすすめしますが、無効にする場合は、正規サービス コントローラの有効化と無効化をご覧ください。ゲートウェイをデプロイしている場合は、名前空間またはデプロイメントのリビジョン ラベルを以前のバージョンの
istiodと一致するように変更してください。ゲートウェイのインストールとアップグレード ガイドのインプレース アップグレードの手順を行います。
ワークロードのデプロイと再デプロイ
自動サイドカー プロキシ インジェクション(自動インジェクション)を有効にするまで、インストール(またはアップグレード)は完了しません。OSS Istio からの移行とアップグレードは、リビジョン ベースのアップグレード プロセスに沿って進めます(Istio ドキュメントでは「カナリア アップグレード」と呼ばれます)。リビジョンベースのアップグレードでは、既存のコントロール プレーンに並ぶ形で新しいバージョンのコントロール プレーンがインストールされます。次に、一部のワークロードを新しいバージョンに移行します。これにより、すべてのトラフィックを新しいバージョンに移行する前に、ワークロードのごく一部でアップグレードの影響をモニタリングできます。
このスクリプトは、リビジョン ラベルを istio.io/rev=asm-1271-5 形式で istiod に設定します。自動挿入を有効にするには、一致するリビジョン ラベルを名前空間に追加します。リビジョン ラベルは、サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定の istiod リビジョンに関連付けます。ラベルを追加したら、サイドカーを挿入するために名前空間内の Pod を再起動します。
istiodとistio-ingressgatewayのリビジョン ラベルを取得します。kubectl get pod -n istio-system -L istio.io/revこのコマンドからの出力は、次のようになります。
NAME READY STATUS RESTARTS AGE REV istio-ingressgateway-65d884685d-6hrdk 1/1 Running 0 67m istio-ingressgateway-65d884685d-94wgz 1/1 Running 0 67m istio-ingressgateway-asm-182-2-8b5fc8767-gk6hb 1/1 Running 0 5s asm-1271-5 istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2 1/1 Running 0 20s asm-1271-5 istiod-asm-1271-5-67998f4b55-lrzpz 1/1 Running 0 68m asm-1264-7 istiod-asm-1271-5-67998f4b55-r76kr 1/1 Running 0 68m asm-1264-7 istiod-asm-1264-7-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1271-5 istiod-asm-1264-7-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1271-5
出力の
REV列にある、新しいバージョンのリビジョン ラベルの値をメモします。この例での値はasm-1271-5です。古い
istiodバージョンのリビジョン ラベルの値もメモしてください。これは、新しいバージョンへのワークロードの移行を完了した後に古いバージョンのistiodを削除するために必要です。この出力例では、古いバージョンのリビジョン ラベルの値はasm-1264-7です。
istio-ingressgatewayを新しいリビジョンに切り替えます。次のコマンドで、REVISIONを新しいバージョンのリビジョン ラベルと一致する値に変更します。kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "REVISION"}]'予想される出力:
service/istio-ingressgateway patchedリビジョン ラベルを名前空間に追加し、
istio-injectionラベルを削除します(ある場合)。次のコマンドで、REVISIONをistiodの新しいリビジョンと一致する値に変更します。kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
出力に
"istio-injection not found"が表示された場合は、無視してかまいません。これは、以前、名前空間にistio-injectionラベルが付加されていなかったことを意味します。名前空間にistio-injectionとリビジョン ラベルの両方があると自動インジェクション動作は未定義になるため、Cloud Service Mesh ドキュメント内のすべてのkubectl labelコマンドでは明示的に一方のみが設定されることになります。Pod を再起動してインジェクションを再度トリガーします。
kubectl rollout restart deployment -n NAMESPACE
アプリケーションをテストして、ワークロードが正しく機能していることを確認します。
他の名前空間にワークロードがある場合は、手順を繰り返して名前空間にラベルを付け、Pod を再起動します。
アプリケーションが想定どおりに動作していることを確認したら、
istiodの新しいバージョンへの移行のステップに進みます。アプリケーションに問題がある場合は、次の手順に沿ってロールバックを行います。移行を完了させる
アプリケーションが想定どおりに動作していることを確認したら、古いコントロール プレーンを削除して新しいバージョンへの移行を完了します。
anthos-service-meshGitHub リポジトリから取得したファイルがあるディレクトリに移動します。新しいコントロール プレーンを使用するように検証 Webhook を構成します。
kubectl apply -f asm/istio/istiod-service.yamlデフォルトのタグを移動します。
<OUTPUT_DIR>/istioctl tag set default --revision <NEW REVISION NAME> --overwrite古い
istio-ingressgatewayDeployment を削除します。実行するコマンドは、Istio から移行するか、以前のバージョンの Cloud Service Mesh からアップグレードするかによって異なります。移行
Istio から移行した場合、古い
istio-ingressgatewayにはリビジョン ラベルがありません。kubectl delete deploy/istio-ingressgateway -n istio-systemアップグレード
以前の Cloud Service Mesh バージョンからアップグレードした場合は、次のコマンドで、
OLD_REVISIONを以前のバージョンのistio-ingressgatewayのリビジョン ラベルに置き換えます。kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=OLD_REVISION -n istio-system --ignore-not-found=true古いバージョンの
istiodを削除します。使用するコマンドは、Istio から移行するか、以前のバージョンの Cloud Service Mesh からアップグレードするかによって異なります。移行
Istio から移行した場合、古い
istio-ingressgatewayにはリビジョン ラベルがありません。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=trueアップグレード
以前の Cloud Service Mesh バージョンからアップグレードした場合は、次のコマンドで、
OLD_REVISIONが以前のバージョンのistiodのリビジョン ラベルと一致することを確認します。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-OLD_REVISION -n istio-system --ignore-not-found=true古いバージョンの
IstioOperator構成を削除します。kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system --ignore-not-found=true想定される出力は次のようになります。
istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted
ロールバック
新しいバージョンの
istiodでアプリケーションをテストしたときに問題が発生した場合、以前のバージョンにロールバックする手順は次のとおりです。以前のバージョンの
istiodで自動挿入を有効にする場合は、名前空間に再びラベルを付けます。使用するコマンドは、リビジョン ラベルと以前のバージョンのistio-injection=enabledのどちらを使用するかによって異なります。自動挿入にリビジョン ラベルを使用した場合:
kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwriteistio-injection=enabledを使用した場合:kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
予想される出力:
namespace/NAMESPACE labeled
名前空間のリビジョン ラベルが、以前のバージョンの
istiodのリビジョン ラベルと一致していることを確認します。kubectl get ns NAMESPACE --show-labelsプロキシが Istio のバージョンになるように、Pod を再起動してインジェクションを再度トリガーします。
kubectl rollout restart deployment -n NAMESPACE新しい
istio-ingressgatewayDeployment を削除します。次のコマンドのREVISIONの値が正しいことを確認します。kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=trueistiodの新しいバージョンを削除します。次のコマンドのREVISIONの値が正しいことを確認します。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true新しいバージョンの
IstioOperator構成を削除します。kubectl delete IstioOperator installed-state-REVISION -n istio-system --ignore-not-found=true予想される出力は次のようになります。
istiooperator.install.istio.io "installed-state-REVISION" deleted
--disable_canonical_serviceフラグを含めなかった場合、スクリプトで Canonical Service コントローラが有効になります。有効にしたままにすることをおすすめしますが、無効にする場合は、正規サービス コントローラの有効化と無効化をご覧ください。