kind: Istio
spec:
updateStrategy:
type: InPlace
您用于部署服务网格的策略会影响您更新网格的方式。
更新策略会影响更新过程的执行方式。对于每个网格,您选择两种策略之一
就地
基于修订版
默认策略是就地
策略。有关更多信息,请参阅位于“更新 OpenShift Service Mesh”中的以下文档
“关于就地策略”
“关于基于修订版的策略”
就地
策略始终仅运行控制平面的一个版本。当您执行就地
更新时,所有工作负载都会立即连接到新版本的控制平面。为了确保 sidecar 和控制平面之间的兼容性,您一次最多只能升级一个小版本。
要选择就地
策略,请将 Istio 资源中的spec.updateStrategy.type
值设置为InPlace
。
kind: Istio
spec:
updateStrategy:
type: InPlace
您可以在首次创建资源时设置此值,也可以稍后编辑资源。如果您选择在资源创建后编辑资源,请在更新 Istio 控制平面之前进行更改。
当 Istio 配置为使用就地
策略时,Operator 创建的IstioRevision
资源的名称始终与 Istio 资源的名称相同。要将工作负载附加到使用就地
策略部署的控制平面,您可以将istio.io/rev
命名空间标签设置为IstioRevision
的名称。
$ oc label namespace <namespace-name> istio.io/rev=<revision-name>
或者,您可以通过修改部署资源中的 pod 模板来将标签应用于工作负载 pod。
apiVersion: apps/v1
kind: Deployment
spec:
template:
metadata:
labels:
istio.io/rev: <revision-name>
spec:
如果修订版名称为default
,则可以通过使用标签istio-injection: enabled
标记命名空间或 pod 来将工作负载附加到修订版。
oc label namespace <namespace-name> istio-injection=enabled
使用就地
策略更新 Istio 时,您一次只能递增一个小版本。如果要升级多个小版本,则必须递增版本并在每次更新后重新启动工作负载。这确保了 sidecar 版本与控制平面版本兼容。所有工作负载重新启动后,更新过程完成。
您已以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
服务网格操作符部署新版本的控制平面以替换旧版本的控制平面。Sidecar 会自动重新连接到新的控制平面。
通过输入以下命令确认新版本的控制平面正在运行并已准备好
$ oc get istio <control-plane-name>
重新启动应用程序工作负载,以便通过输入以下命令注入新版本的 Sidecar
$ oc rollout restart <deployment-name>
通常,使用RevisionBased
策略执行的更新会运行两个版本的控制平面。此功能允许您将工作负载从旧控制平面逐步迁移到新控制平面,从而实现金丝雀升级。RevisionBased
策略还允许您更新多个次要版本。
要使用RevisionBased
策略部署 Istio,请使用以下spec.updateStrategy 值
创建 Istio 资源
kind: Istio
spec:
version: 1.20.0
updateStrategy: RevisionBased
选择 Istio 资源的策略后,操作符会创建一个新的IstioRevision
资源,其名称为 <istio 资源名称>-<版本>。
要将工作负载附加到使用RevisionBased
策略部署的控制平面,必须将istio.io/rev namespace
标签设置为IstioRevision
的名称。或者,您可以将标签应用于工作负载 Pod。
使用RevisionBased
策略更新 Istio 时,您可以一次递增多个次要版本,因为现有的 Sidecar 不会自动连接到新版本的控制平面。相反,您必须手动将工作负载迁移到新的控制平面。
您已安装 Red Hat OpenShift Service Mesh Operator 并部署了 Istio。
更改 Istio 资源中的版本
kind: Istio
spec:
version: 1.20.2
updateStrategy:
type: RevisionBased
服务网格操作符部署新版本的控制平面以及旧版本的控制平面。Sidecar 保持连接到旧的控制平面。
确认控制平面的两个版本都正在运行并已准备好
$ oc get istiorevisions
通过将应用程序命名空间或 Pod 上的istio.io/rev
标签更新为新控制平面的修订版名称,将工作负载迁移到新的控制平面。
重新启动应用程序工作负载,以便注入新版本的 Sidecar。
$ oc rollout restart <deployment>