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
kind: Istio
spec:
version: v1.24.4
updateStrategy:
type: RevisionBased
为 Istio 资源选择策略后,Operator 会创建一个新的
资源,其名称为 < Istio
Revisionistio_resource_name>-<version>
。
1.6.2. 使用基于修订版本的策略安装 Istio 复制链接链接已复制到粘贴板!
您可以使用 基于 Revision
的更新策略安装 Istio control plane、Istio CNI 和 Bookinfo 演示应用程序。
您可以使用以下部分来了解更新过程。如果集群已经包含 Istio 部署,您可以跳过此安装。
流程
运行以下命令来创建
istio-system
命名空间:oc create ns istio-system
$ oc create ns istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
RevisionBased
更新策略部署 Istio control plane。以下示例配置在istio-system
命名空间中创建一个名为default
的Istio
资源:配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用所需版本安装 Istio CNI 插件。以下示例配置在
istio-cni
命名空间中创建一个名为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
命名空间中部署info
应用程序:运行以下命令来创建
info
命名空间:oc create ns info
$ oc create ns info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,标记
info
命名空间以启用 sidecar 注入: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
命名空间中安装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
。运行以下命令确认代理版本与 control plane 版本匹配:
istioctl proxy-status
$ istioctl proxy-status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION
列应当与 control plane 版本匹配。输出示例
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. 使用基于修订版本的策略更新 Istio control plane 复制链接链接已复制到粘贴板!
当使用 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。在本例中,名为default
的Istio
资源部署在istio-system
命名空间中。 -
您已使用所需版本安装了 Istio CNI 插件。在本例中,名为
default
的IstioCNI
资源部署在istio-cni
命名空间中。 -
您已标记了
info
命名空间以启用 sidecar 注入。 -
已在集群中运行应用程序工作负载。在本例中,
info
应用程序部署在bookinfo
命名空间中。 -
您已在本地机器上安装了
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 部署 control plane 的新版本,以及 control plane 的旧版本。sidecar 仍然连接到旧的 control plane。
确认
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
运行以下命令确认有两个 control plane 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 运行以下命令确认工作负载 sidecar 仍然连接到以前的 control plane:
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
列应当与旧的 control plane 版本匹配。通过将应用程序命名空间或 pod 上的
istio.io/rev
标签更新为修订名称,将工作负载移到新的 control plane 中。例如,运行以下命令来更新整个命名空间的标签: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 运行以下命令重启应用程序工作负载,以便注入新版本的 sidecar:
oc rollout restart deployment -n info
$ oc rollout restart deployment -n info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令验证 sidecar 的新版本是否正在运行:
istioctl proxy-status
$ istioctl proxy-status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION
列应当与新的 control plane 版本匹配。验证旧的 control plane、
Istio
和IstioRevision
资源已被删除。运行以下命令验证旧的 control plane 是否已删除:
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
资源以及关联的 control plane。默认宽限期为 30 秒。
您可以增加宽限期,以便有足够的时间在删除之前的修订版本前测试新的 control plane。在 canary 升级过程中设置一个更高的值,以确保工作负载在完全迁移前的稳定性。
1.6.4. 使用基于修订版本的策略和 IstioRevisionTag 安装 Istio 复制链接链接已复制到粘贴板!
您可以使用 RevisionBased
update 策略安装 Istio control plane、IstioRevisionTag
资源、Istio CNI 和 Bookinfo 演示应用程序。
您可以使用以下部分来了解更新过程。如果集群已经包含 Istio 部署,您可以跳过此安装。
流程
运行以下命令来创建
istio-system
命名空间:oc create ns istio-system
$ oc create ns istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
RevisionBased
更新策略部署 Istio control plane。以下示例配置在istio-system
命名空间中创建一个名为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
命名空间:oc create ns istion-cni
$ oc create ns istion-cni
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用所需版本安装 Istio CNI 插件。以下示例配置在
istio-cni
命名空间中创建一个名为default
的IstioCNI
资源:配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置应用程序工作负载以在集群中运行。以下示例在
bookinfo
命名空间中部署info
应用程序。运行以下命令来创建
info
命名空间:oc create ns info
$ oc create ns info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,标记
info
命名空间以启用 sidecar 注入:oc label namespace info istio-injection=enabled
$ oc label namespace info istio-injection=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在
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
$ 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 IN USE
字段显示为True
,因为活跃的工作负载和info
命名空间现在都引用该标签。运行以下命令确认代理版本与 control plane 版本匹配:
istioctl proxy-status
$ istioctl proxy-status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION
列应当与 control plane 版本匹配。输出示例
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
当使用 RevisionBased
策略时,您可以创建一个 IstioRevisionTag
资源来标记特定的 IstioRevision
资源。您可以使用 IstioRevisionTag
资源将工作负载附加到特定的 IstioRevision
资源,而无需修改命名空间或 pod 上的 istio.io/rev
标签。
先决条件
-
以具有
cluster-admin
角色的用户身份登录到 OpenShift Container Platform。 -
已安装 Red Hat OpenShift Service Mesh Operator 3,并使用
基于 Revision
的策略部署了 Istio。在本例中,名为default
的Istio
资源部署在istio-system
命名空间中。 -
您已创建了
IstioRevisionTag
资源,而targetRef
字段引用所需的Istio
资源。 - 您已使用所需版本安装了 Istio CNI 插件。
-
您已标记了
info
命名空间以启用 sidecar 注入。 -
已在集群中运行应用程序工作负载。在本例中,
info
应用程序部署在bookinfo
命名空间中。 -
您已在本地机器上安装了
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 部署 control plane 的新版本,以及 control plane 的旧版本。sidecar 仍然连接到旧的 control plane。
确认
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
运行以下命令,确认每个修订版本有两个 control plane 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 运行以下命令确认代理 sidecar 版本相同:
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
列应当与旧的 control plane 版本匹配。运行以下命令重启应用程序工作负载,以便注入新版本的 sidecar:
oc rollout restart deployment -n info
$ oc rollout restart deployment -n info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令验证 sidecar 的新版本是否正在运行:
istioctl proxy-status
$ istioctl proxy-status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION
列应当与新的 control plane 版本匹配。验证旧的 control plane、
Istio
和IstioRevision
资源已被删除。运行以下命令验证旧的 control plane 是否已删除:
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
资源以及关联的 control plane。默认宽限期为 30 秒。
您可以增加宽限期,以便有足够的时间在删除之前的修订版本前测试新的 control plane。在 canary 升级过程中设置一个更高的值,以确保工作负载在完全迁移前的稳定性。