使用 InPlace 策略进行更新
InPlace 更新策略一次仅运行控制平面的一个版本。在更新过程中,所有工作负载会立即连接到新的控制平面版本。为了保持 sidecar 与控制平面之间的兼容性,一次只能升级一个 minor 版本。
InPlace 策略会就地更新并重启现有的 Istio 控制平面。在此过程中,只存在一个控制平面的实例,因此无需将工作负载迁移到新的控制平面实例。要完成更新,请重启应用工作负载和网关,以刷新 Envoy 代理。
虽然 InPlace 策略具有简单和高效的优点,但如果在控制平面重启期间某个工作负载 Pod 发生更新、重启或扩缩容,应用流量仍有轻微中断的可能。你可以通过运行多个 Istio 控制平面(istiod)副本来降低这一风险。
选择 InPlace 策略
要选择 InPlace 策略,请将 Istio 资源中的 spec.updateStrategy.type 值设置为 InPlace。
选择 InPlace 更新策略的示例配置
你可以在创建资源时设置此值,也可以稍后再编辑。如果是在创建后编辑资源,请在更新 Istio 控制平面之前完成修改。
为了在更新过程中尽量减少流量中断,你可以将 Istio 控制平面运行在高可用性(HA)模式下,但这需要在 Istio 资源中进行一些额外配置。更多信息,请参见 Istio 高可用性。
使用 InPlace 更新策略进行安装
你可以使用 InPlace 更新策略安装 Istio 控制平面、Istio CNI 和 Bookinfo 演示应用。
你可以使用以下部分来了解更新过程。如果集群中已经包含 Istio 部署,则可以跳过此安装。
使用 InPlace 策略时,Alauda Service Mesh v2 Operator 创建的 IstioRevision 资源始终与其父级 Istio 资源同名。
操作步骤
-
运行以下命令创建
istio-cni和istio-system命名空间: -
将工作负载附加到使用
InPlace策略部署的控制平面:-
通过输入以下命令为命名空间添加标签,以自动包含所有工作负载:
-
通过修改
Deployment资源中的 Pod 模板,为单个工作负载应用 revision 标签。例如:
-
-
如果 revision 名称为
default,请运行以下命令将工作负载附加到该 revision。以下示例为命名空间添加istio-injection: enabled标签。 -
使用所需版本安装 Istio CNI 插件。以下示例配置会在
istio-cni命名空间中创建一个名为default的IstioCNI资源: -
使用
InPlace更新策略部署 Istio 控制平面。以下示例配置会在istio-system命名空间中创建一个名为default的Istio资源:示例配置
-
运行以下命令,等待 Istio 控制平面就绪:
-
配置应用工作负载在集群中运行。例如,你可以将
bookinfo示例应用部署到bookinfo命名空间。a. 使用以下命令创建
bookinfo命名空间:b. 为
bookinfo命名空间添加标签,以启用自动 sidecar 注入。使用以下命令:c. 通过执行此命令将
bookinfo应用 Pod 部署到bookinfo命名空间: -
使用以下命令查看
Istio资源:示例输出
IN USE列中的值为1表示IstioRevision资源同时被命名空间上的标签和注入的 sidecar 代理引用。
使用 InPlace 策略更新 Istio 控制平面
使用 InPlace 策略更新 Istio 时,你一次只能将版本增加一个 minor 版本。如果要跨越多个 minor 版本进行更新,则必须在每次更新后递增版本并重启工作负载。重启工作负载可确保 sidecar 版本与控制平面版本兼容。所有工作负载都重启后,更新过程即完成。
前提条件
- 你已使用 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
- 你已安装 Alauda Container Platform Networking for Multus 插件,并且 kube-ovn 必须为 v4.1.5 或更高版本。
- 你已部署 Istio,并将 Alauda Service Mesh v2 Operator 升级到提供新的目标 Istio 版本的版本。更多信息,请参见 了解 Operator 更新和通道。
- 你已在本地机器上安装
istioctl。 - 你已将 Istio 控制平面配置为使用
InPlace更新策略。在本示例中,名为default的Istio资源部署在istio-system命名空间中。 - 你已安装所需版本的 Istio CNI 插件。在本示例中,名为
default的IstioCNI资源部署在istio-cni命名空间中。 - 你已为
bookinfo命名空间添加标签,以启用 sidecar 注入。 - 你的集群中正在运行应用工作负载。在本示例中,bookinfo 应用部署在
bookinfo命名空间中。
操作步骤
-
修改
Istio资源中的版本。例如,要更新到 Istio1.28.6,请通过运行以下命令将spec.version字段设置为v1.28.6:Istio CR 中的版本更新
Service Mesh v2 Operator 会部署新版本的控制平面,以替换旧版本的控制平面。sidecar 会自动重新连接到新的控制平面。
-
运行以下命令,等待 Istio 控制平面就绪:
-
通过运行以下命令,确认新版本的控制平面已就绪:
示例输出
-
将 Istio CNI 插件更新到与控制平面相同的版本。
IstioCNI资源是独立于Istio资源更新的,因此更改控制平面版本不会自动更新 CNI 插件。详细步骤请参见 Istio CNI 更新过程。 -
重启应用工作负载,以便注入新的 sidecar 版本,运行以下命令:
验证
通过输入以下命令,验证新的 sidecar 版本是否正在运行:
示例输出
VERSION 列应与新的控制平面版本一致。
从开发环境中移除 InPlace 更新资源
在完成验证和实验后,你应移除 InPlace 更新配置,以清理开发环境并释放资源。
操作步骤
执行以下命令,移除所有 Istio 组件和示例应用: