关于 InPlace 策略

InPlace 更新策略一次只运行一个版本的控制平面。在更新期间,所有工作负载会立即连接到新的控制平面版本。为了保持 sidecar 与控制平面的兼容性,您一次只能升级一个小版本。

InPlace 策略会在原地更新并重启现有的 Istio 控制平面。在此过程中,控制平面只有一个实例,无需将工作负载迁移到新的控制平面实例。完成更新后,需要重启应用工作负载和网关以刷新 Envoy 代理。

虽然 InPlace 策略简单高效,但如果工作负载 Pod 在控制平面重启时更新、重启或扩缩容,可能会导致应用流量短暂中断。您可以通过运行多个 Istio 控制平面(istiod)副本来降低此风险。

目录

选择 InPlace 策略

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

选择 InPlace 更新策略的示例配置

kind: Istio
spec:
  updateStrategy:
    type: InPlace

您可以在创建资源时设置此值,也可以在创建后编辑。如果在创建后编辑,请在更新 Istio 控制平面之前完成更改。

使用 InPlace 更新策略安装

您可以使用 InPlace 更新策略安装 Istio 控制平面、Istio CNI 以及 Bookinfo 示例应用。

NOTE

您可以通过以下章节了解更新过程。如果集群中已部署 Istio,可以跳过此安装步骤。

操作步骤

  1. 运行以下命令创建 istio-system 命名空间:

    kubectl create ns istio-system
  2. 将工作负载关联到使用 InPlace 策略部署的控制平面:

    1. 通过以下命令为命名空间打标签,以自动包含所有工作负载:

      kubectl label namespace <namespace_name> istio.io/rev=<revision_name>
    2. 通过修改 Deployment 资源中的 Pod 模板,为单个工作负载应用修订标签。例如:

      apiVersion: apps/v1
      kind: Deployment
      spec:
        template:
          metadata:
            labels:
              istio.io/rev: <revision_name>
  3. 如果修订名称为 default,通过运行以下命令将工作负载关联到该修订。以下示例为命名空间打上 istio-injection: enabled 标签。

    kubectl label namespace <namespace_name> istio-injection=enabled
  4. 使用 InPlace 更新策略部署 Istio 控制平面。以下示例配置在 istio-system 命名空间创建名为 defaultIstio 资源:

    示例配置

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      namespace: istio-system
      version: v1.26.3
      updateStrategy:
        type: InPlace
  5. 安装所需版本的 Istio CNI 插件。以下示例配置在 istio-cni 命名空间创建名为 defaultIstioCNI 资源:

    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    metadata:
      name: default
    spec:
      version: v1.26.3
      namespace: istio-cni
      values:
        cni:
          cniConfDir: /etc/cni/multus/net.d # ACP 4.0 中为 /etc/cni/net.d
          excludeNamespaces:
            - istio-cni
            - kube-system

使用 InPlace 策略更新 Istio 控制平面

使用 InPlace 策略更新 Istio 时,版本只能一次递增一个小版本。若需跨越多个小版本更新,必须在每次更新后递增版本并重启工作负载。重启工作负载可确保 sidecar 与控制平面版本兼容。所有工作负载重启后,更新过程完成。

前提条件

  • 您已以 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
  • 已安装 Alauda Container Platform Networking for Multus 插件。
  • 已安装 Alauda Service Mesh v2 Operator 并部署 Istio。
  • 本地已安装 istioctl
  • 已将 Istio 控制平面配置为使用 InPlace 更新策略。本示例中,Istio 资源名为 default,部署在 istio-system 命名空间。
  • 已安装所需版本的 Istio CNI 插件。本示例中,IstioCNI 资源名为 default,部署在 istio-cni 命名空间。
  • 已为 bookinfo 命名空间打标签以启用 sidecar 注入。
  • 集群中有运行的应用工作负载。本示例中,bookinfo 应用部署在 bookinfo 命名空间。

操作步骤

  1. 修改 Istio 资源中的版本。例如,要更新到 Istio 1.26.3,运行以下命令将 spec.version 字段设置为 v1.26.3

    kubectl patch istio default --type='merge' -p '{"spec":{"version":"v1.26.3"}}'

    Istio CR 中的版本更新

    kind: Istio
    spec:
      version: v1.26.3
      updateStrategy:
        type: InPlace

    Service Mesh v2 Operator 会部署新的控制平面版本,替换旧版本。sidecar 会自动重新连接到新的控制平面。

  2. 运行以下命令确认新版本控制平面已就绪:

    kubectl get istio

    示例输出

    NAME      REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
    default   1           1       1        default           Healthy   v1.26.3   8m10s
  3. 运行以下命令重启应用工作负载,以注入新版本的 sidecar:

    kubectl rollout restart deployment -n bookinfo

验证

通过以下命令验证新版本 sidecar 是否运行:

istioctl proxy-status

示例输出

NAME                                                    CLUSTER        CDS                LDS                EDS                RDS                ECDS        ISTIOD                                     VERSION
details-v1-7d775cb4f6-5t9zm.bookinfo                    Kubernetes     SYNCED (2m25s)     SYNCED (2m25s)     SYNCED (2m17s)     SYNCED (2m25s)     IGNORED     istiod-default-v1-26-3-c98fd9675-r7bfw     1.26.3
productpage-v1-7c4b6b857-mxrw6.bookinfo                 Kubernetes     SYNCED (2m35s)     SYNCED (2m35s)     SYNCED (2m17s)     SYNCED (2m35s)     IGNORED     istiod-default-v1-26-3-c98fd9675-r7bfw     1.26.3
ratings-v1-5b896f8544-r552l.bookinfo                    Kubernetes     SYNCED (2m21s)     SYNCED (2m21s)     SYNCED (2m17s)     SYNCED (2m21s)     IGNORED     istiod-default-v1-26-3-c98fd9675-r7bfw     1.26.3
reviews-v1-746f96c9d4-9pw8k.bookinfo                    Kubernetes     SYNCED (2m17s)     SYNCED (2m17s)     SYNCED (2m17s)     SYNCED (2m17s)     IGNORED     istiod-default-v1-26-3-c98fd9675-r7bfw     1.26.3
reviews-v2-97bdf5876-4mzx5.bookinfo                     Kubernetes     SYNCED (2m35s)     SYNCED (2m35s)     SYNCED (2m17s)     SYNCED (2m35s)     IGNORED     istiod-default-v1-26-3-c98fd9675-r7bfw     1.26.3
reviews-v3-77d9db6844-djgjk.bookinfo                    Kubernetes     SYNCED (2m19s)     SYNCED (2m19s)     SYNCED (2m17s)  SYNCED (2m19s)     IGNORED     istiod-default-v1-26-3-c98fd9675-r7bfw     1.26.3

VERSION 列应与新的控制平面版本一致。