×

关于更新策略

更新策略会影响更新过程的执行方式。对于每个网格,您选择两种策略之一

  • 就地

  • 基于修订版

默认策略是就地策略。有关更多信息,请参阅位于“更新 OpenShift Service Mesh”中的以下文档

  • “关于就地策略”

  • “关于基于修订版的策略”

关于就地策略

就地策略始终仅运行控制平面的一个版本。当您执行就地更新时,所有工作负载都会立即连接到新版本的控制平面。为了确保 sidecar 和控制平面之间的兼容性,您一次最多只能升级一个小版本。

选择就地策略

要选择就地策略,请将 Istio 资源中的spec.updateStrategy.type值设置为InPlace

选择就地更新策略的示例规范
kind: Istio
spec:
  updateStrategy:
    type: InPlace

您可以在首次创建资源时设置此值,也可以稍后编辑资源。如果您选择在资源创建后编辑资源,请在更新 Istio 控制平面之前进行更改。

将工作负载附加到控制平面

当 Istio 配置为使用就地策略时,Operator 创建的IstioRevision资源的名称始终与 Istio 资源的名称相同。要将工作负载附加到使用就地策略部署的控制平面,您可以将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: enabled标记命名空间或 pod 来将工作负载附加到修订版。

将工作负载附加到网格的示例 istio-injection 标签
oc label namespace <namespace-name> istio-injection=enabled

执行就地更新

使用就地策略更新 Istio 时,您一次只能递增一个小版本。如果要升级多个小版本,则必须递增版本并在每次更新后重新启动工作负载。这确保了 sidecar 版本与控制平面版本兼容。所有工作负载重新启动后,更新过程完成。

先决条件
  • 您已以cluster-admin身份登录到 Red Hat OpenShift Service Mesh。

  • 您已安装 Red Hat OpenShift Service Mesh Operator 并部署了 Istio。

步骤
  1. 更改 Istio 资源中的版本

    kind: Istio
    spec:
      version: 1.20.2
      updateStrategy:
        type: InPlace

    服务网格操作符部署新版本的控制平面以替换旧版本的控制平面。Sidecar 会自动重新连接到新的控制平面。

  2. 通过输入以下命令确认新版本的控制平面正在运行并已准备好

    $ oc get istio <control-plane-name>
  3. 重新启动应用程序工作负载,以便通过输入以下命令注入新版本的 Sidecar

    $ oc rollout restart <deployment-name>

关于 RevisionBased 策略

通常,使用RevisionBased策略执行的更新会运行两个版本的控制平面。此功能允许您将工作负载从旧控制平面逐步迁移到新控制平面,从而实现金丝雀升级。RevisionBased策略还允许您更新多个次要版本。

选择 RevisionBased 策略

要使用RevisionBased策略部署 Istio,请使用以下spec.updateStrategy 值创建 Istio 资源

选择 RevisionBased 策略的示例规范
kind: Istio
spec:
  version: 1.20.0
  updateStrategy: RevisionBased

选择 Istio 资源的策略后,操作符会创建一个新的IstioRevision资源,其名称为 <istio 资源名称>-<版本>。

使用 RevisionBased 策略将工作负载附加到控制平面

要将工作负载附加到使用RevisionBased策略部署的控制平面,必须将istio.io/rev namespace标签设置为IstioRevision的名称。或者,您可以将标签应用于工作负载 Pod。

执行 RevisionBased 更新

使用RevisionBased策略更新 Istio 时,您可以一次递增多个次要版本,因为现有的 Sidecar 不会自动连接到新版本的控制平面。相反,您必须手动将工作负载迁移到新的控制平面。

先决条件
  • 您已安装 Red Hat OpenShift Service Mesh Operator 并部署了 Istio。

步骤
  1. 更改 Istio 资源中的版本

    kind: Istio
    spec:
      version: 1.20.2
      updateStrategy:
        type: RevisionBased

    服务网格操作符部署新版本的控制平面以及旧版本的控制平面。Sidecar 保持连接到旧的控制平面。

  2. 确认控制平面的两个版本都正在运行并已准备好

    $ oc get istiorevisions
  3. 通过将应用程序命名空间或 Pod 上的istio.io/rev标签更新为新控制平面的修订版名称,将工作负载迁移到新的控制平面。

  4. 重新启动应用程序工作负载,以便注入新版本的 Sidecar。

    $ oc rollout restart <deployment>