使用 RevisionBased 策略和 IstioRevisionTag 的 Istio
目录
使用 RevisionBased 策略和 IstioRevisionTag 安装 Istio操作步骤使用 RevisionBased 策略和 IstioRevisionTag 更新 Istio 控制平面前提条件操作步骤验证从开发环境中移除 RevisionBased 更新资源使用 RevisionBased 策略和 IstioRevisionTag 安装 Istio
您可以使用 RevisionBased 更新策略安装 Istio 控制平面、IstioRevisionTag 资源、Istio CNI 和 Bookinfo 示例原生应用。
您可以使用以下部分了解更新过程。如果集群中已经包含 Istio 部署,则可以跳过此安装。
操作步骤
-
通过运行以下命令创建
istio-cni和istio-system命名空间: -
使用所需版本安装 Istio CNI 插件。以下示例配置会在
istio-cni命名空间中创建一个名为 default 的IstioCNI资源: -
使用
RevisionBased更新策略部署 Istio 控制平面。以下示例配置会在istio-system命名空间中创建一个名为default的Istio资源:示例配置
-
创建一个
IstioRevisionTag资源。下面的 YAML 示例展示了如何创建一个名为default的资源:示例配置
确保
targetRef字段指向正确的Istio资源。在提供的示例中,IstioRevisionTag配置为引用名为default的Istio资源。 -
通过运行以下命令获取
IstioRevision名称:示例输出
IstioRevision名称的格式为<istio_resource_name>-<version>。 -
设置应用工作负载在集群中运行。例如,您可以将
bookinfo示例原生应用部署到bookinfo命名空间中。a. 使用以下命令创建
bookinfo命名空间:b. 为
bookinfo命名空间添加标签,以启用自动 sidecar 注入。使用以下命令:c. 通过执行以下命令将
bookinfo原生应用 Pod 部署到bookinfo命名空间: -
使用以下命令检查
IstioRevisionTag资源:示例输出
IN USE字段显示为True,因为当前活动工作负载和bookinfo命名空间都在引用该标签。 -
通过运行以下命令确认代理版本与控制平面版本匹配:
VERSION列应与控制平面版本一致。示例输出
使用 RevisionBased 策略和 IstioRevisionTag 更新 Istio 控制平面
对于使用 RevisionBased 更新策略的 Istio,可以使用 IstioRevisionTag 资源为特定的 IstioRevision 打标签。这样,您无需修改命名空间或 Pod 上的 istio.io/rev 标签,即可将工作负载关联到该 revision。
前提条件
- 您已使用 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
- 您已部署 Istio,并将 Alauda Service Mesh v2 Operator 升级到提供新目标 Istio 版本的版本。有关更多信息,请参见 了解 Operator 更新和通道。
- 您已安装 Alauda Container Platform Networking for Multus 插件,并且 kube-ovn 版本必须为 v4.1.5 或更高。
- 您已在本地机器上安装
istioctl。 - 您已将 Istio 控制平面配置为使用
RevisionBased更新策略。在此示例中,名为default的Istio资源部署在istio-system命名空间中。 - 您已创建
IstioRevisionTag资源,并且targetRef字段已正确指向所需的Istio资源。 - 您已使用所需版本安装 Istio CNI 插件。在此示例中,名为
default的IstioCNI资源部署在istio-cni命名空间中。 - 您已为
bookinfo命名空间添加标签,以启用 sidecar 注入。 - 您的集群中已有正在运行的应用工作负载。在此示例中,bookinfo 应用部署在
bookinfo命名空间中。 - 您已验证
IstioRevisionTag资源的InUse字段为true。
操作步骤
-
更改
Istio资源中的版本。例如,要更新到 Istio1.28.6,请通过运行以下命令将spec.version字段设置为v1.28.6:Istio CR 中的版本更新
Service Mesh v2 Operator 会在旧控制平面旁边部署一个新版本的控制平面。sidecar 仍然连接到旧控制平面。
-
确认
Istio和IstioRevision资源在新 revision 下均处于就绪状态。a. 通过运行以下命令确认
Istio资源已就绪:示例输出
b. 通过运行以下命令确认
IstioRevision资源已就绪:示例输出
c. 通过运行以下命令确认
IstioRevisionTag资源已就绪:示例输出
-
通过运行以下命令确认有两个控制平面 Pod 在运行,每个 revision 一个:
示例输出
-
通过运行以下命令确认工作负载 sidecar 仍然连接到之前的控制平面:
示例输出
VERSION列应与旧控制平面版本一致。 -
将 Istio CNI 插件更新到与新控制平面 revision 相同的版本。
IstioCNI资源是独立于Istio资源进行更新的,并且在迁移期间,更新后的 CNI 插件会继续为两个控制平面 revision 重定向流量。有关详细步骤,请参见 Istio CNI 更新过程。 -
重启应用工作负载,以便注入新版本的 sidecar,执行以下命令:
验证
-
通过输入以下命令验证正在运行的是新版本的 sidecar:
VERSION列应与新控制平面版本一致。 -
验证旧控制平面、
Istio和IstioRevision资源已被删除。a. 通过运行以下命令验证旧控制平面已被删除:
b. 通过运行以下命令验证
Istio资源已被删除:c. 通过运行以下命令验证
IstioRevision资源已被删除:
Alauda Service Mesh v2 Operator 会在 spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds 字段定义的宽限期结束后,删除旧的 IstioRevision 资源及其关联的控制平面。默认宽限期为 30 秒。
您可以增加宽限期,以便在移除前一个 revision 之前,有足够时间测试新控制平面。在金丝雀升级期间设置更高的值,可在完全切换之前确保工作负载稳定性。
从开发环境中移除 RevisionBased 更新资源
在完成验证和实验后,您应移除 RevisionBased 更新配置和 IstioRevisionTag 资源,以清理开发环境并释放资源。
操作步骤
执行以下命令以移除所有 Istio 组件和示例应用: