使用 RevisionBased 策略的 Istio
目录
使用 RevisionBased 策略安装 Istio操作步骤使用 RevisionBased 策略更新 Istio 控制平面前提条件操作步骤验证从开发环境中移除 RevisionBased 更新资源使用 RevisionBased 策略安装 Istio
你可以使用 RevisionBased 更新策略安装 Istio 控制平面、Istio CNI 和 Bookinfo 示例应用。
你可以使用以下内容了解更新过程。如果集群中已经包含 Istio deployment,则可以跳过此安装。
操作步骤
-
通过运行以下命令创建
istio-cni和istio-systemnamespace: -
使用所需版本安装 Istio CNI plugin。以下示例配置会在
istio-cninamespace 中创建一个名为 default 的IstioCNIresource: -
使用
RevisionBased更新策略部署 Istio 控制平面。以下示例配置会在istio-systemnamespace 中创建一个名为default的Istioresource:示例配置
-
通过运行以下命令获取
IstioRevision名称:示例输出
IstioRevision名称的格式为<istio_resource_name>-<version>。 -
设置应用 workload 在集群中运行。例如,你可以将
bookinfo示例应用部署到bookinfonamespace 中。a. 使用以下命令创建
bookinfonamespace:b. 为
bookinfonamespace 添加 label,以启用自动 sidecar 注入。请使用以下命令:c. 执行以下命令,将
bookinfo应用 pods 部署到bookinfonamespace 中: -
使用以下命令检查
Istioresource:示例输出
在部署应用后,
IN USE字段会显示1。 -
通过运行以下命令确认 proxy 版本与控制平面版本一致:
VERSION列应与控制平面版本一致。示例输出
使用 RevisionBased 策略更新 Istio 控制平面
使用 RevisionBased 策略更新 Istio 时,你可以一次升级多个 minor version。Alauda Service Mesh v2 Operator 会为 .spec.version 字段的每次变更创建一个新的 IstioRevision resource,并部署对应的控制平面实例。要将 workload 迁移到新的控制平面,请将 namespace 上的 istio.io/rev label 设置为与 IstioRevision resource 名称一致,然后重启这些 workload。
前提条件
- 你已作为 cluster-admin 登录 Alauda Container Platform web console。
- 你已部署 Istio,并将 Alauda Service Mesh v2 Operator 升级到提供新目标 Istio 版本的版本。有关更多信息,请参见 Understanding Operator updates and channels。
- 你已安装 Alauda Container Platform Networking for Multus plugin,且 kube-ovn 版本必须为 v4.1.5 或更高。
- 你已在本地机器上安装
istioctl。 - 你已将 Istio 控制平面配置为使用
RevisionBased更新策略。在此示例中,名为default的Istioresource 部署在istio-systemnamespace 中。 - 你已安装所需版本的 Istio CNI plugin。在此示例中,名为
default的IstioCNIresource 部署在istio-cninamespace 中。 - 你已为
bookinfonamespace 添加 label,以启用 sidecar 注入。 - 你已在集群中运行 application workloads。在此示例中,bookinfo application 部署在
bookinfonamespace 中。
操作步骤
-
修改
Istioresource 中的版本。例如,要更新到 Istio1.28.6,请通过运行以下命令将 spec.version 字段设置为v1.28.6:Istio CR 中的版本更新
Service Mesh v2 Operator 会在旧版本控制平面旁边部署一个新版本的控制平面。sidecar 将继续连接到旧控制平面。
-
确认
Istio和IstioRevisionresources 均已使用新 revision 就绪。a. 通过运行以下命令确认
Istioresource 已就绪:示例输出
b. 通过运行以下命令确认
IstioRevisionresource 已就绪:示例输出
-
通过运行以下命令确认正在运行两个控制平面 pods,每个 revision 一个:
示例输出
-
通过运行以下命令确认 workload sidecar 仍然连接到之前的控制平面:
示例输出
VERSION列应与旧控制平面版本一致。 -
将 Istio CNI plugin 更新到与新控制平面 revision 相同的版本。
IstioCNIresource 的更新与Istioresource 独立进行,更新后的 CNI plugin 会在迁移期间继续为两个控制平面 revision 转发流量。有关详细步骤,请参见 The Istio CNI update process。 -
通过更新应用 namespace 或 pods 上的
istio.io/revlabel 为 revision 名称,将 workload 切换到新控制平面。例如,通过运行以下命令更新整个 namespace 的 label: -
通过运行以下命令重启应用 workload,以便注入新版本的 sidecar:
验证
-
通过输入以下命令验证正在运行的是新版本的 sidecar:
VERSION列应与新控制平面版本一致。 -
验证旧控制平面、
Istio和IstioRevisionresources 已被删除。a. 通过运行以下命令验证旧控制平面已被删除:
b. 通过运行以下命令验证
Istioresource 已被删除:c. 通过运行以下命令验证
IstioRevisionresource 已被删除:
Alauda Service Mesh v2 Operator 会在 spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds 字段定义的宽限期到期后,删除旧的 IstioRevision resource 及其关联的控制平面。默认宽限期为 30 秒。
你可以增加宽限期,以便在删除前一个 revision 之前留出足够时间测试新的控制平面。在金丝雀升级期间设置更高的值,以确保在完全切换之前 workload 保持稳定。
从开发环境中移除 RevisionBased 更新资源
在完成验证和试验后,你应该移除 RevisionBased 更新配置,以清理开发环境并释放资源。
操作步骤
执行以下命令以移除所有 Istio components 和示例应用: