Istioのアップデート
マネージド・アドオンによってインストールされたバージョンの Istio を更新する際は、 istioctl を使用しないでください。 更新されると、マネージドIstioアドオンには、Istioバージョンの更新も含まれる。
Istioアドオンのマイナーバージョンへのアップデート
IBM Cloud が、IBM Cloud Kubernetes Service でサポートされる最新バージョンの Istio へのパッチの更新を自動的にロールアウトして、すべての Istio コンポーネントを最新に保ちます。 サポートされているバージョンは、 IBM Cloud によってテストされ、 IBM Cloud Kubernetes Service での使用が承認されています。
始める前に
マイナーバージョンを更新する際には、以下の点に注意してください:
-
Istio アドオンは、一度に 1 つのバージョンのみを手動で更新できます。 Istioアドオンを2つ以上のバージョンで更新するには、手動更新プロセスを繰り返すか、アドオンを アンインストールしてから、後のバージョンを インストール します。
-
管理対象 Istio アドオンを前のバージョンに戻すことはできません。 以前のマイナーバージョンに戻すには、アドオンを アンインストールしてから 以前のバージョンを インストール する必要があります。
-
istio-system名前空間内の Istio コントロール・コンポーネントを最新のマイナー・バージョンに更新すると、抜本的な変更が発生する場合があります。 マイナー・バージョンの更新中に発生する以下の変更を確認します。- コントロール・プレーン・ポッドに更新がロールアウトされると、ポッドが再作成されます。 Istio コントロール・プレーンは、更新が完了するまで完全には使用できません。
- Istio データ・プレーンは、更新中も機能し続けます。 ただし、サービス・メッシュ内のアプリへのトラフィックの一部は、短時間中断される可能性があります。
istio-ingressgatewayロード・バランサーの外部 IP アドレスは、更新の実行中に変更されることも、更新後に変更されることもありません。
Istioアドオンのマイナーバージョンを更新する:
-
Istio アドオンの現在のバージョンを確認します。
kubectl get iop managed-istio -n ibm-operators -o jsonpath='{.metadata.annotations.version}' -
使用可能な Istio アドオン・バージョンを確認します。
ibmcloud ks addon-versions -
Istio アドオンの変更ログで、各バージョンの変更点を確認する。
-
バージョン 1.11 からバージョン 1.12 にアップグレードする場合に、Istio コンポーネントがバージョン 1.10 以前でプロビジョンされていたのであれば、以下のようにします。
-
ミューテーション Webhook 構成の詳細を取得するコマンドを実行します。
kubectl get mutatingwebhookconfigurations出力例
NAME WEBHOOKS AGE istio-sidecar-injector 5 32m -
出力で
istio-sidecar-injectorを見つけて Webhook 列を確認します。 Webhook が 5 つ以上ある場合は、次のコマンドを実行して追加の Webhook を削除します。kubectl delete mutatingwebhookconfigurations istio-sidecar-injector && kubectl rollout restart deploy addon-istio-operator -n ibm-operators出力例
mutatingwebhookconfiguration.admissionregistration.k8s.io "istio-sidecar-injector" deleted -
追加の Webhook が削除されたことを確認します。 ミューテーション Webhook 構成の詳細を取得し、4 つの
istio-sidecar-injectorWebhook があることを確認します。kubectl get mutatingwebhookconfigurations出力例
NAME WEBHOOKS AGE istio-sidecar-injector 4 60s -
検証 Webhook 構成の詳細を取得するコマンドを実行します。
kubectl get validatingwebhookconfigurations出力例
NAME WEBHOOKS AGE istio-validator-istio-system 2 66s istiod-istio-system 1 31m -
出力を確認します。
istiod-istio-systemWebhook がリストされている場合は、次のコマンドを実行して、その Webhook を削除します。kubectl delete ValidatingWebhookConfiguration istiod-istio-system出力例
validatingwebhookconfiguration.admissionregistration.k8s.io "istiod-istio-system" deleted -
istiod-istio-systemWebhook がリストされなくなったことを確認します。kubectl get validatingwebhookconfigurations出力例
NAME WEBHOOKS AGE istio-validator-istio-system 2 2m
-
-
Istio アドオンを更新します。
ibmcloud ks cluster addon update istio --version <version> -c <cluster_name_or_ID> -
次に進む前に、更新が完了していることを確認します。
更新処理が完了するまでに、最大で 20 分かかる場合があります。
-
Istio アドオンの Health State が
normalで、Health Status がAddon Readyであることを確認します。 状態がupdatingの場合、更新はまだ完了していません。ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID> -
istio-system名前空間のコントロール・プレーン・コンポーネント・ポッドの STATUS がRunningであることを確認します。kubectl get pods -n istio-systemNAME READY STATUS RESTARTS AGE istio-system istio-egressgateway-6d4667f999-gjh94 1/1 Running 0 61m istio-system istio-egressgateway-6d4667f999-txh56 1/1 Running 0 61m istio-system istio-ingressgateway-7bbf8d885-b9xgp 1/1 Running 0 61m istio-system istio-ingressgateway-7bbf8d885-xhkv6 1/1 Running 0 61m istio-system istiod-5b9b5bfbb7-jvcjz 1/1 Running 0 60m istio-system istiod-5b9b5bfbb7-khcht 1/1 Running 0 60m
-
istioctl クライアントとサイドカーの更新
Istio マネージド・アドオンを更新したら、必ず、istioctl クライアントとアプリの Istio サイドカーを更新してください。
例えば、IBM Cloud Kubernetes Service によって自動的にアドオンのパッチ・バージョンが更新されることや、アドオンのマイナー・バージョンを更新することがあります。 どちらの場合も、istioctl クライアントとアプリの既存の Istio サイドカーを、アドオンの Istio バージョンと一致するように更新してください。
-
istioctlクライアントと Istio アドオン・コントロール・プレーン・コンポーネントのバージョンを取得します。istioctl version --short=false出力例
client version: version.BuildInfo{Version:"1.11.2"} pilot version: version.BuildInfo{Version:1.23.5} pilot version: version.BuildInfo{Version:1.23.5} data plane version: version.ProxyInfo{ID:"istio-egressgateway-77bf75c5c-vp97p.istio-system", IstioVersion:1.23.5} data plane version: version.ProxyInfo{ID:"istio-egressgateway-77bf75c5c-qkhgm.istio-system", IstioVersion:1.23.5} data plane version: version.ProxyInfo{ID:"istio-ingressgateway-6dcb67b64d-dffhq.istio-system", IstioVersion:1.23.5} data plane version: version.ProxyInfo{ID:"httpbin-74fb669cc6-svc8x.default", IstioVersion:1.23.5} data plane version: version.ProxyInfo{ID:"istio-ingressgateway-6dcb67b64d-cs9r9.istio-system", IstioVersion:1.23.5} ... -
出力で、
client version(istioctl) を Istio コントロール・プレーン・コンポーネントのバージョン (pilot versionなど) と比較します。client versionとコントロール・プレーン・コンポーネントのバージョンが一致しない場合は、以下のようにします。-
コントロール・プレーン・コンポーネントと同じバージョンの
istioctlクライアントをダウンロードします。curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.23.5 sh - -
Istio パッケージ・ディレクトリーにナビゲートします。
cd istio-1.23.5 -
Linux および macOS ユーザー:
istioctlクライアントをPATHシステム変数に追加します。export PATH=$PWD/bin:$PATH
-
-
ステップ 1 の出力で、データ・プレーン・ポッドごとに、
pilot versionをdata plane versionと比較します。pilot versionとdata plane versionが一致する場合は、追加の更新は必要ありません。pilot versionとdata plane versionが一致しない場合は、古いバージョンを実行するデータ・プレーン・ポッドのデプロイメントを再始動します。 ポッド名と名前空間は、各エントリーにdata plane version: version.ProxyInfo{ID:"<pod_name>.<namespace>", IstioVersion:"1.8.4"}としてリストされます。
kubectl rollout restart deployment <deployment> -n <namespace>
サポートされていないバージョンのIstioアドオンからのアップデート
Istioコンポーネントを、 IBM Cloud Kubernetes Service でサポートされている最新のパッチ・バージョンにアップデートする。
IstioアドオンからコミュニティIstioへの移行
マネージドIstioアドオンを使用する代わりに、コミュニティIstioに移行することができます。
開始前に
- 1.21 より前のバージョンを使用している場合は、 Istio アドオンをバージョン 1.21 以降に更新して ください。 このバージョンでは、アドオンを無効にしても、以前のバージョンのようにカスタムリソースが削除されないため、このアップデートは重要です。
- Istioが不要になった場合は、これらのステップを完了する代わりに 、コミュニティIstioをインストールせずにアドオンをアンインストール することができます。
ステップ1:コンソールからIstioアドオンを無効にする
コンソールまたはCLIからアドオンを無効にする。
-
クラスター・ダッシュボードで、Istioアドオンを削除するクラスター名をクリックします。
-
**「アドオン」**セクションにナビゲートします。
-
マネージド Istio カード上で、「アクション」メニュー・アイコンをクリックします。
-
**「アンインストール」**をクリックします。 このクラスターでは、管理対象のIstioアドオンが無効になっています。
-
マネージド Istio カードに、アンインストールしたアドオンが表示されなくなったことを確認します。
ステップ1:CLIからIstioアドオンを無効にする
アドオンを無効にし、追加のIstioアドオンが残っていないことを確認する。
istioアドオンを無効にします。ibmcloud ks cluster addon disable istio --cluster <cluster_name_or_ID> -f- このクラスター内のすべてのマネージド Istio アドオンが無効になっていることを確認します。 どのような Istio アドオンも出力で返されません。
ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID> - 次のステップに進む前に10分間待つ。 これでistio演算子をアンマネージする時間ができた。
ステップ2:Istioオペレータのスケールダウン
Istioオペレータのデプロイメントをスケールダウンする。
以下のコマンドを実行します。
kubectl scale deployment -n ibm-operators addon-istio-operator --replicas=0
ステップ3:資源の節約
istio-system ネームスペースで作成または変更したリソースと、カスタム・リソース定義 (CRD)によって自動的に生成されたすべての Kubernetes リソースを保存します。
-
managed-istio-customConfigMap を保存して、問題のトラブルシューティングを行ったり、後でアドオンを再インストールしたりします。kubectl get cm -n ibm-operators managed-istio-custom -o yaml > Customizations.yaml -
IstioOperator CR(IOP)をすべて保存する。
- IOPのリソースをリストアップする:
kubectl get iop -A - リストアップされた各IOPリソースについて、ファイナライザを削除する。
managed-istioIOPを使用した例:kubectl patch -n ibm-operators istiooperator/managed-istio --type json --patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]' - リストアップされた各IOPリソースについて、それぞれファイルに保存する:
kubectl get iop -n <IOP_namespace> <IOP_name> -o yaml > <IOP_name>.yaml
- IOPのリソースをリストアップする:
-
次のステップに進む前に10分間待つ。
ステップ4:IOPのインストーラーの変更
カスタムのイングレス・ゲートウェイなど、すべての Istio オペレータ(IOP)リソースを削除します。
-
istioctlcliツールが必要なパッチバージョンであることを確認してください。istioctl version -
前のステップで保存した各IOPファイルについて、
upgradeコマンドを実行します。istioctl upgrade -f <filename>.yaml
ステップ5:IstioオペレータとIOPの削除
Istioオペレータのデプロイメント、サービス・アカウント、クラスタ・ロール・バインディング、クラスタ・ロール、およびすべてのIOPを削除します。
-
以下のコマンドを実行して、istio operator deploymentを削除します:
kubectl delete deployment -n ibm-operators addon-istio-operator --ignore-not-found=true kubectl delete serviceaccount -n ibm-operators addon-istio-operator --ignore-not-found=true kubectl delete clusterrolebinding addon-istio-operator --ignore-not-found=true kubectl delete clusterrole addon-istio-operator --ignore-not-found=true -
IOPを削除する。
- IOPのリソースをリストアップする:
kubectl get iop -A - リストされた各IOPリソースについて、それを削除する:
kubectl delete IstioOperator <resource_name> -n <namespace>
- IOPのリソースをリストアップする:
ステップ6:取り外し ConfigMap
ConfigMap、先に保存してあるので、削除することができる。
managed-istio-custom ConfigMap を取り外す。
kubectl delete cm -n ibm-operators managed-istio-custom
アドオンの削除は完了し、必要に応じてコミュニティIstioの使用とアップグレードを続けることができます。