Helmを使ったアップグレード

Helmを使用してIstioメッシュをアップグレードおよび設定するには、このガイドに従ってください。 このガイドでは、Istioの以前のマイナーバージョンまたはパッチバージョンに対してHelmを使用したインストールが既に実行されていることを前提としています。

このガイドで使用されている`base`および`istiod`のHelmチャートは、Istioctl経由でIstioをインストールする場合と同じです。 ただし、Istioctl経由でインストールする場合、このガイドで説明されているチャートとは異なるゲートウェイチャートが使用されます。

前提条件

  1. 必要なプラットフォーム固有の設定を実行します。

  2. Podとサービスの要件を確認します。

  3. バージョン3.6以上のHelmクライアントをインストールします。

  4. Helmリポジトリを設定します。

$ helm repo add istio https://istio-release.storage.googleapis.com/charts
$ helm repo update

アップグレード手順

Istioをアップグレードする前に、istioctl x precheckコマンドを実行して、アップグレードが環境と互換性があることを確認することをお勧めします。

$ istioctl x precheck
✔ No issues found when checking the cluster. Istio is safe to install or upgrade!
  To get started, check out <https://istio.dokyumento.jp/latest/docs/setup/getting-started/>

以下の手順を使用して、Istioコントロールプレーンのカナリアバージョンをインストールし、新しいバージョンが既存の構成とデータプレーンと互換性があることを検証できます。

  1. Istioベースチャートをアップグレードして、すべてのクラスタワイドリソースが最新であることを確認します。

    $ helm upgrade istio-base istio/base -n istio-system
    
  2. リビジョン値を設定して、Istioディスカバリチャートのカナリアバージョンをインストールします。

    $ helm install istiod-canary istio/istiod \
        --set revision=canary \
        -n istio-system
    
  3. クラスタに2つのバージョンのistiodがインストールされていることを確認します。

    $ kubectl get pods -l app=istiod -L istio.io/rev -n istio-system
      NAME                            READY   STATUS    RESTARTS   AGE   REV
      istiod-5649c48ddc-dlkh8         1/1     Running   0          71m   default
      istiod-canary-9cc9fd96f-jpc7n   1/1     Running   0          34m   canary
    
  4. Istioゲートウェイを使用している場合は、リビジョン値を設定して、ゲートウェイチャートのカナリアリビジョンをインストールします。

    $ helm install istio-ingress-canary istio/gateway \
        --set revision=canary \
        -n istio-ingress
    
  5. クラスタに2つのバージョンのistio-ingress gatewayがインストールされていることを確認します。

    $ kubectl get pods -L istio.io/rev -n istio-ingress
      NAME                                    READY   STATUS    RESTARTS   AGE     REV
      istio-ingress-754f55f7f6-6zg8n          1/1     Running   0          5m22s   default
      istio-ingress-canary-5d649bd644-4m8lp   1/1     Running   0          3m24s   canary
    

    ゲートウェイのカナリアアップグレードの詳細なドキュメントについては、ゲートウェイのアップグレードを参照してください。

  6. こちらの手順に従って、既存のワークロードをテストまたは移行して、カナリアコントロールプレーンを使用します。

  7. ワークロードを検証し、カナリアコントロールプレーンを使用するように移行したら、古いコントロールプレーンをアンインストールできます。

    $ helm delete istiod -n istio-system
    
  8. Istioベースチャートを再度アップグレードします。今回は、新しいcanaryリビジョンをクラスタ全体のデフォルトにします。

    $ helm upgrade istio-base istio/base --set defaultRevision=canary -n istio-system
    

安定版リビジョンラベル

名前空間を新しいリビジョンに移動するときに手動で再ラベル付けするのは、面倒でエラーが発生しやすい場合があります。リビジョンタグはこの問題を解決します。リビジョンタグは、リビジョンを指す安定した識別子であり、名前空間の再ラベル付けを回避するために使用できます。名前空間を再ラベル付けするのではなく、メッシュオペレーターはタグを変更して新しいリビジョンを指すようにするだけです。そのタグでラベル付けされたすべての名前空間が同時に更新されます。

