使用 InPlace 策略进行更新
InPlace 更新策略一次仅运行控制平面的一个修订版本。更新期间,所有工作负载会立即连接到新的控制平面版本。为保持 sidecar 与控制平面之间的兼容性,每次只能升级一个次要版本。
InPlace 策略会原地更新并重启现有 Istio 控制平面。在此过程中,控制平面始终只有一个实例,因此无需将工作负载迁移到新的控制平面实例。要完成更新,请重启应用工作负载和网关,以刷新 Envoy 代理。
虽然 InPlace 策略简单高效,但如果工作负载 Pod 在控制平面重启期间更新、重启或扩缩容,应用流量中断的可能性虽小。您可以通过运行 Istio 控制平面的多个副本(istiod)来降低此风险。
选择 InPlace 策略
要选择 InPlace 策略,请在 Istio 资源中将 spec.updateStrategy.type 值设置为 InPlace。
选择 InPlace 更新策略的示例规范
您可以在创建资源时设置此值,也可以稍后编辑资源。如果在创建资源后编辑资源,请在更新 Istio 控制平面之前进行更改。
为最大限度地减少更新期间的流量中断,您可以在 High Availability (HA) 模式下运行 Istio 控制平面,但这需要在 Istio 资源中进行一些额外配置。有关更多信息,请参阅 Istio High Availability。
使用 InPlace 更新策略进行安装
您可以使用 InPlace 更新策略安装 Istio 控制平面、Istio CNI 和 Bookinfo 示例应用。
您可以使用以下部分了解更新过程。如果集群中已经包含 Istio 部署,则可以跳过此安装步骤。
使用 InPlace 策略时,Alauda Service Mesh v2 Operator 创建的 IstioRevision 资源始终与其父 Istio 资源同名。
操作步骤
-
运行以下命令创建
istio-cni和istio-systemnamespace: -
将工作负载附加到使用
InPlace策略部署的控制平面:-
输入以下命令,为 namespace 添加标签以自动包含所有工作负载:
-
修改
Deployment资源中的 Pod 模板,将修订版本标签应用到单个工作负载。例如:
-
-
如果修订版本名称为
default,请运行以下命令将工作负载附加到该修订版本。以下示例为 namespace 添加istio-injection: enabled标签。 -
安装所需版本的 Istio CNI plugin。以下示例配置会在
istio-cninamespace 中创建名为 default 的IstioCNI资源: -
使用
InPlace更新策略部署 Istio 控制平面。以下示例配置会在istio-systemnamespace 中创建名为default的Istio资源:示例配置
spec.values.global.proxy.seccompProfile设置使注入的 sidecar 能够满足RestrictedPod Security Admission 配置文件,该配置文件稍后会由bookinfonamespace 在本操作步骤中强制执行。有关更多信息,请参阅 Pod Security Admission。 -
运行以下命令,等待 Istio 控制平面就绪:
-
设置应用工作负载以在集群中执行。例如,您可以将
bookinfo示例应用部署到bookinfonamespace。a. 使用以下命令生成
bookinfonamespace:b. 为
bookinfonamespace 应用标签,以启用自动 sidecar 注入。使用以下命令:c. 执行以下命令,将
bookinfo应用 Pod 部署到bookinfonamespace: -
使用以下命令检查
Istio资源:示例输出
IN USE列中的1值表示IstioRevision资源同时被 namespace 上的标签和注入的 sidecar proxy 引用。
使用 InPlace 策略更新 Istio 控制平面
使用 InPlace 策略更新 Istio 时,每次只能增加一个次要版本。若要跨越多个次要版本进行更新,则必须每次增加一个版本,并在每次更新后重启工作负载。重启工作负载可确保 sidecar 与控制平面版本之间的兼容性。重启所有工作负载后,更新过程即完成。
先决条件
- 您已以 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
- 您已安装 Alauda Container Platform Networking for Multus plugin,并且 kube-ovn 必须为 v4.1.5 或更高版本。
- 您已部署 Istio,并将 Alauda Service Mesh v2 Operator 升级到提供新目标 Istio 版本的版本。有关更多信息,请参阅 了解 Operator 更新和 channel。
- 集群运行的 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-systemnamespace 中。 - 您已安装所需版本的 Istio CNI plugin。在此示例中,名为
default的IstioCNI资源部署在istio-cninamespace 中。 - 您已为
bookinfonamespace 添加标签,以启用 sidecar 注入。 - 集群中正在运行应用工作负载。在此示例中,bookinfo 应用部署在
bookinfonamespace 中。
操作步骤
-
更改
Istio资源中的版本。例如,要更新到 Istio1.30.4,请运行以下命令,将 spec.version 字段设置为v1.30.4:Istio CR 中的版本更新
Service Mesh v2 Operator 会部署新版本的控制平面,以替换旧版本的控制平面。sidecar 会自动重新连接到新的控制平面。
-
运行以下命令,等待 Istio 控制平面就绪:
-
运行以下命令,确认新版本的控制平面已就绪:
示例输出
-
将 Istio CNI plugin 更新到与控制平面相同的版本。
IstioCNI资源独立于Istio资源更新,因此更改控制平面版本不会自动更新 CNI plugin。详细步骤请参阅 Istio CNI 更新过程。 -
运行以下命令重启应用工作负载,以便注入 sidecar 的新版本:
验证
输入以下命令,验证 sidecar 的新版本正在运行:
示例输出
VERSION 列应与新的控制平面版本一致。
从开发环境中移除 InPlace 更新资源
完成验证和试验后,应移除 InPlace 更新配置,以清理开发环境并释放资源。
操作步骤
执行以下命令,移除所有 Istio 组件和示例应用: