2.2. 关于 InPlace 策略
InPlace 更新策略一次只运行一个 control plane 的修订版本。在更新过程中,所有工作负载都会立即连接到新的 control plane 版本。要保持 sidecar 和 control plane 之间的兼容性,您可以一次只升级一个次版本。
InPlace 策略会更新并重启现有的 Istio control plane。在此过程中,只有一个 control plane 实例,无需将工作负载移到新的 control plane 实例中。要完成更新,重启应用程序工作负载和网关来刷新 Envoy 代理。
虽然 InPlace 策略提供了简单性和效率,但如果工作负载 pod 更新、重启或扩展,在重启 control plane 时,应用程序流量可能会中断。您可以通过运行 Istio control plane (istiod)的多个副本来降低这个风险。
2.2.1. 选择 InPlace 策略 复制链接链接已复制到粘贴板!
要选择 InPlace 策略,将 Istio 资源中的 spec.updateStrategy.type 值设置为 InPlace。
选择 InPlace 更新策略的规格示例
kind: Istio
spec:
updateStrategy:
type: InPlace
kind: Istio
spec:
updateStrategy:
type: InPlace
您可以在创建资源时设置这个值,或稍后编辑它。如果在创建后编辑资源,请在更新 Istio control plane 前进行更改。
以高可用性模式运行 Istio 资源,以最大程度降低流量中断需要额外的属性设置。如需更多信息,请参阅"About Istio 高可用性"。
2.2.2. 使用 InPlace 更新策略安装 复制链接链接已复制到粘贴板!
您可以使用 Inplace 更新策略安装 Istio control plane、Istio CNI 和 Bookinfo 演示应用程序。
如果集群已经包含 Istio 部署,您可以跳过此安装过程。
使用 InPlace 策略时,由 OpenShift Service Mesh Operator 创建的 IstioRevision 资源总是使用与 Istio 资源相同的名称。
流程
运行以下命令来创建
istio-system命名空间:oc create ns istio-system
$ oc create ns istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
InPlace策略将工作负载附加到部署的 control plane 中:输入以下命令标记命名空间来自动包括所有工作负载:
oc label namespace <namespace_name> istio.io/rev=<revision_name>
$ oc label namespace <namespace_name> istio.io/rev=<revision_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过修改
Deployment资源中的 pod 模板,将修订标签应用到单独的工作负载。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果修订
名称为,请运行以下命令将工作负载附加到修订版本。以下示例使用istio-injection: enabled标签标记命名空间。oc label namespace <namespace_name> istio-injection=enabled
$ oc label namespace <namespace_name> istio-injection=enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
InPlace更新策略部署 Istio control plane。以下示例配置在istio-system命名空间中创建一个名为default的Istio资源:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用所需版本安装 Istio CNI 插件。以下示例配置在
istio-cni命名空间中创建一个名为default的IstioCNI资源:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置应用程序工作负载以在集群中运行。以下示例在
bookinfo命名空间中部署info应用程序。运行以下命令来创建
info命名空间:oc create ns info
$ oc create ns infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,标记
info命名空间以启用 sidecar 注入:oc label namespace info istio-injection=enabled
$ oc label namespace info istio-injection=enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在
bookinfo命名空间中安装infopod:oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
$ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来查看
Istio资源:oc get istio -n istio-system
$ oc get istio -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default Healthy v1.24.3 115s
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default Healthy v1.24.3 115sCopy to Clipboard Copied! Toggle word wrap Toggle overflow IN USE字段显示1,因为 namespace 标签和注入的代理都引用IstioRevision资源。
2.2.3. 使用 InPlace 策略更新 Istio control plane 复制链接链接已复制到粘贴板!
当使用 InPlace 策略更新 Istio 时,您可以一次只增加一个次版本。要按多个次版本更新,您必须递增版本,并在每次更新后重启工作负载。重启工作负载可确保 sidecar 和 control plane 版本间的兼容性。重启所有工作负载后,更新过程已完成。
先决条件
-
以具有
cluster-admin角色的用户身份登录到 OpenShift Container Platform。 - 已安装 Red Hat OpenShift Service Mesh Operator 并部署了 Istio。
-
您已在本地机器上安装了
istioctl。 -
您已将 Istio control plane 配置为使用
InPlace更新策略。在本例中,名为default的Istio资源部署在istio-system命名空间中。 -
您已使用所需版本安装了 Istio CNI 插件。在本例中,名为
default的IstioCNI资源部署在istio-cni命名空间中。 -
您已标记了
info命名空间以启用 sidecar 注入。 -
已在集群中运行应用程序工作负载。在本例中,
info应用程序部署在bookinfo命名空间中。
流程
更改
Istio资源中的版本。例如,要升级到 Istio1.24.4,请运行以下命令将spec.version字段设置为v1.24.4:oc patch istio default --type='merge' -p '{"spec":{"version":"v1.24.4"}}'$ oc patch istio default --type='merge' -p '{"spec":{"version":"v1.24.4"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Istio CR 中的版本更新
kind: Istio spec: version: v1.24.4 updateStrategy: type: InPlacekind: Istio spec: version: v1.24.4 updateStrategy: type: InPlaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Service Mesh Operator 部署了一个 control plane 的新版本,它替换了 control plane 的旧版本。sidecar 会自动重新连接到新的 control plane。
运行以下命令确认 control plane 的新版本已就绪:
oc get istio
$ oc get istioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default Healthy v1.24.4 4m50s
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default Healthy v1.24.4 4m50sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令重启应用程序工作负载,以便注入新版本的 sidecar:
oc rollout restart deployment -n info
$ oc rollout restart deployment -n infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令验证 sidecar 的新版本是否正在运行:
istioctl proxy-status
$ istioctl proxy-statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列
VERSION应该与新的 control plane 版本匹配。