1.6. RevisionBased ストラテジーについて
RevisionBased ストラテジーでは、アップグレード中にコントロールプレーンの 2 つのリビジョンが実行されます。このアプローチでは、古いコントロールプレーンから新しいコントロールプレーンへの段階的なワークロード移行がサポートされており、カナリアアップグレードが可能です。また、複数のマイナーバージョンをまたぐアップグレードもサポートされています。
RevisionBased ストラテジーでは、spec.version フィールドの変更ごとに新しい Istio コントロールプレーンインスタンスが作成されます。すべてのワークロードが新しいインスタンスに移行するまで、既存のコントロールプレーンのアクティブ状態が維持されます。istio.io/rev ラベルを更新するか、IstioRevisionTag リソースを使用して再起動することで、ワークロードを新しいコントロールプレーンに移動できます。
RevisionBased ストラテジーでは追加のステップが必要で、アップグレード中に複数のコントロールプレーンインスタンスを同時に実行する必要もありますが、ワークロードを段階的に移行できます。このアプローチにより、残りのワークロードを移行する前に、更新されたコントロールプレーンを一部のワークロードで検証できるため、ミッションクリティカルなワークロードが含まれる大規模なメッシュに役立ちます。
1.6.1. RevisionBased ストラテジーの選択 リンクのコピーリンクがクリップボードにコピーされました!
RevisionBased ストラテジーを使用して Istio をデプロイするには、次の spec.updateStrategy 値を使用して Istio リソースを作成します。
RevisionBased ストラテジーを選択する仕様の例
kind: Istio
spec:
version: v1.24.4
updateStrategy:
type: RevisionBased
kind: Istio
spec:
version: v1.24.4
updateStrategy:
type: RevisionBased
Istio リソースのストラテジーを選択すると、Operator は <istio_resource_name>-<version> という名前の新しい IstioRevision リソースを作成します。
1.6.2. RevisionBased ストラテジーによる Istio のインストール リンクのコピーリンクがクリップボードにコピーされました!
RevisionBased 更新ストラテジーを使用して、Istio コントロールプレーン、Istio CNI、および Bookinfo デモアプリケーションをインストールできます。
更新プロセスについては、次のセクションを参照してください。クラスターにすでに Istio デプロイメントが含まれている場合は、このインストールをスキップできます。
手順
次のコマンドを実行して、
istio-systemnamespace を作成します。oc create ns istio-system
$ oc create ns istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow RevisionBased更新ストラテジーを使用して Istio コントロールプレーンをデプロイします。次の設定例では、istio-systemnamespace にdefaultという名前のIstioリソースを作成します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要なバージョンの Istio CNI プラグインをインストールします。次の設定例では、
istio-cninamespace にdefaultという名前のIstioCNIリソースを作成します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevision名を取得します。oc get istiorevision -n istio-system
$ oc get istiorevision -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-24-3 Local True Healthy False v1.24.3 3m4s
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-24-3 Local True Healthy False v1.24.3 3m4sCopy to Clipboard Copied! Toggle word wrap Toggle overflow IstioRevision名の形式は<istio_resource_name>-<version>です。クラスターで実行するアプリケーションワークロードを設定します。次の例では、
bookinfonamespace にinfoアプリケーションをデプロイします。次のコマンドを実行して、
infonamespace を作成します。oc create ns info
$ oc create ns infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
infonamespace にラベルを付け、サイドカーインジェクションを有効にします。oc label namespace info istio.io/rev=<revision_name>
$ oc label namespace info istio.io/rev=<revision_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
bookinfonamespace にinfoPod をインストールします。oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
$ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して
Istioリソースを確認します。oc get istio -n istio-system
$ oc get istio -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default-v1-24-3 Healthy v1.24.3 5m13s
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default-v1-24-3 Healthy v1.24.3 5m13sCopy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションをデプロイすると、
IN USEフィールドに1が表示されます。次のコマンドを実行して、プロキシーのバージョンがコントロールプレーンのバージョンと一致していることを確認します。
istioctl proxy-status
$ istioctl proxy-statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION列は、コントロールプレーンのバージョンと一致する必要があります。出力例
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-24-3 Local True Healthy True v1.24.3 5m31s
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-24-3 Local True Healthy True v1.24.3 5m31sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6.3. RevisionBased ストラテジーによる Istio コントロールプレーンの更新 リンクのコピーリンクがクリップボードにコピーされました!
RevisionBased ストラテジーを使用して Istio を更新する場合、一度に複数バージョン上のマイナーバージョンにアップグレードできます。Red Hat OpenShift Service Mesh Operator は、.spec.version フィールドを変更するたびに新しい IstioRevision リソースを作成し、対応するコントロールプレーンインスタンスをデプロイします。ワークロードを新しいコントロールプレーンに移行するには、namespace の istio.io/rev ラベルを IstioRevision リソースの名前と一致するように設定し、ワークロードを再起動します。
前提条件
-
cluster-adminロールを持つユーザーとして OpenShift Container Platform にログインしている。 -
Red Hat OpenShift Service Mesh Operator 3 をインストールし、
RevisionBasedストラテジーを使用して Istio をデプロイした。この例では、defaultという名前のIstioリソースがistio-systemnamespace にデプロイされます。 -
必要なバージョンの Istio CNI プラグインをインストールした。この例では、
defaultという名前のIstioCNIリソースがistio-cninamespace にデプロイされます。 -
サイドカーインジェクションを有効にするために、
infonamespace にラベルを付けた。 -
クラスター内でアプリケーションワークロードが実行されている。この例では、
infoアプリケーションがbookinfonamespace にデプロイされます。 -
ローカルマシンに
istioctlをインストールした。
手順
Istioリソースのバージョンを変更します。たとえば、Istio1.24.4に更新するには、次のコマンドを実行してspec.versionフィールドをv1.24.4に設定します。oc patch istio default --type='merge' -p '{"spec":{"version":"v1.24.4"}}'$ oc patch istio default --type='merge' -p '{"spec":{"version":"v1.24.4"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Istio CR のバージョン更新
kind: Istio spec: version: v1.24.4 updateStrategy: type: RevisionBasedkind: Istio spec: version: v1.24.4 updateStrategy: type: RevisionBasedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Service Mesh Operator は、コントロールプレーンの古いバージョンと並行して、コントロールプレーンの新しいバージョンをデプロイします。サイドカーは、古いコントロールプレーンに接続されたままになります。
IstioとIstioRevisionの両方のリソースが、新しいリビジョンで準備ができていることを確認します。次のコマンドを実行して、
Istioリソースの準備ができていることを確認します。oc get istio
$ oc get istioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 2 2 1 default-v1-2-4 Healthy v1.24.4 9m23s
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 2 2 1 default-v1-2-4 Healthy v1.24.4 9m23sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevisionリソースの準備ができていることを確認します。oc get istiorevision
$ oc get istiorevisionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-24-3 Local True Healthy True v1.24.3 10m default-v1-24-4 Local True Healthy False v1.24.4 66s
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-24-3 Local True Healthy True v1.24.3 10m default-v1-24-4 Local True Healthy False v1.24.4 66sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、リビジョンごとに 1 つずつ、合計 2 つのコントロールプレーン Pod が実行されていることを確認します。
oc get pods -n istio-system
$ oc get pods -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE istiod-default-v1-24-3-c98fd9675-r7bfw 1/1 Running 0 10m istiod-default-v1-24-4-7495cdc7bf-v8t4g 1/1 Running 0 113s
NAME READY STATUS RESTARTS AGE istiod-default-v1-24-3-c98fd9675-r7bfw 1/1 Running 0 10m istiod-default-v1-24-4-7495cdc7bf-v8t4g 1/1 Running 0 113sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ワークロードサイドカーが以前のコントロールプレーンにまだ接続されていることを確認します。
istioctl proxy-status
$ istioctl proxy-statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION列は、古いコントロールプレーンのバージョンと一致する必要があります。アプリケーションの namespace または Pod の
istio.io/revラベルをリビジョン名に更新して、ワークロードを新しいコントロールプレーンに移動します。たとえば、次のコマンドを実行して、namespace 全体のラベルを更新します。oc label namespace info istio.io/rev=<new_revision_name> --overwrite
$ oc label namespace info istio.io/rev=<new_revision_name> --overwriteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいバージョンのサイドカーが注入されるように、次のコマンドを入力してアプリケーションのワークロードを再起動します。
oc rollout restart deployment -n info
$ oc rollout restart deployment -n infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを入力して、サイドカーの新しいバージョンが実行されていることを確認します。
istioctl proxy-status
$ istioctl proxy-statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION列は、新しいコントロールプレーンのバージョンと一致する必要があります。古いコントロールプレーン、
Istio、IstioRevisionリソースが削除されていることを確認します。次のコマンドを実行して、古いコントロールプレーンが削除されたことを確認します。
oc get pods -n istio-system
$ oc get pods -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Istioリソースが削除されたことを確認します。oc get istio
$ oc get istioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevisionリソースが削除されたことを確認します。oc get istiorevision
$ oc get istiorevisionCopy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift Service Mesh Operator は、spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds フィールドで定義された猶予期間が経過すると、古い IstioRevision リソースおよび関連付けられたコントロールプレーンを削除します。デフォルトの猶予期間は 30 秒です。
猶予期間を長くして、以前のリビジョンを削除する前に新しいコントロールプレーンをテストするための十分な時間を確保できます。完全に移行する前にワークロードの安定性を確保できるよう、カナリアアップグレード中に高い値を設定します。
1.6.4. RevisionBased ストラテジーと IstioRevisionTag を使用して Istio をインストールする リンクのコピーリンクがクリップボードにコピーされました!
RevisionBased 更新ストラテジーを使用して、Istio コントロールプレーン、IstioRevisionTag リソース、Istio CNI、および Bookinfo デモアプリケーションをインストールできます。
更新プロセスについては、次のセクションを参照してください。クラスターにすでに Istio デプロイメントが含まれている場合は、このインストールをスキップできます。
手順
次のコマンドを実行して、
istio-systemnamespace を作成します。oc create ns istio-system
$ oc create ns istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow RevisionBased更新ストラテジーを使用して Istio コントロールプレーンをデプロイします。次の設定例では、istio-systemnamespace にdefaultという名前のIstioリソースを作成します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IstioRevisionTagリソースを作成します。次の設定例では、defaultという名前のIstioRevisionTagリソースを作成します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow targetRefフィールドが目的のIstioリソースを指していることを確認します。上記の例では、IstioRevisionTagはdefaultという名前のIstioリソースを参照します。次のコマンドを実行して、
istio-cninamespace を作成します。oc create ns istion-cni
$ oc create ns istion-cniCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要なバージョンの Istio CNI プラグインをインストールします。次の設定例では、
istio-cninamespace にdefaultという名前のIstioCNIリソースを作成します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターで実行するアプリケーションワークロードを設定します。次の例では、
bookinfonamespace にinfoアプリケーションをデプロイします。次のコマンドを実行して、
infonamespace を作成します。oc create ns info
$ oc create ns infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
infonamespace にラベルを付け、サイドカーインジェクションを有効にします。oc label namespace info istio-injection=enabled
$ oc label namespace info istio-injection=enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
bookinfonamespace にinfoPod をインストールします。oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
$ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、
IstioRevisionTagリソースを確認します。oc get istiorevisiontag
$ oc get istiorevisiontagCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME STATUS IN USE REVISION AGE default Healthy True default-v1-24-3 2m46s
NAME STATUS IN USE REVISION AGE default Healthy True default-v1-24-3 2m46sCopy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブなワークロードと
infonamespace の両方がタグを参照するようになったため、IN USEフィールドにはTrueが表示されます。次のコマンドを実行して、プロキシーのバージョンがコントロールプレーンのバージョンと一致していることを確認します。
istioctl proxy-status
$ istioctl proxy-statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION列は、コントロールプレーンのバージョンと一致する必要があります。出力例
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-24-3 Local True Healthy True v1.24.3 5m31s
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-24-3 Local True Healthy True v1.24.3 5m31sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6.5. RevisionBased ストラテジーと IstioRevisionTag を使用して Istio コントロールプレーンを更新する リンクのコピーリンクがクリップボードにコピーされました!
RevisionBased ストラテジーを使用して Istio を更新する場合、特定の IstioRevision リソースにタグを付ける IstioRevisionTag リソースを作成できます。IstioRevisionTag リソースを使用すると、namespace または Pod の istio.io/rev ラベルを変更せずに、特定の IstioRevision リソースにワークロードを割り当てることができます。
前提条件
-
cluster-adminロールを持つユーザーとして OpenShift Container Platform にログインしている。 -
Red Hat OpenShift Service Mesh Operator 3 をインストールし、
RevisionBasedストラテジーを使用して Istio をデプロイした。この例では、defaultという名前のIstioリソースがistio-systemnamespace にデプロイされます。 -
IstioRevisionTagリソースを作成し、targetRefフィールドは目的のIstioリソースを参照している。 - 必要なバージョンの Istio CNI プラグインをインストールした。
-
サイドカーインジェクションを有効にするために、
infonamespace にラベルを付けた。 -
クラスター内でアプリケーションワークロードが実行されている。この例では、
infoアプリケーションがbookinfonamespace にデプロイされます。 -
ローカルマシンに
istioctlをインストールした。 -
IstioRevisionTagリソースのInUseフィールドがtrueに設定されていることを確認した。
手順
Istioリソースのバージョンを変更します。たとえば、Istio1.24.4に更新するには、次のコマンドを実行してspec.versionフィールドをv1.24.4に設定します。oc patch istio default --type='merge' -p '{"spec":{"version":"v1.24.4"}}'$ oc patch istio default --type='merge' -p '{"spec":{"version":"v1.24.4"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Istio CR のバージョン更新
kind: Istio spec: version: v1.24.4 updateStrategy: type: RevisionBasedkind: Istio spec: version: v1.24.4 updateStrategy: type: RevisionBasedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Service Mesh Operator は、コントロールプレーンの古いバージョンと並行して、コントロールプレーンの新しいバージョンをデプロイします。サイドカーは、古いコントロールプレーンに接続されたままになります。
Istio、IstioRevision、およびIstioRevisionTagリソースが、新しいリビジョンで準備できていることを確認します。次のコマンドを実行して、
Istioリソースの準備ができていることを確認します。oc get istio
$ oc get istioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 2 2 1 default-v1-24-3 Healthy v1.24.3 9m23s
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 2 2 1 default-v1-24-3 Healthy v1.24.3 9m23sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevisionリソースの準備ができていることを確認します。oc get istiorevision
$ oc get istiorevisionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-24-3 Local True Healthy True v1.24.3 10m default-v1-24-4 Local True Healthy True v1.24.4 66s
NAME TYPE READY STATUS IN USE VERSION AGE default-v1-24-3 Local True Healthy True v1.24.3 10m default-v1-24-4 Local True Healthy True v1.24.4 66sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevisionTagリソースの準備ができていることを確認します。oc get istiorevisiontag
$ oc get istiorevisiontagCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME STATUS IN USE REVISION AGE default Healthy True default-v1-24-4 10m44s
NAME STATUS IN USE REVISION AGE default Healthy True default-v1-24-4 10m44sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、各リビジョンに対して 2 つのコントロールプレーン Pod の準備ができていることを確認します。
oc get pods -n istio-system
$ oc get pods -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE istiod-default-v1-24-3-c98fd9675-r7bfw 1/1 Running 0 10m istiod-default-v1-24-4-7495cdc7bf-v8t4g 1/1 Running 0 113s
NAME READY STATUS RESTARTS AGE istiod-default-v1-24-3-c98fd9675-r7bfw 1/1 Running 0 10m istiod-default-v1-24-4-7495cdc7bf-v8t4g 1/1 Running 0 113sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、プロキシーサイドカーのバージョンが同じであることを確認します。
istioctl proxy-status
$ istioctl proxy-statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION列は、古いコントロールプレーンのバージョンと一致する必要があります。新しいバージョンのサイドカーが注入されるように、次のコマンドを入力してアプリケーションのワークロードを再起動します。
oc rollout restart deployment -n info
$ oc rollout restart deployment -n infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを入力して、サイドカーの新しいバージョンが実行されていることを確認します。
istioctl proxy-status
$ istioctl proxy-statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION列は、新しいコントロールプレーンのバージョンと一致する必要があります。古いコントロールプレーン、
Istio、IstioRevisionリソースが削除されていることを確認します。次のコマンドを実行して、古いコントロールプレーンが削除されたことを確認します。
oc get pods -n istio-system
$ oc get pods -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Istioリソースが削除されたことを確認します。oc get istio
$ oc get istioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevisionリソースが削除されたことを確認します。oc get istiorevision
$ oc get istiorevisionCopy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift Service Mesh Operator は、spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds フィールドで定義された猶予期間が経過すると、古い IstioRevision リソースおよび関連付けられたコントロールプレーンを削除します。デフォルトの猶予期間は 30 秒です。
猶予期間を長くして、以前のリビジョンを削除する前に新しいコントロールプレーンをテストするための十分な時間を確保できます。完全に移行する前にワークロードの安定性を確保できるよう、カナリアアップグレード中に高い値を設定します。