1.6. 关于基于修订的策略


RevisionBased 策略在升级过程中运行 control plane 的两个修订版本。这种方法支持从旧的 control plane 逐步工作负载迁移到新 control plane,从而启用 Canary 升级。它还支持在多个次版本间进行升级。

RevisionBased 策略会在每次对 spec.version 字段的更改创建一个新的 Istio control plane 实例。现有的 control plane 保持活跃状态,直到所有工作负载都过渡到新实例。您可以通过更新 istio.io/rev 标签或使用 IstioRevisionTag 资源将工作负载移到新的 control plane 中,然后重启。

虽然 Revisionbased 策略涉及额外的步骤,并需要多个 control plane 实例在升级过程中同时运行,但它允许逐步迁移工作负载。这种方法允许在迁移剩余部分工作负载前验证更新的 control plane,使其对具有任务关键型工作负载的大型网格很有用。

1.6.1. 选择基于修订版本的策略

要使用 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 Revision 资源,其名称为 < istio_resource_name>-<version>

1.6.2. 使用基于修订版本的策略安装 Istio

您可以使用 基于 Revision 的更新策略安装 Istio control plane、Istio CNI 和 Bookinfo 演示应用程序。

注意

您可以使用以下部分来了解更新过程。如果集群已经包含 Istio 部署,您可以跳过此安装。

流程

  1. 运行以下命令来创建 istio-system 命名空间:

    $ oc create ns istio-system
    Copy to Clipboard Toggle word wrap
  2. 使用 RevisionBased 更新策略部署 Istio control plane。以下示例配置在 istio-system 命名空间中创建一个名为 defaultIstio 资源:

    配置示例

    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 命名空间中创建一个名为 defaultIstioCNI 资源:

    配置示例

    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 命名空间中部署 info 应用程序:

    1. 运行以下命令来创建 info 命名空间:

      $ oc create ns info
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令,标记 info 命名空间以启用 sidecar 注入:

      $ oc label namespace info istio.io/rev=<revision_name>
      Copy to Clipboard Toggle word wrap
    3. 运行以下命令,在 bookinfo 命名空间中安装 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. 运行以下命令确认代理版本与 control plane 版本匹配:

    $ istioctl proxy-status
    Copy to Clipboard Toggle word wrap

    VERSION 列应当与 control plane 版本匹配。

    输出示例

    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 策略时,您可以一次升级多个次版本。Red Hat OpenShift Service Mesh Operator 为每个更改 .spec.version 字段创建一个新的 IstioRevision 资源,并部署对应的 control plane 实例。要将工作负载迁移到新的 control plane,请在命名空间上设置 istio.io/rev 标签,以匹配 IstioRevision 资源的名称,然后重启工作负载。

先决条件

  • 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform。
  • 已安装 Red Hat OpenShift Service Mesh Operator 3,并使用 基于 Revision 的策略部署了 Istio。在本例中,名为 defaultIstio 资源部署在 istio-system 命名空间中。
  • 您已使用所需版本安装了 Istio CNI 插件。在本例中,名为 defaultIstioCNI 资源部署在 istio-cni 命名空间中。
  • 您已标记了 info 命名空间以启用 sidecar 注入。
  • 已在集群中运行应用程序工作负载。在本例中,info 应用程序部署在 bookinfo 命名空间中。
  • 您已在本地机器上安装了 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 部署 control plane 的新版本,以及 control plane 的旧版本。sidecar 仍然连接到旧的 control plane。

  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. 运行以下命令确认有两个 control plane 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. 运行以下命令确认工作负载 sidecar 仍然连接到以前的 control plane:

    $ 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 列应当与旧的 control plane 版本匹配。

  5. 通过将应用程序命名空间或 pod 上的 istio.io/rev 标签更新为修订名称,将工作负载移到新的 control plane 中。例如,运行以下命令来更新整个命名空间的标签:

    $ oc label namespace info istio.io/rev=<new_revision_name> --overwrite
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令重启应用程序工作负载,以便注入新版本的 sidecar:

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

验证

  1. 输入以下命令验证 sidecar 的新版本是否正在运行:

    $ istioctl proxy-status
    Copy to Clipboard Toggle word wrap

    VERSION 列应当与新的 control plane 版本匹配。

  2. 验证旧的 control plane、IstioIstioRevision 资源已被删除。

    1. 运行以下命令验证旧的 control plane 是否已删除:

      $ 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 资源以及关联的 control plane。默认宽限期为 30 秒。

