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
Copy to Clipboard Toggle word wrap

Istio リソースのストラテジーを選択すると、Operator は <istio_resource_name>-<version> という名前の新しい IstioRevision リソースを作成します。

1.6.2. RevisionBased ストラテジーによる Istio のインストール

RevisionBased 更新ストラテジーを使用して、Istio コントロールプレーン、Istio CNI、および Bookinfo デモアプリケーションをインストールできます。

注記

更新プロセスについては、次のセクションを参照してください。クラスターにすでに Istio デプロイメントが含まれている場合は、このインストールをスキップできます。

手順

  1. 次のコマンドを実行して、istio-system namespace を作成します。

    $ oc create ns istio-system
    Copy to Clipboard Toggle word wrap
  2. RevisionBased 更新ストラテジーを使用して Istio コントロールプレーンをデプロイします。次の設定例では、istio-system namespace に default という名前の Istio リソースを作成します。

    設定例

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      namespace: istio-system
      version: v1.24.3
      updateStrategy:
        type: RevisionBased
    Copy to Clipboard Toggle word wrap

  3. 必要なバージョンの Istio CNI プラグインをインストールします。次の設定例では、istio-cni namespace に default という名前の IstioCNI リソースを作成します。

    設定例

    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    metadata:
      name: default
    spec:
      version: v1.24.3
      namespace: istio-cni
    Copy to Clipboard Toggle word wrap

  4. 次のコマンドを実行して、IstioRevision 名を取得します。

    $ oc get istiorevision -n istio-system
    Copy to Clipboard Toggle word wrap

    出力例

    NAME              TYPE    READY   STATUS    IN USE   VERSION   AGE
    default-v1-24-3   Local   True    Healthy   False    v1.24.3   3m4s
    Copy to Clipboard Toggle word wrap

    IstioRevision 名の形式は <istio_resource_name>-<version> です。

  5. クラスターで実行するアプリケーションワークロードを設定します。次の例では、bookinfo namespace に info アプリケーションをデプロイします。

    1. 次のコマンドを実行して、info namespace を作成します。

      $ oc create ns info
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、info namespace にラベルを付け、サイドカーインジェクションを有効にします。

      $ oc label namespace info istio.io/rev=<revision_name>
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、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
      Copy to Clipboard Toggle word wrap
  6. 次のコマンドを実行して Istio リソースを確認します。

    $ oc get istio -n istio-system
    Copy to Clipboard Toggle word wrap

    出力例

    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 Toggle word wrap

    アプリケーションをデプロイすると、IN USE フィールドに 1 が表示されます。

  7. 次のコマンドを実行して、プロキシーのバージョンがコントロールプレーンのバージョンと一致していることを確認します。

    $ istioctl proxy-status
    Copy to Clipboard Toggle word wrap

    VERSION 列は、コントロールプレーンのバージョンと一致する必要があります。

    出力例

    NAME              TYPE    READY   STATUS    IN USE   VERSION   AGE
    default-v1-24-3   Local   True    Healthy   True     v1.24.3   5m31s
    Copy to Clipboard Toggle word wrap

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 をインストールした。

