使用 Helm 升级

请按照本指南使用 Helm 升级和配置 Istio 网格。本指南假设您已对 Istio 的先前次要版本或修补程序版本执行了 使用 Helm 安装

本指南中使用的 baseistiod 的 Helm 图表与通过 Istioctl 安装 Istio 时使用的相同。但是,通过 Istioctl 进行的安装使用不同的 网关图表,而不是本指南中描述的 图表

先决条件

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

  2. 检查 Pod 和服务的 Requirements

  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.ac.cn/latest/docs/setup/getting-started/>

您可以按照以下步骤安装 Istio 控制平面的 Canary 版本,以验证新版本是否与您现有的配置和数据平面兼容。

  1. 升级 Istio 基础图表以确保所有集群范围的资源都更新到最新版本。

    $ helm upgrade istio-base istio/base -n istio-system
    
  2. 通过设置修订版本值来安装 Istio discovery 图表的 Canary 版本。

    $ 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 网关,请通过设置修订版本值安装网关图表的 Canary 版本。

    $ 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
    

    有关网关 Canary 升级的详细文档,请参阅 升级网关

  6. 按照 此处 的步骤测试或迁移现有工作负载以使用 Canary 控制平面。

  7. 验证并迁移工作负载以使用 Canary 控制平面后,您可以卸载旧的控制平面。

    $ helm delete istiod -n istio-system
    
  8. 再次升级 Istio 基础图表,这次将新的 canary 修订版本设为集群范围的默认值。

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

稳定版本标签

在将命名空间移动到新修订版本时手动重新标记命名空间可能很繁琐且容易出错。修订版本标签 可以解决此问题。修订版本标签 是指向修订版本的稳定标识符,可用于避免重新标记命名空间。网格操作员无需重新标记命名空间,只需更改标签以指向新的修订版本即可。使用该标签标记的所有命名空间都将同时更新。

用法

考虑一个安装了两个修订版本的集群,1-23-11-24-0。集群操作员创建了一个修订版本标签 prod-stable,指向较旧的稳定版本 1-23-1,以及一个指向较新版本 1-24-0 的修订版本标签 prod-canary。可以通过以下命令达到该状态
$ 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 -

修订版本、标签和命名空间之间的最终映射如下所示

Two namespaces pointed to prod-stable and one pointed to 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 的控制平面的稳定性感到满意后,可以通过修改 prod-stable 修订版本标签以指向较新的 1-24-0 修订版本,通过一次操作更新标记为 istio.io/rev=prod-stable 的命名空间。

$ 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 -

现在,修订版本、标签和命名空间之间的更新映射如下所示

Namespace labels unchanged but now all namespaces pointed to {{< 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 资源。
  • 从非默认修订版本中窃取领导者锁并执行单例网格职责(例如更新资源状态)。

要将修订版本 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 -
在与现有的非修订版本 Istio 安装一起使用 default 标签时,建议删除旧的 MutatingWebhookConfiguration(通常称为 istio-sidecar-injector),以避免旧的和新的控制平面都尝试注入。

就地升级

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

  1. 升级 Istio 基础图表。

    $ helm upgrade istio-base istio/base -n istio-system
    
  2. 升级 Istio discovery 图表。

    $ helm upgrade istiod istio/istiod -n istio-system
    
  3. (可选)升级和网关图表安装在您的集群中。

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

卸载

请参阅我们 Helm 安装指南 中的卸载部分。

这些信息是否有用?
您是否有任何改进建议?

感谢您的反馈!