您可以增加宽限期,以便有足够的时间在删除之前的修订版本前测试新的 control plane。在 canary 升级过程中设置一个更高的值,以确保工作负载在完全迁移前的稳定性。

您可以使用 RevisionBased update 策略安装 Istio control plane、IstioRevisionTag 资源、Istio CNI 和 Bookinfo 演示应用程序。

注意

您可以使用以下部分来了解更新过程。如果集群已经包含 Istio 部署,您可以跳过此安装。

流程

  1. 运行以下命令来创建 istio-system 命名空间:

    $ oc create ns istio-system
    Copy to Clipboard Toggle word wrap
  2. 使用 RevisionBased 更新策略部署 Istio control plane。以下示例配置在 istio-system 命名空间中创建一个名为 defaultIstio 资源:

    配置示例

    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 资源。以下示例配置创建一个名为 defaultIstioRevisionTag 资源:

    配置示例

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

    验证 targetRef 字段是否指向所需的 Istio 资源。在上例中,IstioRevisionTag 引用名为 defaultIstio 资源。

  4. 运行以下命令来创建 istio-cni 命名空间:

    $ oc create ns istion-cni
    Copy to Clipboard Toggle word wrap
  5. 使用所需版本安装 Istio CNI 插件。以下示例配置在 istio-cni 命名空间中创建一个名为 defaultIstioCNI 资源:

    配置示例

    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 命名空间中部署 info 应用程序。

    1. 运行以下命令来创建 info 命名空间:

      $ oc create ns info
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令,标记 info 命名空间以启用 sidecar 注入:

      $ oc label namespace info istio-injection=enabled
      Copy to Clipboard Toggle word wrap
    3. 运行以下命令,在 bookinfo 命名空间中安装 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

    IN USE 字段显示为 True,因为活跃的工作负载和 info 命名空间现在都引用该标签。

  8. 运行以下命令确认代理版本与 control plane 版本匹配:

    $ istioctl proxy-status
    Copy to Clipboard Toggle word wrap

    VERSION 列应当与 control plane 版本匹配。

    输出示例

    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 策略时,您可以创建一个 IstioRevisionTag 资源来标记特定的 IstioRevision 资源。您可以使用 IstioRevisionTag 资源将工作负载附加到特定的 IstioRevision 资源,而无需修改命名空间或 pod 上的 istio.io/rev 标签。

先决条件

  • 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform。
  • 已安装 Red Hat OpenShift Service Mesh Operator 3,并使用 基于 Revision 的策略部署了 Istio。在本例中,名为 defaultIstio 资源部署在 istio-system 命名空间中。
  • 您已创建了 IstioRevisionTag 资源,而 targetRef 字段引用所需的 Istio 资源。
  • 您已使用所需版本安装了 Istio CNI 插件。
  • 您已标记了 info 命名空间以启用 sidecar 注入。
  • 已在集群中运行应用程序工作负载。在本例中,info 应用程序部署在 bookinfo 命名空间中。
  • 您已在本地机器上安装了 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 部署 control plane 的新版本,以及 control plane 的旧版本。sidecar 仍然连接到旧的 control plane。

  2. 确认 IstioIstioRevisionIstioRevisionTag 资源可用于新修订版本。

    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. 运行以下命令,确认每个修订版本有两个 control plane 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. 运行以下命令确认代理 sidecar 版本相同:

    $ 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 列应当与旧的 control plane 版本匹配。

  5. 运行以下命令重启应用程序工作负载,以便注入新版本的 sidecar:

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

验证

  1. 输入以下命令验证 sidecar 的新版本是否正在运行:

    $ istioctl proxy-status
    Copy to Clipboard Toggle word wrap

    VERSION 列应当与新的 control plane 版本匹配。

  2. 验证旧的 control plane、IstioIstioRevision 资源已被删除。

    1. 运行以下命令验证旧的 control plane 是否已删除:

      $ 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 资源以及关联的 control plane。默认宽限期为 30 秒。

您可以增加宽限期,以便有足够的时间在删除之前的修订版本前测试新的 control plane。在 canary 升级过程中设置一个更高的值,以确保工作负载在完全迁移前的稳定性。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat