このガイドでは、GKE on-prem で Anthos Service Mesh のバージョンを 1.5.4+ or 1.6.4+ から 1.6.14 にアップグレードする方法について説明します。Anthos Service Mesh 1.4.5 以降からアップグレードするには、まず Anthos Service Mesh 1.5 にアップグレードする必要があります。Anthos Service Mesh 1.4 から 1.6 に直接アップグレードすることはできません。
アップグレードを行う際は、デュアル コントロール プレーンのアップグレード(カナリア アップグレード)をおすすめします。ここでは、コントロール プレーンの新しいバージョンと以前のバージョンの両方を実行し、少数のワークロードで新しいバージョンのテストを行います。このアプローチはインプレース アップグレードよりも安全です。インプレース アップグレードでは、コントロール プレーンの新しいバージョンが以前のバージョンに置き換わります。istio-ingressgateway はインプレースでアップグレードされるため、クラスタの中断を計画する必要があるので注意してください。Anthos Service Mesh のコントロール プレーン コンポーネントのデプロイには 5~10 分ほどかかります。また、すべてのワークロードに新しいサイドカー プロキシを挿入し、現在の Anthos Service Mesh バージョンで更新されるようにする必要があります。サイドカー プロキシの更新にかかる時間は、Pod 数、ノード数、デプロイのスケーリング設定、Pod 中断のコスト、その他の構成要素など、さまざまな要因に左右されます。サイドカー プロキシの更新にかかる大まかな時間は 1 分あたり 100 Pod です。
アップグレードの準備を行う
このセクションでは、Anthos Service Mesh をアップグレードする際に行う準備について説明します。
サポートされている機能とこのガイドを確認して、機能とアップグレード プロセスをよく理解してください。
以前のバージョンの Anthos Service Mesh をインストールしたときにオプション機能を有効にした場合は、アップグレードするときに同じ機能を有効にする必要があります。オプション機能を有効にするには、
--set values
フラグを追加するか、istioctl install
コマンドを実行するときに YAML ファイルで-f
フラグを指定します。Anthos Service Mesh 1.5 からアップグレードする場合は、ロールバックが必要となる場合に備えて、次の手順を行ってください。
asm-1-5
という名前のディレクトリを作成します。asm-1-5
ディレクトリに 1.5 インストール ファイルをダウンロードします。ファイルの内容を
asm-1-5
ディレクトリに抽出します。
環境設定
Anthos Service Mesh をインストールするマシンには、次のツールが必要です。Anthos Service Mesh はユーザー クラスタにのみインストールできます。管理クラスタにはインストールできません。
curl
コマンドライン ツール- Google Cloud CLI
Google Cloud CLI をインストールした後:
Google Cloud CLI で認証します。
gcloud auth login
コンポーネントを更新します。
gcloud components update
kubectl
をインストールします。gcloud components install kubectl
必要とするバージョンの
kpt
をインストールします。curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
次のようにしてコンテキストをユーザー クラスタに切り替えます。
kubectl config use-context CLUSTER_NAME
ユーザー アカウント(Google Cloud ログイン メールアドレス)にクラスタ管理者の権限を付与します。この権限は、Anthos Service Mesh に必要なロールベースのアクセス制御(RBAC)ルールを作成するのに必要です。
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=USER_ACCOUNT
インストール ファイルのダウンロード
- Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig istio-1.6.14-asm.2-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.6.14-asm.2-linux-amd64.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.6.14-asm.2
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
- Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.6.14-asm.2-osx.tar.gz.1.sig istio-1.6.14-asm.2-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.6.14-asm.2-osx.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.6.14-asm.2
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
- Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip.1.sig openssl dgst -verify - -signature istio-1.6.14-asm.2-win.zip.1.sig istio-1.6.14-asm.2-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.6.14-asm.2-win.zip
このコマンドにより、現在の作業ディレクトリに
istio-1.6.14-asm.2
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
- Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
cd istio-1.6.14-asm.2
- 利便性を考えて、
/bin
ディレクトリ内のツールを PATH に追加します。export PATH=$PWD/bin:$PATH
Linux
Mac OS
Windows
Anthos Service Mesh の更新
新しいバージョンの Anthos Service Mesh をインストールするには、デュアル コントロール プレーンのアップグレード プロセス(Istio ドキュメントではカナリア アップグレード)に沿って操作することをおすすめします。デュアル コントロール プレーンのアップグレードでは、既存のコントロール プレーンを残しながら、新しいバージョンのコントロール プレーンをインストールします。新しいバージョンをインストールする際は、新しいコントロール プレーンのバージョンを識別する revision
ラベルを含めます。各リビジョンは、独自の Deployment と Service を持つ完全な Anthos Service Mesh コントロール プレーンの実装です。
新しいコントロール プレーンを参照するようにワークロードに同じ revision
ラベルを設定し、ローリング再起動を行い、新しい Anthos Service Mesh バージョンでプロキシを再挿入して新しいバージョンに移行します。この方法では、少数のワークロードでアップグレードの効果をモニタリングできます。アプリケーションのテスト後に、すべてのトラフィックを新しいバージョンに移行できます。これは、インプレース アップグレードを行うよりもはるかに安全です。インプレース アップグレードでは、以前のバージョンのコントロール プレーンが新しいコントロール プレーンで置き換わります。
コントロール プレーンの更新
次のコマンドを実行して、新しいコントロール プレーンをデプロイします。サポートされているオプション機能を有効にするには、コマンドラインで -f
と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。
istioctl install \ --set profile=asm-multicloud \ --set revision=asm-1614-2
--set revision
引数は istiod
に istio.io/rev
ラベルを追加します。このコマンドの実行後は、コントロール プレーンの 2 つの Deployment と Service を並行して実行できます。
kubectl get pods -n istio-system
出力例:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-c56675fcd-86zdn 1/1 Running 0 2m9s istio-ingressgateway-c56675fcd-vn4nv 1/1 Running 0 2m21s istiod-asm-1614-2-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m promsd-579f9f9bf4-m65nc 2/2 Running 1 50m
ワークロードの再デプロイ
新しいリビジョンをインストールしても、既存のサイドカー プロキシには影響しません。これらをアップグレードするには、新しいコントロール プレーンを指すように構成する必要があります。これは、名前空間ラベル istio.io/rev
に基づいたサイドカー インジェクションで制御されます。
新しい Anthos Service Mesh バージョンで挿入されるワークロードを更新します。
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-1614-2 --overwrite
istio.io/rev
ラベルよりも優先されるため、istio-injection
ラベルは削除する必要があります。Pod を再起動してインジェクションを再度トリガーします。
kubectl rollout restart deployment -n NAMESPACE
Pod が
istiod-asm-1614-2
コントロール プレーンを参照するように構成されていることを確認します。kubectl get pods -n NAMESPACE -l istio.io/rev=asm-1614-2
アプリケーションをテストして、ワークロードが正しく機能していることを確認します。
他の名前空間にワークロードがある場合は、各名前空間に対して前の手順を繰り返します。
アプリケーションが期待どおりに機能していることを確認したら、アップグレードを完了するに進みます。それ以外の場合は、次の手順で以前のバージョンにロールバックします。
コントロール プレーンの以前のバージョンで挿入されるワークロードを更新します。
kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
プロキシが Istio のバージョンになるように、Pod を再起動してインジェクションを再度トリガーします。
kubectl rollout restart deployment -n NAMESPACE
コントロール プレーン コンポーネントをロールバックします。
以前の 1.6 にロールバックする
以前のバージョンの
istio-ingressgateway
を再デプロイします。kubectl -n istio-system rollout undo deploy istio-ingressgateway
新しいコントロール プレーンを削除します。
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-asm-1614-2 -n istio-system --ignore-not-found=true
1.5 にロールバックする
1.5 Anthos Service Mesh インストール ファイルをダウンロードしたディレクトリに移動します。
以前のバージョンの Anthos Service Mesh を再インストールします。オプション機能を有効にした場合は、次のコマンドで該当する
--set values
フラグまたは-f
フラグ(YAML ファイル名)を指定してください。bin/istioctl install \ --set profile=asm-multicloud \
アップグレードを完了する
アプリケーションが想定どおりに機能していることを確認したら、古いコントロール プレーンを削除してアップグレードを完了します。
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true