已修订版本间的升级

在继续之前,请确保你熟悉Istio 隔离边界功能。

注意

可以在单个隔离边界内执行已修订到已修订的控制平面升级。

升级之前

一旦启用了 Istio 隔离边界功能,边界可以用于保持服务发现隔离,并在隔离边界内升级 Istio 控制平面。对于包含单个隔离边界的ControlPlane CR 或 Helm 值:

spec:
  ...
  components:
    xcp:
      isolationBoundaries:
      - name: global
        revisions:
        - name: stable
          istio:
            tsbVersion: 1.6.0

你将升级stable修订版本中的所有工作负载以使用tsbVersion: 1.6.1

控制平面升级策略

TSB 支持修订到修订升级的原地和金丝雀控制平面升级。

控制平面原地升级

对于原地升级,你可以直接更新tsbVersion字段 - 保留修订name不变。

spec:
  ...
  components:
    xcp:
      isolationBoundaries:
      - name: global
        revisions:
        - name: stable
          istio:
            tsbVersion: 1.6.1

这将重新部署 Istio 控制平面组件,与tsbVersion: 1.6.1对应的 TSB Istio 版本。这个状态将由 istio-system 命名空间中的 xcp-operator-edge Operator 协调。

网关升级

默认情况下,网关将自动升级以使用最新的tsbVersion。有关网关升级行为的更多详细信息,请参阅网关升级

应用程序升级

由于修订名称未更改,因此在工作负载命名空间(本示例中的workload-ns)中不需要进行任何更新。但是,你仍然需要重新启动应用程序工作负载。为避免流量中断,推荐使用滚动更新。

kubectl rollout restart deployment -n workload-ns

VM 工作负载升级

要升级 VM 工作负载,请使用修订链接从你的上机平面下载最新的 Istio sidecar,然后在 VM 上重新安装 Istio sidecar。

然后重新启动在 VM 上运行的onboarding-agent

控制平面金丝雀升级

对于金丝雀升级,你可以添加另一个修订版本,其名称为1-6-1,其具有升级的tsbVersion值。

spec:
  ...
  components:
    xcp:
      isolationBoundaries:
      - name: global
        revisions:
        - name: stable
          istio:
            tsbVersion: 1.6.0
        - name: 1-6-1
          istio:
            tsbVersion: 1.6.1

这将部署另一个 Istio 控制平面(修订1-6-1)与tsbVersion: 1.6.1对应的 TSB Istio 版本。这个状态将由 istio-system 命名空间中的 xcp-operator-edge 操作符协调。你可以检查istio-operatoristiod部署以进行验证。

kubectl get deployment -n istio-system | grep istio-operator
# 输出
istio-operator-stable         1/1     1            1           15小时
istio-operator-1-6-1          1/1     1            1            2分钟
kubectl get deployment -n istio-system | grep istiod
# 输出
istiod-stable          1/1     1            1           15小时
istiod-1-6-1           1/1     1            1            2分钟

请注意,仍然部署了一个旧的修订控制平面(stable),它管理着现有的 sidecars 和网关。

网关升级

要升级网关,请更新spec.revisionIngress/Egress/Tier1Gateway资源中。这将协调现有的网关 Pod 以连接到新的修订 Istio 控制平面。TSB 默认配置了带有RollingUpdate策略的网关安装资源,以确保零停机时间。

你还可以通过修补网关 CR 来更新spec.revision

kubectl patch ingressgateway.install <name> -n <namespace> --type=json --patch '[{"op": "replace","path": "/spec/revision","value": "1-6-1"}]'; \

应用程序升级

要升级 sidecars,请替换工作负载命名空间标签istio.io/rev=stable并应用新的修订。

kubectl label namespace workload-ns istio.io/rev=1-6-1 --overwrite=true

然后重新启动应用程序工作负载。为避免流量中断,推荐使用滚动更新。

kubectl rollout restart deployment -n workload-ns

VM 工作负载升级

要升级 VM 工作负载,请使用修订链接从你的上机平面下载最新的 Istio sidecar,然后在 VM 上重新安装 Istio sidecar。

onboarding-agent配置中更新revision,然后重新启动onboarding-agent

升级后清理

不再使用的修订版本可以从ControlPlane CR 中删除或标记为“禁用”。将其标记为禁用有助于随时启用修订版本。

选择 1:禁用修订版本

spec:
  ...
  components:
    xcp:
      isolationBoundaries:
      - name: global
        revisions:
        - name: stable
          istio:
            tsbVersion: 1.6.0
          disable: true
        - name: 1-6-1
          istio:
            tsbVersion: 1.6.1

选择 2:删除修订版本

spec:
  ...
  components:
    xcp:
      isolationBoundaries:
      - name: global
        revisions:
        - name: 1-6-1
          istio:
            tsbVersion: 1.6.1

旧的 Istio 控制平面组件

在禁用/删除隔离边界下的修订版本后,可能会保留一些旧的组件。例如,IstioOperator资源、istio-operator(修订版)部署或 istiod(修订版)部署。这是由于删除IstioOperator资源和 istio-operator 部署的竞争条件造成的。 在这种情况下,可以像普通的 Kubernetes 对象一样删除这些 Istio 组件。

kubectl delete iop xcp-iop-stable -n istio-system
kubectl delete deployment istio-operator-stable -n istio-system
kubectl delete configmap istio-sidecar-injector-stable -n istio-system
kubectl delete deployment istiod-stable -n istio-system

从已修订到已修订的回滚

这个工作流程与从已修订到已修订的控制平面升级类似。你需要更新你的工作负载以使用旧的修订版本。