使用 Helm 升级

请参阅本指南使用 Helm 升级和配置 Istio 网格。 本指南假设您已经使用 Helm 安装了 Istio 的前一个次要版本或补丁版本。

本指南中使用的 baseistiod Helm Chart 与通过 IstioctlOperator 安装 Istio 时使用的 Chart 相同。 但是,通过 Istioctl 和 Operator 进行安装时使用了与本指南所述 Chart 不同的网关 Chart

先决条件

  1. 执行任何必要的特定于平台的设置

  2. 检查 Pod 和服务的要求

  3. 安装 Helm 客户端 3.6 或更高的版本。

  4. 配置 Helm 存储库:

$ helm repo add istio https://istio-release.storage.googleapis.com/charts
$ helm repo update

升级步骤

升级 Istio 之前,推荐运行 istioctl x precheck 命令以确保升级能与您的环境兼容。

$ istioctl x precheck
✔ No issues found when checking the cluster. Istio is safe to install or upgrade!
  To get started, check out <https://istio.io/latest/docs/setup/getting-started/>

金丝雀升级(推荐)

您可以使用以下步骤,安装金丝雀版本的 Istio 控制平面来校验新版本是否与您现有的配置和数据平面兼容:

  1. 升级 Kubernetes CRD

    $ kubectl apply -f manifests/charts/base/crds
    
  2. 通过设置修订版的值来安装金丝雀版本的 Istio 发现 Chart:

    $ helm install istiod-canary istio/istiod \
        --set revision=canary \
        -n istio-system
    
  3. 验证您已经将两个 istiod 版本安装到了您的集群中:

    $ kubectl get pods -l app=istiod -L istio.io/rev -n istio-system
      NAME                            READY   STATUS    RESTARTS   AGE   REV
      istiod-5649c48ddc-dlkh8         1/1     Running   0          71m   default
      istiod-canary-9cc9fd96f-jpc7n   1/1     Running   0          34m   canary
    
  4. 如果您正在使用 Istio Gateway, 可通过设置 revision 的值来安装金丝雀修订版的 Gateway Chart:

    $ helm install istio-ingress-canary istio/gateway \
        --set revision=canary \
        -n istio-ingress
    
  5. 验证您已将两个 istio-ingress gateway 版本安装到了集群中:

    $ kubectl get pods -L istio.io/rev -n istio-ingress
      NAME                                    READY   STATUS    RESTARTS   AGE     REV
      istio-ingress-754f55f7f6-6zg8n          1/1     Running   0          5m22s   default
      istio-ingress-canary-5d649bd644-4m8lp   1/1     Running   0          3m24s   canary
    

    参见升级 Gateway了解有关 Gateway 金丝雀升级的深度解析文档。

  6. 遵循此处的步骤来测试和迁移现有工作负载,以使用金丝雀控制平面。

  7. 一旦您已验证并迁移工作负载以使用金丝雀控制平面,您就可以卸载旧的控制平面:

    $ helm delete istiod -n istio-system
    
  8. 升级 Istio base chart,将新的修订版作为默认值。

    $ helm upgrade istio-base istio/base --set defaultRevision=canary -n istio-system --skip-crds
    

稳定修订标签(实验特性)

在将命名空间移动到新版本时,手动的重新标记命名空间可能既乏味又容易出错。 修订标签解决了这个问题。 修订标签是指向修订的稳定标识符,可用于避免重新标记命名空间。 网格管理员可以简单地更改标签以指向新的修订版,而不是重新标记命名空间。所有标有该标签的命名空间将同时更新。

用法

考虑到一个安装了 1-21-11-22-1 两个修订版本的集群。集群管理员创建了一个 prod-stable 修订标签, 以指向较旧的 1-21-1 稳定版本,并创建一个 prod-canary 修订标签,用以指向较新的 1-22-1 修订版本。 可以通过以下命令达到该状态:
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-21-1 -n istio-system | kubectl apply -f -
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-canary}" --set revision=1-22-1 -n istio-system | kubectl apply -f -

修订、标签和命名空间之间的结果映射如下所示:

两个命名空间指向了 prod-stable 而一个指向了 prod-canary
两个命名空间指向了 prod-stable 而一个指向了 prod-canary

除了标记的命名空间之外,集群管理员还可以通过以下 istioctl tag list 命令查看此映射:

$ istioctl tag list
TAG         REVISION NAMESPACES
default     1-21-1   ...
prod-canary 1-22-1   ...
prod-stable 1-21-1   ...

当集群管理员对标记为 prod-canary 的控制面、命名空间的稳定性感到满意后, istio.io/rev=prod-stable 可以通过修改 prod-stable 修订标记来更新, 以指向更新的 1-22-1 修订版本。

$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-22-1 -n istio-system | kubectl apply -f -

现在,修订版、标记和命名空间之间更新后的映射关系如下所示:

命名空间标签没有变化,但现在所有命名空间都指向 {{< istio_full_version_revision >}}
命名空间标签没有变化,但现在所有命名空间都指向 {{< istio_full_version_revision >}}

当在带有 prod-stable 标签的命名空间中重新启动注入工作负载,将导致这些工作负载使用 1-22-1 控制平面。 请注意,将工作负载迁移到新版本时不需要重新标记命名空间。

默认标记

标签 default 指向的修订版本被认为是默认的修订版本,并具有额外的语义含义。 默认版本的功能如下:

  • istio-injection=enabled 命名空间选择器、sidecar.istio.io/inject=true 对象选择器和 istio.io/rev=default 选择器注入 Sidecar。
  • 验证 Istio 资源。
  • 从非默认的修订版本中窃取 leader 锁并执行单例网格任务(例如更新资源状态)。

要将修订版本 1-22-1 设为默认版本,请运行以下命令:

$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{default}" --set revision=1-22-1 -n istio-system | kubectl apply -f -
当使用 default 标签和现有的未修订版本的 Istio 安装方式一起使用时, 建议删除旧的 MutatingWebhookConfiguration(通常称为 istio-sidecar-injector), 以避免新旧控制平面同时尝试注入。

原地升级

您可以使用 Helm 升级工作流在您的集群中对 Istio 执行原地升级。

  1. 升级 Kubernetes CRD

    $ kubectl apply -f manifests/charts/base/crds
    
  2. 升级 Istio base chart:

    $ helm upgrade istio-base manifests/charts/base -n istio-system --skip-crds
    
  3. 升级 Istio discovery chart:

    $ helm upgrade istiod istio/istiod -n istio-system
    
  4. (可选)升级集群中安装的 gateway chart:

    $ helm upgrade istio-ingress istio/gateway -n istio-ingress
    

卸载

请参阅 Helm 安装指南中的卸载章节。

这些信息有用吗?
您是否有更多建议和改进意见?

感谢您的反馈!