Istio 与 RevisionBased 策略及 IstioRevisionTag
目录
使用 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 更新策略时,可以使用 IstioRevisionTag 资源为特定的 IstioRevision 打标签,从而无需修改命名空间或 Pod 上的 istio.io/rev 标签即可将工作负载绑定到该版本。
前提条件
- 您已以 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
- 已安装 Alauda Service Mesh v2 Operator 并部署了 Istio。
- 已安装 Alauda Container Platform 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.26.3,通过以下命令将 spec.version 字段设置为v1.26.3:Istio CR 中的版本更新
Service Mesh v2 Operator 会在旧版本控制平面旁边部署新版本控制平面,sidecar 仍连接旧控制平面。
-
确认新的
Istio和IstioRevision资源均已就绪。a. 通过以下命令确认
Istio资源已就绪:示例输出
b. 通过以下命令确认
IstioRevision资源已就绪:示例输出
c. 通过以下命令确认
IstioRevisionTag资源已就绪:示例输出
-
通过以下命令确认有两个控制平面 Pod 运行,分别对应两个版本:
示例输出
-
通过以下命令确认工作负载 sidecar 仍连接旧控制平面:
示例输出
VERSION列应与旧控制平面版本匹配。 -
通过以下命令重启应用工作负载,以便注入新版本 sidecar:
验证
-
通过以下命令验证新版本 sidecar 是否运行:
VERSION列应与新控制平面版本匹配。 -
验证旧控制平面、
Istio和IstioRevision资源是否已被删除。a. 通过以下命令验证旧控制平面是否已删除:
b. 通过以下命令验证
Istio资源是否已删除:c. 通过以下命令验证
IstioRevision资源是否已删除:
Alauda Service Mesh v2 Operator 会在 spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds 字段定义的宽限期结束后删除旧的 IstioRevision 资源及其关联的控制平面。默认宽限期为 30 秒。
您可以增加宽限期,以便在移除旧版本之前有足够时间测试新控制平面。在金丝雀升级期间,设置更长的宽限期可确保工作负载稳定后再完成切换。