1.2. 关于 InPlace 策略
InPlace
策略始终只运行一个 control plane 的修订版本。当您执行 InPlace
更新时,所有工作负载都会立即连接到 control plane 的新版本。为确保 sidecar 和 control plane 之间的兼容性,不能一次通过多个次版本进行升级。
1.2.1. 选择 InPlace 策略
要选择 InPlace
策略,将 Istio 资源中的 spec.updateStrategy.type
值设置为 InPlace
。
选择 InPlace 更新策略的规格示例
kind: Istio spec: updateStrategy: type: InPlace
您可以在首次创建资源时设置这个值,也可以稍后编辑该资源。如果您选择在创建资源后编辑资源,请在更新 Istio control plane 前进行更改。
1.2.2. 将工作负载附加到 control plane
当 Istio 配置为使用 InPlace
策略时,Operator 创建的 IstioRevision
资源始终与 Istio 资源的名称相同。要将工作负载附加到使用 InPlace
策略部署的 control plane,您可以将 istio.io/rev
命名空间标签设置为 IstioRevision
的名称。
将工作负载附加到网格的 istio.io 命名空间标签示例
$ oc label namespace <namespace-name> istio.io/rev=<revision-name>
另外,您可以通过修改部署资源中的 pod 模板,将标签应用到工作负载 pod。
将工作负载附加到网格的 pod 模板示例
apiVersion: apps/v1 kind: Deployment spec: template: metadata: labels: istio.io/rev: <revision-name> spec:
如果修订名称为 default
,您可以通过标记命名空间或 启用了标签 istio-injection:
的 pod 将工作负载附加到修订版本。
将工作负载附加到网格的 istio-injection 标签示例
oc label namespace <namespace-name> istio-injection=enabled
1.2.3. 执行 InPlace 更新
当使用 InPlace
策略更新 Istio 时,一次只能递增一个次版本。如果要通过多个次版本更新,那么您必须在每次更新后增加版本并重启工作负载。这样可确保 sidecar 版本与 control plane 版本兼容。在所有工作负载重启后,更新过程就会完成。
先决条件
-
以
cluster-admin
用户身份登录到 Red Hat OpenShift Service Mesh。 - 已安装 Red Hat OpenShift Service Mesh Operator 并部署了 Istio。
流程
更改 Istio 资源中的版本:
kind: Istio spec: version: 1.20.2 updateStrategy: type: InPlace
Service Mesh Operator 部署了一个 control plane 的新版本,它替换了 control plane 的旧版本。sidecar 会自动重新连接到新的 control plane。
输入以下命令确认 control plane 的新版本正在运行并就绪:
$ oc get istio <control-plane-name>
输入以下命令重启应用程序工作负载,以便注入 sidecar 的新版本:
$ oc rollout restart <deployment-name>