使用方法

1-23-11-24-0の2つのリビジョンがインストールされているクラスタを考えてみましょう。クラスタオペレーターは、古い安定した1-23-1バージョンを指すリビジョンタグprod-stableと、新しい1-24-0リビジョンを指すリビジョンタグprod-canaryを作成します。その状態は、次のコマンドで到達できます。
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-23-1 -n istio-system | kubectl apply -f -
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-canary}" --set revision=1-24-0 -n istio-system | kubectl apply -f -

結果のリビジョン、タグ、および名前空間間のマッピングは、以下のとおりです。

Two namespaces pointed to prod-stable and one pointed to prod-canary
prod-stableを指す2つの名前空間とprod-canaryを指す1つの名前空間

クラスタオペレーターは、istioctl tag listコマンドを使用して、タグ付けされた名前空間に加えて、このマッピングを表示できます。

$ istioctl tag list
TAG         REVISION NAMESPACES
default     1-23-1   ...
prod-canary 1-24-0   ...
prod-stable 1-23-1   ...

クラスタオペレーターがprod-canaryでタグ付けされたコントロールプレーンの安定性に満足したら、prod-stableリビジョンタグを新しい1-24-0リビジョンを指すように変更することで、istio.io/rev=prod-stableのラベルが付いた名前空間を1つのアクションで更新できます。

$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-24-0 -n istio-system | kubectl apply -f -

これで、更新されたリビジョン、タグ、および名前空間間のマッピングは、以下のとおりです。

Namespace labels unchanged but now all namespaces pointed to {{< istio_full_version_revision >}}
名前空間のラベルは変更されていませんが、すべての名前空間が{{< istio_full_version_revision >}}を指しています。

prod-stableとマークされた名前空間で挿入されたワークロードを再起動すると、これらのワークロードで1-24-0コントロールプレーンが使用されるようになります。ワークロードを新しいリビジョンに移行するために名前空間の再ラベル付けは必要ないことに注意してください。

デフォルトタグ

タグdefaultによって指されるリビジョンは、* **デフォルトリビジョン** *と見なされ、追加の意味を持ちます。デフォルトのリビジョンは、次の機能を実行します。

  • istio-injection=enabled名前空間セレクター、sidecar.istio.io/inject=trueオブジェクトセレクター、およびistio.io/rev=defaultセレクターのサイドカーを挿入します。
  • Istioリソースを検証します。
  • デフォルト以外のリビジョンからリーダーロックを盗み、シングルトンメッシュの責任(リソースステータスの更新など)を実行します。

リビジョン1-24-0をデフォルトにするには、次を実行します。

$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{default}" --set revision=1-24-0 -n istio-system | kubectl apply -f -
既存のリビジョン化されていないIstioインストールと一緒にdefaultタグを使用する場合は、古いコントロールプレーンと新しいコントロールプレーンの両方が挿入を試みるのを避けるために、古いMutatingWebhookConfiguration(通常はistio-sidecar-injectorと呼ばれます)を削除することをお勧めします。

インプレースアップグレード

Helmアップグレードワークフローを使用して、クラスタ内のIstioのインプレースアップグレードを実行できます。

  1. Istioベースチャートをアップグレードします。

    $ helm upgrade istio-base istio/base -n istio-system
    
  2. Istioディスカバリチャートをアップグレードします。

    $ helm upgrade istiod istio/istiod -n istio-system
    
  3. (オプション)クラスタにインストールされているゲートウェイチャートをアップグレードします。

    $ helm upgrade istio-ingress istio/gateway -n istio-ingress
    

アンインストール

Helmインストールガイドのアンインストールセクションを参照してください。

この情報は役に立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!