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-system
namespace を作成します。oc create ns istio-system
$ oc create ns istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RevisionBased
更新ストラテジーを使用して Istio コントロールプレーンをデプロイします。次の設定例では、istio-system
namespace にdefault
という名前のIstio
リソースを作成します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要なバージョンの Istio CNI プラグインをインストールします。次の設定例では、
istio-cni
namespace にdefault
という名前のIstioCNI
リソースを作成します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevision
名を取得します。oc get istiorevision -n istio-system
$ oc get istiorevision -n istio-system
Copy 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 3m4s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IstioRevision
名の形式は<istio_resource_name>-<version>
です。クラスターで実行するアプリケーションワークロードを設定します。次の例では、
bookinfo
namespace にinfo
アプリケーションをデプロイします。次のコマンドを実行して、
info
namespace を作成します。oc create ns info
$ oc create ns info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
info
namespace にラベルを付け、サイドカーインジェクションを有効にします。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 次のコマンドを実行して、
bookinfo
namespace にinfo
Pod をインストールします。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 bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して
Istio
リソースを確認します。oc get istio -n istio-system
$ oc get istio -n istio-system
Copy 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 5m13s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションをデプロイすると、
IN USE
フィールドに1
が表示されます。次のコマンドを実行して、プロキシーのバージョンがコントロールプレーンのバージョンと一致していることを確認します。
istioctl proxy-status
$ istioctl proxy-status
Copy 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 5m31s
Copy 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-system
namespace にデプロイされます。 -
必要なバージョンの Istio CNI プラグインをインストールした。この例では、
default
という名前のIstioCNI
リソースがistio-cni
namespace にデプロイされます。 -
サイドカーインジェクションを有効にするために、
info
namespace にラベルを付けた。 -
クラスター内でアプリケーションワークロードが実行されている。この例では、
info
アプリケーションがbookinfo
namespace にデプロイされます。 -
ローカルマシンに
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: RevisionBased
kind: Istio spec: version: v1.24.4 updateStrategy: type: RevisionBased
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Service Mesh Operator は、コントロールプレーンの古いバージョンと並行して、コントロールプレーンの新しいバージョンをデプロイします。サイドカーは、古いコントロールプレーンに接続されたままになります。
Istio
とIstioRevision
の両方のリソースが、新しいリビジョンで準備ができていることを確認します。次のコマンドを実行して、
Istio
リソースの準備ができていることを確認します。oc get istio
$ oc get istio
Copy 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 9m23s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevision
リソースの準備ができていることを確認します。oc get istiorevision
$ oc get istiorevision
Copy 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 66s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、リビジョンごとに 1 つずつ、合計 2 つのコントロールプレーン Pod が実行されていることを確認します。
oc get pods -n istio-system
$ oc get pods -n istio-system
Copy 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 113s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ワークロードサイドカーが以前のコントロールプレーンにまだ接続されていることを確認します。
istioctl proxy-status
$ istioctl proxy-status
Copy 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> --overwrite
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいバージョンのサイドカーが注入されるように、次のコマンドを入力してアプリケーションのワークロードを再起動します。
oc rollout restart deployment -n info
$ oc rollout restart deployment -n info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを入力して、サイドカーの新しいバージョンが実行されていることを確認します。
istioctl proxy-status
$ istioctl proxy-status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION
列は、新しいコントロールプレーンのバージョンと一致する必要があります。古いコントロールプレーン、
Istio
、IstioRevision
リソースが削除されていることを確認します。次のコマンドを実行して、古いコントロールプレーンが削除されたことを確認します。
oc get pods -n istio-system
$ oc get pods -n istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Istio
リソースが削除されたことを確認します。oc get istio
$ oc get istio
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevision
リソースが削除されたことを確認します。oc get istiorevision
$ oc get istiorevision
Copy 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-system
namespace を作成します。oc create ns istio-system
$ oc create ns istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RevisionBased
更新ストラテジーを使用して Istio コントロールプレーンをデプロイします。次の設定例では、istio-system
namespace に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-cni
namespace を作成します。oc create ns istion-cni
$ oc create ns istion-cni
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要なバージョンの Istio CNI プラグインをインストールします。次の設定例では、
istio-cni
namespace にdefault
という名前のIstioCNI
リソースを作成します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターで実行するアプリケーションワークロードを設定します。次の例では、
bookinfo
namespace にinfo
アプリケーションをデプロイします。次のコマンドを実行して、
info
namespace を作成します。oc create ns info
$ oc create ns info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
info
namespace にラベルを付け、サイドカーインジェクションを有効にします。oc label namespace info istio-injection=enabled
$ oc label namespace info istio-injection=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
bookinfo
namespace にinfo
Pod をインストールします。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 bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、
IstioRevisionTag
リソースを確認します。oc get istiorevisiontag
$ oc get istiorevisiontag
Copy 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 2m46s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブなワークロードと
info
namespace の両方がタグを参照するようになったため、IN USE
フィールドにはTrue
が表示されます。次のコマンドを実行して、プロキシーのバージョンがコントロールプレーンのバージョンと一致していることを確認します。
istioctl proxy-status
$ istioctl proxy-status
Copy 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 5m31s
Copy 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-system
namespace にデプロイされます。 -
IstioRevisionTag
リソースを作成し、targetRef
フィールドは目的のIstio
リソースを参照している。 - 必要なバージョンの Istio CNI プラグインをインストールした。
-
サイドカーインジェクションを有効にするために、
info
namespace にラベルを付けた。 -
クラスター内でアプリケーションワークロードが実行されている。この例では、
info
アプリケーションがbookinfo
namespace にデプロイされます。 -
ローカルマシンに
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: RevisionBased
kind: Istio spec: version: v1.24.4 updateStrategy: type: RevisionBased
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Service Mesh Operator は、コントロールプレーンの古いバージョンと並行して、コントロールプレーンの新しいバージョンをデプロイします。サイドカーは、古いコントロールプレーンに接続されたままになります。
Istio
、IstioRevision
、およびIstioRevisionTag
リソースが、新しいリビジョンで準備できていることを確認します。次のコマンドを実行して、
Istio
リソースの準備ができていることを確認します。oc get istio
$ oc get istio
Copy 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 9m23s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevision
リソースの準備ができていることを確認します。oc get istiorevision
$ oc get istiorevision
Copy 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 66s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevisionTag
リソースの準備ができていることを確認します。oc get istiorevisiontag
$ oc get istiorevisiontag
Copy 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 10m44s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、各リビジョンに対して 2 つのコントロールプレーン Pod の準備ができていることを確認します。
oc get pods -n istio-system
$ oc get pods -n istio-system
Copy 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 113s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、プロキシーサイドカーのバージョンが同じであることを確認します。
istioctl proxy-status
$ istioctl proxy-status
Copy 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 info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを入力して、サイドカーの新しいバージョンが実行されていることを確認します。
istioctl proxy-status
$ istioctl proxy-status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION
列は、新しいコントロールプレーンのバージョンと一致する必要があります。古いコントロールプレーン、
Istio
、IstioRevision
リソースが削除されていることを確認します。次のコマンドを実行して、古いコントロールプレーンが削除されたことを確認します。
oc get pods -n istio-system
$ oc get pods -n istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Istio
リソースが削除されたことを確認します。oc get istio
$ oc get istio
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
IstioRevision
リソースが削除されたことを確認します。oc get istiorevision
$ oc get istiorevision
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift Service Mesh Operator は、spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds
フィールドで定義された猶予期間が経過すると、古い IstioRevision
リソースおよび関連付けられたコントロールプレーンを削除します。デフォルトの猶予期間は 30 秒です。
猶予期間を長くして、以前のリビジョンを削除する前に新しいコントロールプレーンをテストするための十分な時間を確保できます。完全に移行する前にワークロードの安定性を確保できるよう、カナリアアップグレード中に高い値を設定します。