IBM Cloud Docs
Istioのアップデート

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アドオンのマイナーバージョンを更新する:

  1. Istio アドオンの現在のバージョンを確認します。

    kubectl get iop managed-istio -n ibm-operators -o jsonpath='{.metadata.annotations.version}'
    
  2. 使用可能な Istio アドオン・バージョンを確認します。

    ibmcloud ks addon-versions
    
  3. Istio アドオンの変更ログで、各バージョンの変更点を確認する。

  4. バージョン 1.11 からバージョン 1.12 にアップグレードする場合に、Istio コンポーネントがバージョン 1.10 以前でプロビジョンされていたのであれば、以下のようにします。

    1. ミューテーション Webhook 構成の詳細を取得するコマンドを実行します。

      kubectl get mutatingwebhookconfigurations
      

      出力例

      NAME                     WEBHOOKS   AGE
      istio-sidecar-injector   5          32m
      
    2. 出力で 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
      
    3. 追加の Webhook が削除されたことを確認します。 ミューテーション Webhook 構成の詳細を取得し、4 つの istio-sidecar-injector Webhook があることを確認します。

      kubectl get mutatingwebhookconfigurations
      

      出力例

      NAME                     WEBHOOKS   AGE
      istio-sidecar-injector   4          60s
      
    4. 検証 Webhook 構成の詳細を取得するコマンドを実行します。

      kubectl get validatingwebhookconfigurations
      

      出力例

      NAME                           WEBHOOKS   AGE
      istio-validator-istio-system   2          66s
      istiod-istio-system            1          31m
      
    5. 出力を確認します。 istiod-istio-system Webhook がリストされている場合は、次のコマンドを実行して、その Webhook を削除します。

      kubectl delete ValidatingWebhookConfiguration istiod-istio-system
      

      出力例

      validatingwebhookconfiguration.admissionregistration.k8s.io "istiod-istio-system" deleted
      
    6. istiod-istio-system Webhook がリストされなくなったことを確認します。

      kubectl get validatingwebhookconfigurations
      

      出力例

      NAME                           WEBHOOKS   AGE
      istio-validator-istio-system   2          2m
      
  5. Istio アドオンを更新します。

    ibmcloud ks cluster addon update istio --version <version> -c <cluster_name_or_ID>
    
  6. 次に進む前に、更新が完了していることを確認します。

    更新処理が完了するまでに、最大で 20 分かかる場合があります。

    1. Istio アドオンの Health Statenormal で、Health StatusAddon Ready であることを確認します。 状態が updating の場合、更新はまだ完了していません。

      ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
      
    2. istio-system 名前空間のコントロール・プレーン・コンポーネント・ポッドの STATUSRunning であることを確認します。

      kubectl get pods -n istio-system
      
      NAME                                                     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
      
  7. istioctl クライアントとサイドカーを更新します

istioctl クライアントとサイドカーの更新

Istio マネージド・アドオンを更新したら、必ず、istioctl クライアントとアプリの Istio サイドカーを更新してください。

例えば、IBM Cloud Kubernetes Service によって自動的にアドオンのパッチ・バージョンが更新されることや、アドオンのマイナー・バージョンを更新することがあります。 どちらの場合も、istioctl クライアントとアプリの既存の Istio サイドカーを、アドオンの Istio バージョンと一致するように更新してください。

  1. 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}
    ...
    
  2. 出力で、client version (istioctl) を Istio コントロール・プレーン・コンポーネントのバージョン (pilot version など) と比較します。 client version とコントロール・プレーン・コンポーネントのバージョンが一致しない場合は、以下のようにします。

    1. コントロール・プレーン・コンポーネントと同じバージョンの istioctl クライアントをダウンロードします。

      curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.23.5 sh -
      
    2. Istio パッケージ・ディレクトリーにナビゲートします。

      cd istio-1.23.5
      
    3. Linux および macOS ユーザー: istioctl クライアントを PATH システム変数に追加します。

      export PATH=$PWD/bin:$PATH
      
  3. ステップ 1 の出力で、データ・プレーン・ポッドごとに、pilot versiondata plane version と比較します。

    • pilot versiondata plane version が一致する場合は、追加の更新は必要ありません。
    • pilot versiondata 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:コンソールからIstioアドオンを無効にする

コンソールまたはCLIからアドオンを無効にする。

  1. クラスター・ダッシュボードで、Istioアドオンを削除するクラスター名をクリックします。

  2. **「アドオン」**セクションにナビゲートします。

  3. マネージド Istio カード上で、「アクション」メニュー・アイコンをクリックします。

  4. **「アンインストール」**をクリックします。 このクラスターでは、管理対象のIstioアドオンが無効になっています。

  5. マネージド Istio カードに、アンインストールしたアドオンが表示されなくなったことを確認します。

ステップ1:CLIからIstioアドオンを無効にする

アドオンを無効にし、追加のIstioアドオンが残っていないことを確認する。

  1. istioアドオンを無効にします。
    ibmcloud ks cluster addon disable istio --cluster <cluster_name_or_ID> -f
    
  2. このクラスター内のすべてのマネージド Istio アドオンが無効になっていることを確認します。 どのような Istio アドオンも出力で返されません。
    ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
    
  3. 次のステップに進む前に10分間待つ。 これでistio演算子をアンマネージする時間ができた。

ステップ2:Istioオペレータのスケールダウン

Istioオペレータのデプロイメントをスケールダウンする。

以下のコマンドを実行します。

kubectl scale deployment -n ibm-operators addon-istio-operator --replicas=0

ステップ3:資源の節約

istio-system ネームスペースで作成または変更したリソースと、カスタム・リソース定義 (CRD)によって自動的に生成されたすべての Kubernetes リソースを保存します。

  1. managed-istio-custom ConfigMap を保存して、問題のトラブルシューティングを行ったり、後でアドオンを再インストールしたりします。

    kubectl get cm -n ibm-operators managed-istio-custom -o yaml > Customizations.yaml
    
  2. IstioOperator CR(IOP)をすべて保存する。

    • IOPのリソースをリストアップする:
      kubectl get iop -A
      
    • リストアップされた各IOPリソースについて、ファイナライザを削除する。 managed-istio IOPを使用した例:
      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
      
  3. 次のステップに進む前に10分間待つ。

ステップ4:IOPのインストーラーの変更

カスタムのイングレス・ゲートウェイなど、すべての Istio オペレータ(IOP)リソースを削除します。

  1. istioctl cliツールが必要なパッチバージョンであることを確認してください。

    istioctl version
    
  2. 前のステップで保存した各IOPファイルについて、 upgrade コマンドを実行します。

    istioctl upgrade -f <filename>.yaml
    

ステップ5:IstioオペレータとIOPの削除

Istioオペレータのデプロイメント、サービス・アカウント、クラスタ・ロール・バインディング、クラスタ・ロール、およびすべてのIOPを削除します。

  1. 以下のコマンドを実行して、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
    
  2. IOPを削除する。

    • IOPのリソースをリストアップする:
      kubectl get iop -A
      
    • リストされた各IOPリソースについて、それを削除する:
      kubectl delete IstioOperator <resource_name> -n <namespace>
      

ステップ6:取り外し ConfigMap

ConfigMap、先に保存してあるので、削除することができる。

managed-istio-custom ConfigMap を取り外す。

kubectl delete cm -n ibm-operators managed-istio-custom

アドオンの削除は完了し、必要に応じてコミュニティIstioの使用とアップグレードを続けることができます。