手順

  1. Istio リソースのバージョンを変更します。たとえば、Istio 1.24.4 に更新するには、次のコマンドを実行して spec.version フィールドを v1.24.4 に設定します。

    $ oc patch istio default --type='merge' -p '{"spec":{"version":"v1.24.4"}}'
    Copy to Clipboard Toggle word wrap

    Istio CR のバージョン更新

    kind: Istio
    spec:
      version: v1.24.4
      updateStrategy:
        type: RevisionBased
    Copy to Clipboard Toggle word wrap

    Service Mesh Operator は、コントロールプレーンの古いバージョンと並行して、コントロールプレーンの新しいバージョンをデプロイします。サイドカーは、古いコントロールプレーンに接続されたままになります。

  2. IstioIstioRevision の両方のリソースが、新しいリビジョンで準備ができていることを確認します。

    1. 次のコマンドを実行して、Istio リソースの準備ができていることを確認します。

      $ oc get istio
      Copy to Clipboard Toggle word wrap

      出力例

      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 Toggle word wrap

    2. 次のコマンドを実行して、IstioRevision リソースの準備ができていることを確認します。

      $ oc get istiorevision
      Copy to Clipboard Toggle word wrap

      出力例

      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 Toggle word wrap

  3. 次のコマンドを実行して、リビジョンごとに 1 つずつ、合計 2 つのコントロールプレーン Pod が実行されていることを確認します。

    $ oc get pods -n istio-system
    Copy to Clipboard Toggle word wrap

    出力例

    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 Toggle word wrap

  4. 次のコマンドを実行して、ワークロードサイドカーが以前のコントロールプレーンにまだ接続されていることを確認します。

    $ istioctl proxy-status
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                                    CLUSTER        CDS                LDS                EDS                RDS                ECDS        ISTIOD                                     VERSION
    details-v1-7d775cb4f6-5t9zm.info                    Kubernetes     SYNCED (2m25s)     SYNCED (2m25s)     SYNCED (2m17s)     SYNCED (2m25s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    productpage-v1-7c4b6b857-mxrw6.info                 Kubernetes     SYNCED (2m35s)     SYNCED (2m35s)     SYNCED (2m17s)     SYNCED (2m35s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    ratings-v1-5b896f8544-r552l.info                    Kubernetes     SYNCED (2m21s)     SYNCED (2m21s)     SYNCED (2m17s)     SYNCED (2m21s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    reviews-v1-746f96c9d4-9pw8k.info                    Kubernetes     SYNCED (2m17s)     SYNCED (2m17s)     SYNCED (2m17s)     SYNCED (2m17s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    reviews-v2-97bdf5876-4mzx5.info                     Kubernetes     SYNCED (2m35s)     SYNCED (2m35s)     SYNCED (2m17s)     SYNCED (2m35s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    reviews-v3-77d9db6844-djgjk.info                    Kubernetes     SYNCED (2m19s)     SYNCED (2m19s)     SYNCED (2m17s)     SYNCED (2m19s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    Copy to Clipboard Toggle word wrap

    VERSION 列は、古いコントロールプレーンのバージョンと一致する必要があります。

  5. アプリケーションの namespace または Pod の istio.io/rev ラベルをリビジョン名に更新して、ワークロードを新しいコントロールプレーンに移動します。たとえば、次のコマンドを実行して、namespace 全体のラベルを更新します。

    $ oc label namespace info istio.io/rev=<new_revision_name> --overwrite
    Copy to Clipboard Toggle word wrap
  6. 新しいバージョンのサイドカーが注入されるように、次のコマンドを入力してアプリケーションのワークロードを再起動します。

    $ oc rollout restart deployment -n info
    Copy to Clipboard Toggle word wrap

検証

  1. 次のコマンドを入力して、サイドカーの新しいバージョンが実行されていることを確認します。

    $ istioctl proxy-status
    Copy to Clipboard Toggle word wrap

    VERSION 列は、新しいコントロールプレーンのバージョンと一致する必要があります。

  2. 古いコントロールプレーン、IstioIstioRevision リソースが削除されていることを確認します。

    1. 次のコマンドを実行して、古いコントロールプレーンが削除されたことを確認します。

      $ oc get pods -n istio-system
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、Istio リソースが削除されたことを確認します。

      $ oc get istio
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、IstioRevision リソースが削除されたことを確認します。

      $ oc get istiorevision
      Copy to Clipboard Toggle word wrap

OpenShift Service Mesh Operator は、spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds フィールドで定義された猶予期間が経過すると、古い IstioRevision リソースおよび関連付けられたコントロールプレーンを削除します。デフォルトの猶予期間は 30 秒です。

猶予期間を長くして、以前のリビジョンを削除する前に新しいコントロールプレーンをテストするための十分な時間を確保できます。完全に移行する前にワークロードの安定性を確保できるよう、カナリアアップグレード中に高い値を設定します。

1.6.4. RevisionBased ストラテジーと IstioRevisionTag を使用して Istio をインストールする

RevisionBased 更新ストラテジーを使用して、Istio コントロールプレーン、IstioRevisionTag リソース、Istio CNI、および Bookinfo デモアプリケーションをインストールできます。

注記

更新プロセスについては、次のセクションを参照してください。クラスターにすでに Istio デプロイメントが含まれている場合は、このインストールをスキップできます。

手順

  1. 次のコマンドを実行して、istio-system namespace を作成します。

    $ oc create ns istio-system
    Copy to Clipboard Toggle word wrap
  2. RevisionBased 更新ストラテジーを使用して Istio コントロールプレーンをデプロイします。次の設定例では、istio-system namespace に default という名前の Istio リソースを作成します。

    設定例

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      namespace: istio-system
      updateStrategy:
        type: RevisionBased
      version: v1.24.3
    Copy to Clipboard Toggle word wrap

  3. IstioRevisionTag リソースを作成します。次の設定例では、default という名前の IstioRevisionTag リソースを作成します。

    設定例

    apiVersion: sailoperator.io/v1
    kind: IstioRevisionTag
    metadata:
      name: default
    spec:
      targetRef:
        kind: Istio
        name: default
    Copy to Clipboard Toggle word wrap

    targetRef フィールドが目的の Istio リソースを指していることを確認します。上記の例では、IstioRevisionTagdefault という名前の Istio リソースを参照します。

  4. 次のコマンドを実行して、istio-cni namespace を作成します。

    $ oc create ns istion-cni
    Copy to Clipboard Toggle word wrap
  5. 必要なバージョンの Istio CNI プラグインをインストールします。次の設定例では、istio-cni namespace に default という名前の IstioCNI リソースを作成します。

    設定例

    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    metadata:
      name: default
    spec:
      version: v1.24.3
      namespace: istio-cni
    Copy to Clipboard Toggle word wrap

  6. クラスターで実行するアプリケーションワークロードを設定します。次の例では、bookinfo namespace に info アプリケーションをデプロイします。

    1. 次のコマンドを実行して、info namespace を作成します。

      $ oc create ns info
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、info namespace にラベルを付け、サイドカーインジェクションを有効にします。

      $ oc label namespace info istio-injection=enabled
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、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
      Copy to Clipboard Toggle word wrap
  7. 次のコマンドを実行して、IstioRevisionTag リソースを確認します。

    $ oc get istiorevisiontag
    Copy to Clipboard Toggle word wrap

    出力例

    NAME      STATUS    IN USE   REVISION          AGE
    default   Healthy   True     default-v1-24-3   2m46s
    Copy to Clipboard Toggle word wrap

    アクティブなワークロードと info namespace の両方がタグを参照するようになったため、IN USE フィールドには True が表示されます。

  8. 次のコマンドを実行して、プロキシーのバージョンがコントロールプレーンのバージョンと一致していることを確認します。

    $ istioctl proxy-status
    Copy to Clipboard Toggle word wrap

    VERSION 列は、コントロールプレーンのバージョンと一致する必要があります。

    出力例

    NAME              TYPE    READY   STATUS    IN USE   VERSION   AGE
    default-v1-24-3   Local   True    Healthy   True     v1.24.3   5m31s
    Copy to Clipboard Toggle word wrap

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 に設定されていることを確認した。

手順

  1. Istio リソースのバージョンを変更します。たとえば、Istio 1.24.4 に更新するには、次のコマンドを実行して spec.version フィールドを v1.24.4 に設定します。

    $ oc patch istio default --type='merge' -p '{"spec":{"version":"v1.24.4"}}'
    Copy to Clipboard Toggle word wrap

    Istio CR のバージョン更新

    kind: Istio
    spec:
      version: v1.24.4
      updateStrategy:
        type: RevisionBased
    Copy to Clipboard Toggle word wrap

    Service Mesh Operator は、コントロールプレーンの古いバージョンと並行して、コントロールプレーンの新しいバージョンをデプロイします。サイドカーは、古いコントロールプレーンに接続されたままになります。

  2. IstioIstioRevision、および IstioRevisionTag リソースが、新しいリビジョンで準備できていることを確認します。

    1. 次のコマンドを実行して、Istio リソースの準備ができていることを確認します。

      $ oc get istio
      Copy to Clipboard Toggle word wrap

      出力例

      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 Toggle word wrap

    2. 次のコマンドを実行して、IstioRevision リソースの準備ができていることを確認します。

      $ oc get istiorevision
      Copy to Clipboard Toggle word wrap

      出力例

      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 Toggle word wrap

    3. 次のコマンドを実行して、IstioRevisionTag リソースの準備ができていることを確認します。

      $ oc get istiorevisiontag
      Copy to Clipboard Toggle word wrap

      出力例

      NAME      STATUS    IN USE   REVISION          AGE
      default   Healthy   True     default-v1-24-4   10m44s
      Copy to Clipboard Toggle word wrap

  3. 次のコマンドを実行して、各リビジョンに対して 2 つのコントロールプレーン Pod の準備ができていることを確認します。

    $ oc get pods -n istio-system
    Copy to Clipboard Toggle word wrap

    出力例

    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 Toggle word wrap

  4. 次のコマンドを実行して、プロキシーサイドカーのバージョンが同じであることを確認します。

    $ istioctl proxy-status
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                                    CLUSTER        CDS                LDS                EDS                RDS                ECDS        ISTIOD                                     VERSION
    details-v1-7d775cb4f6-5t9zm.info                    Kubernetes     SYNCED (2m25s)     SYNCED (2m25s)     SYNCED (2m17s)     SYNCED (2m25s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    productpage-v1-7c4b6b857-mxrw6.info                 Kubernetes     SYNCED (2m35s)     SYNCED (2m35s)     SYNCED (2m17s)     SYNCED (2m35s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    ratings-v1-5b896f8544-r552l.info                    Kubernetes     SYNCED (2m21s)     SYNCED (2m21s)     SYNCED (2m17s)     SYNCED (2m21s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    reviews-v1-746f96c9d4-9pw8k.info                    Kubernetes     SYNCED (2m17s)     SYNCED (2m17s)     SYNCED (2m17s)     SYNCED (2m17s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    reviews-v2-97bdf5876-4mzx5.info                     Kubernetes     SYNCED (2m35s)     SYNCED (2m35s)     SYNCED (2m17s)     SYNCED (2m35s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    reviews-v3-77d9db6844-djgjk.info                    Kubernetes     SYNCED (2m19s)     SYNCED (2m19s)     SYNCED (2m17s)     SYNCED (2m19s)     IGNORED     istiod-default-v1-24-3-c98fd9675-r7bfw     1.24.3
    Copy to Clipboard Toggle word wrap

    VERSION 列は、古いコントロールプレーンのバージョンと一致する必要があります。

  5. 新しいバージョンのサイドカーが注入されるように、次のコマンドを入力してアプリケーションのワークロードを再起動します。

    $ oc rollout restart deployment -n info
    Copy to Clipboard Toggle word wrap

検証

  1. 次のコマンドを入力して、サイドカーの新しいバージョンが実行されていることを確認します。

    $ istioctl proxy-status
    Copy to Clipboard Toggle word wrap

    VERSION 列は、新しいコントロールプレーンのバージョンと一致する必要があります。

  2. 古いコントロールプレーン、IstioIstioRevision リソースが削除されていることを確認します。

    1. 次のコマンドを実行して、古いコントロールプレーンが削除されたことを確認します。

      $ oc get pods -n istio-system
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、Istio リソースが削除されたことを確認します。

      $ oc get istio
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、IstioRevision リソースが削除されたことを確認します。

      $ oc get istiorevision
      Copy to Clipboard Toggle word wrap

OpenShift Service Mesh Operator は、spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds フィールドで定義された猶予期間が経過すると、古い IstioRevision リソースおよび関連付けられたコントロールプレーンを削除します。デフォルトの猶予期間は 30 秒です。

猶予期間を長くして、以前のリビジョンを削除する前に新しいコントロールプレーンをテストするための十分な時間を確保できます。完全に移行する前にワークロードの安定性を確保できるよう、カナリアアップグレード中に高い値を設定します。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat