使用 Helm 升级

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

本指南中使用的 baseistiod 的 Helm Chart 与通过 Istioctl 安装 Istio 时使用的相同。 但是,通过 Istioctl 安装使用的网关 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-23-11-24-0 两个修订版本的集群。集群管理员创建了一个 prod-stable 修订标签, 以指向较旧的 1-23-1 稳定版本,并创建一个 prod-canary 修订标签,用以指向较新的 1-24-0 修订版本。 可以通过以下命令达到该状态:
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-23-1 -n istio-system | kubectl apply -f -
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-canary}" --set revision=1-24-0 -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-23-1   ...
prod-canary 1-24-0   ...
prod-stable 1-23-1   ...

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

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

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

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

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

默认标记

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

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

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

$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{default}" --set revision=1-24-0 -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 安装指南中的卸载章节。

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

感谢您的反馈!