使用 InPlace 策略进行更新
InPlace 更新策略一次只运行一个控制平面的版本。更新期间,所有工作负载会立即连接到新的控制平面版本。为了保持 sidecar 与控制平面的兼容性,您一次只能升级一个小版本。
InPlace 策略会就地更新并重启现有的 Istio 控制平面。在此过程中,控制平面只有一个实例,无需将工作负载迁移到新的控制平面实例。完成更新后,需要重启应用工作负载和网关以刷新 Envoy 代理。
虽然 InPlace 策略简单高效,但如果工作负载 Pod 在控制平面重启时更新、重启或扩缩容,应用流量可能会有短暂中断。您可以通过运行多个 Istio 控制平面(istiod)副本来降低此风险。
选择 InPlace 策略
要选择 InPlace 策略,请将 Istio 资源中的 spec.updateStrategy.type 设置为 InPlace。
选择 InPlace 更新策略的示例配置
您可以在创建资源时设置此值,也可以在创建后编辑。如果在创建后编辑,请在更新 Istio 控制平面之前完成此更改。
使用 InPlace 更新策略安装
您可以使用 InPlace 更新策略安装 Istio 控制平面、Istio CNI 以及 Bookinfo 示例应用。
以下章节帮助您了解更新流程。如果集群中已有 Istio 部署,可以跳过此安装步骤。
操作步骤
-
通过以下命令创建
istio-cni和istio-system命名空间: -
将工作负载附加到使用
InPlace策略部署的控制平面:-
通过以下命令为命名空间打标签,以自动包含所有工作负载:
-
通过修改
Deployment资源中的 Pod 模板,为单个工作负载应用修订标签。例如:
-
-
如果修订名称为
default,通过以下命令将工作负载附加到该修订。以下示例为命名空间打上istio-injection: enabled标签。 -
使用所需版本安装 Istio CNI 插件。以下示例配置在
istio-cni命名空间中创建名为 default 的IstioCNI资源: -
使用
InPlace更新策略部署 Istio 控制平面。以下示例配置在istio-system命名空间中创建名为default的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.3,运行以下命令将spec.version字段设置为v1.28.3:Istio CR 中的版本更新
Service Mesh v2 Operator 会部署新的控制平面版本替换旧版本。sidecar 会自动重新连接到新的控制平面。
-
运行以下命令确认新版本控制平面已就绪:
示例输出
-
通过以下命令重启应用工作负载,以注入新版本的 sidecar:
验证
通过以下命令验证新版本的 sidecar 是否正在运行:
示例输出
VERSION 列应与新的控制平面版本一致。