使用 InPlace 策略进行更新
InPlace 更新策略一次只运行一个控制平面版本。在更新过程中,所有工作负载会立即连接到新的控制平面版本。为了保持 sidecar 与控制平面之间的兼容性,每次只能升级一个次要版本。
InPlace 策略会就地更新并重启现有的 Istio 控制平面。在此过程中,控制平面始终只存在一个实例,因此无需将工作负载迁移到新的控制平面实例。要完成更新,请重启应用工作负载和网关,以刷新 Envoy 代理。
虽然 InPlace 策略具有简洁和高效的优点,但如果在控制平面重启期间,工作负载 Pod 发生更新、重启或扩缩容,则应用流量可能会出现短暂中断。你可以通过以 High Availability (HA) 模式运行多个 Istio 控制平面(istiod)副本来降低这一风险。
选择 InPlace 策略
要选择 InPlace 策略,请将 Istio 资源中的 spec.updateStrategy.type 值设置为 InPlace。
选择 InPlace 更新策略的示例配置
你可以在创建资源时设置该值,也可以稍后再进行编辑。如果你是在创建后编辑资源,请在更新 Istio 控制平面之前完成修改。
为了尽量减少更新期间的流量中断,你可以将 Istio 控制平面运行在 High Availability (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 时,每次只能递增一个次要版本。若要跨越多个次要版本进行更新,必须在每次更新后递增版本并重启工作负载。重启工作负载可确保 sidecar 版本与控制平面版本兼容。所有工作负载重启完成后,更新过程即告完成。
前提条件
- 你已使用 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
- 你已安装 Alauda Container Platform Networking for Multus 插件,并且 kube-ovn 版本必须为 v4.1.5 或更高。
- 你已安装 Alauda Service Mesh v2 Operator,并已部署 Istio。
- 你已在本地机器上安装
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 控制平面就绪:
-
通过运行以下命令确认新的控制平面版本已就绪:
示例输出
-
重启应用工作负载,以便注入新的 sidecar 版本,运行以下命令:
验证
通过输入以下命令验证新的 sidecar 版本是否正在运行:
示例输出
VERSION 列应与新的控制平面版本一致。
从开发环境中移除 InPlace 更新资源
在完成验证和实验后,你应移除 InPlace 更新配置,以清理开发环境并释放资源。
操作步骤
执行以下命令,移除所有 Istio 组件和示例应用: