1.5. 关于 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)的多个副本来降低这个风险。
1.5.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 高可用性"。
1.5.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-system
Copy 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=enabled
Copy 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 info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,标记
info
命名空间以启用 sidecar 注入:oc label namespace info istio-injection=enabled
$ oc label namespace info istio-injection=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在
bookinfo
命名空间中安装info
pod: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 bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来查看
Istio
资源:oc get istio -n istio-system
$ oc get istio -n istio-system
Copy 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 115s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IN USE
字段显示1
,因为 namespace 标签和注入的代理都引用IstioRevision
资源。
1.5.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: InPlace
kind: Istio spec: version: v1.24.4 updateStrategy: type: InPlace
Copy 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 istio
Copy 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 4m50s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令重启应用程序工作负载,以便注入新版本的 sidecar:
oc rollout restart deployment -n info
$ oc rollout restart deployment -n info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令验证 sidecar 的新版本是否正在运行:
istioctl proxy-status
$ istioctl proxy-status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列
VERSION
应该与新的 control plane 版本匹配。