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