使用 InPlace 策略进行更新
InPlace 更新策略每次仅运行一个控制平面版本。更新期间,所有工作负载都会立即连接到新的控制平面版本。为保持 sidecar 与控制平面之间的兼容性,每次只能升级一个次要版本。
InPlace 策略会原地更新并重启现有 Istio 控制平面。在此过程中,控制平面仅有一个实例,因此无需将工作负载迁移到新的控制平面实例。要完成更新,请重启原生应用工作负载和网关,以刷新 Envoy 代理。
虽然 InPlace 策略简单高效,但如果工作负载 Pod 在控制平面重启期间更新、重启或扩缩,原生应用流量仍有轻微中断的可能。运行多个 Istio 控制平面(istiod)副本可以降低此风险。
选择 InPlace 策略
要选择 InPlace 策略,请将 Istio 资源中的 spec.updateStrategy.type 值设为 InPlace。
选择 InPlace 更新策略的示例规格
创建资源时可以设置此值,也可以稍后编辑。如果在创建资源后进行编辑,请在更新 Istio 控制平面之前完成更改。
为尽可能减少更新期间的流量中断,可以在高可用性(HA)模式下运行 Istio 控制平面,这需要对 Istio 资源进行一些额外配置。有关详细信息,请参阅 Istio 高可用性。
使用 InPlace 更新策略进行安装
可以使用 InPlace 更新策略安装 Istio 控制平面、Istio CNI 和 Bookinfo 演示原生应用。
可以通过以下部分了解更新流程。如果集群中已包含 Istio 部署,则可以跳过此安装步骤。
使用 InPlace 策略时,Alauda Service Mesh v2 Operator 创建的 IstioRevision 资源始终与其父级 Istio 资源同名。
操作步骤
-
运行以下命令创建
istio-cni和istio-system命名空间: -
将工作负载关联到使用
InPlace策略部署的控制平面:-
运行以下命令,为命名空间添加标签以自动包含所有工作负载:
-
修改
Deployment资源中的 Pod 模板,为各个工作负载应用修订版本标签。例如:
-
-
如果修订版本名称为
default,请运行以下命令将工作负载关联到该修订版本。以下示例为命名空间添加istio-injection: enabled标签。 -
安装所需版本的 Istio CNI 插件。以下示例配置会在
istio-cni命名空间中创建名为 default 的IstioCNI资源: -
使用
InPlace更新策略部署 Istio 控制平面。以下示例配置会在istio-system命名空间中创建名为default的Istio资源:示例配置
spec.values.global.proxy.seccompProfile设置可使注入的 sidecar 满足本操作步骤后续将对bookinfo命名空间强制执行的RestrictedPod 安全准入配置文件。有关详细信息,请参阅 Pod 安全准入。 -
运行以下命令,等待 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 Multi-Network(之前称为 Alauda Container Platform Networking for Multus)插件,并且 kube-ovn 必须为 v4.1.5 或更高版本。
- 您已部署 Istio,并将 Alauda Service Mesh v2 Operator 升级到提供新目标 Istio 版本的版本。有关更多信息,请参阅了解 Operator 更新和频道。
- 集群运行的 Kubernetes 版本受目标 Istio 版本支持。Istio 1.30 支持 Kubernetes 1.32 至 1.36,Istio 1.28 支持 Kubernetes 1.30 至 1.34,因此运行 Kubernetes 1.30 或 1.31 的集群必须先升级,然后才能将 Istio 更新到 1.30。
- 您已在本地计算机上安装
istioctl。 - 您已将 Istio 控制平面配置为使用
InPlace更新策略。在此示例中,名为default的Istio资源部署在istio-system命名空间中。 - 您已安装所需版本的 Istio CNI 插件。在此示例中,名为
default的IstioCNI资源部署在istio-cni命名空间中。 - 您已为
bookinfo命名空间添加标签,以启用 sidecar 注入。 - 集群中正在运行应用工作负载。在此示例中,bookinfo 应用部署在
bookinfo命名空间中。
操作步骤
-
更改
Istio资源中的版本。例如,若要更新到 Istio1.30.4,请运行以下命令,将 spec.version 字段设置为v1.30.4:Istio CR 中的版本更新
Service Mesh v2 Operator 会部署新版本的控制平面,以替换旧版本的控制平面。sidecar 会自动重新连接到新控制平面。
-
运行以下命令,等待 Istio 控制平面就绪:
-
运行以下命令,确认新版本的控制平面已就绪:
示例输出
-
将 Istio CNI 插件更新到与控制平面相同的版本。
IstioCNI资源独立于Istio资源进行更新,因此更改控制平面版本不会自动更新 CNI 插件。有关详细步骤,请参阅 Istio CNI 更新过程。 -
运行以下命令,重启应用工作负载,以便注入新版本的 sidecar:
验证
运行以下命令,验证新版本的 sidecar 是否正在运行:
示例输出
VERSION 列应与新的控制平面版本匹配。
从开发环境中移除 InPlace 更新资源
完成验证和实验后,应移除 InPlace 更新配置,以清理开发环境并释放资源。
操作步骤
执行以下命令,移除所有 Istio 组件和示例应用: