Helmを使ったアップグレード
Helmを使用してIstioメッシュをアップグレードおよび設定するには、このガイドに従ってください。 このガイドでは、Istioの以前のマイナーバージョンまたはパッチバージョンに対してHelmを使用したインストールが既に実行されていることを前提としています。
このガイドで使用されている`base`および`istiod`のHelmチャートは、Istioctl経由でIstioをインストールする場合と同じです。 ただし、Istioctl経由でインストールする場合、このガイドで説明されているチャートとは異なるゲートウェイチャートが使用されます。前提条件
必要なプラットフォーム固有の設定を実行します。
Podとサービスの要件を確認します。
バージョン3.6以上のHelmクライアントをインストールします。
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コントロールプレーンのカナリアバージョンをインストールし、新しいバージョンが既存の構成とデータプレーンと互換性があることを検証できます。
Istioベースチャートをアップグレードして、すべてのクラスタワイドリソースが最新であることを確認します。
$ helm upgrade istio-base istio/base -n istio-system
リビジョン値を設定して、Istioディスカバリチャートのカナリアバージョンをインストールします。
$ helm install istiod-canary istio/istiod \ --set revision=canary \ -n istio-system
クラスタに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
Istioゲートウェイを使用している場合は、リビジョン値を設定して、ゲートウェイチャートのカナリアリビジョンをインストールします。
$ helm install istio-ingress-canary istio/gateway \ --set revision=canary \ -n istio-ingress
クラスタに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
ゲートウェイのカナリアアップグレードの詳細なドキュメントについては、ゲートウェイのアップグレードを参照してください。
こちらの手順に従って、既存のワークロードをテストまたは移行して、カナリアコントロールプレーンを使用します。
ワークロードを検証し、カナリアコントロールプレーンを使用するように移行したら、古いコントロールプレーンをアンインストールできます。
$ helm delete istiod -n istio-system
Istioベースチャートを再度アップグレードします。今回は、新しい
canary
リビジョンをクラスタ全体のデフォルトにします。$ helm upgrade istio-base istio/base --set defaultRevision=canary -n istio-system
安定版リビジョンラベル
名前空間を新しいリビジョンに移動するときに手動で再ラベル付けするのは、面倒でエラーが発生しやすい場合があります。リビジョンタグはこの問題を解決します。リビジョンタグは、リビジョンを指す安定した識別子であり、名前空間の再ラベル付けを回避するために使用できます。名前空間を再ラベル付けするのではなく、メッシュオペレーターはタグを変更して新しいリビジョンを指すようにするだけです。そのタグでラベル付けされたすべての名前空間が同時に更新されます。使用方法
1-23-1
と1-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 -
結果のリビジョン、タグ、および名前空間間のマッピングは、以下のとおりです。
クラスタオペレーターは、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 -
これで、更新されたリビジョン、タグ、および名前空間間のマッピングは、以下のとおりです。
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のインプレースアップグレードを実行できます。
Istioベースチャートをアップグレードします。
$ helm upgrade istio-base istio/base -n istio-system
Istioディスカバリチャートをアップグレードします。
$ helm upgrade istiod istio/istiod -n istio-system
(オプション)クラスタにインストールされているゲートウェイチャートをアップグレードします。
$ helm upgrade istio-ingress istio/gateway -n istio-ingress
アンインストール
Helmインストールガイドのアンインストールセクションを参照してください。