使用 Helm 升级

    本指南中使用的 Helm Chart 与通过 Istioctl 或 安装 Istio 时使用的底层 Chart 相同。

    1. 执行任何必要的。

    2. 检查 Pod 和服务的要求

    3. 3.6 或更高的版本。

    4. 配置 Helm 存储库:

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

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

    执行升级时 。因为有这个限制,所以在用 Helm 升级 Istio 时需要一个额外的步骤。

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

    请注意,当您安装一个金丝雀版本的 istiod 服务时,可以在主要安装和金丝雀安装之间共享来自基础 Chart 的底层集群范围资源。

    1. 升级 Kubernetes CRD:

      1. 通过设置修订版的值来安装金丝雀版本的 Istio 发现 Chart:

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

        1. $ kubectl get pods -l app=istiod -L istio.io/rev -n istio-system
        2. NAME READY STATUS RESTARTS AGE REV
        3. istiod-5649c48ddc-dlkh8 1/1 Running 0 71m default
        4. istiod-canary-9cc9fd96f-jpc7n 1/1 Running 0 34m canary
      3. 验证您已将两个 istio-ingress gateway 版本安装到了集群中:

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

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

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

      5. 升级 Istio base chart,将新的修订版作为默认值。

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

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

      用法

      考虑到一个安装了 1-9-51-10-0 两个修订版本的集群。集群管理员创建了一个 prod-stable 修订标签, 以指向较旧的 1-9-5 稳定版本,并创建一个 prod-canary 修订标签,用以指向较新的 1-10-0 修订版本。 可以通过以下命令达到该状态:

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

      这些命令将在您的集群中创建新的 MutatingWebhookConfiguration 资源,由于是通过 kubectl 手动应用这些模板, 所以这些资源不属于任何 Helm Chart。参见以下指示说明来卸载修订标记。

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

      Two namespaces pointed to prod-stable and one pointed to prod-canary

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

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

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

      Namespace labels unchanged but now all namespaces pointed to 1-10-0

      Namespace labels unchanged but now all namespaces pointed to 1-10-0

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

      默认标记

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

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

      执行以下命令,修改默认版本为 1-10-0

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

      当使用 default 标签和现有的未修订版本的 Istio 安装方式一起使用时, 建议删除旧的 MutatingWebhookConfiguration(通常称为 istio-sidecar-injector), 以避免新旧控制平面同时尝试注入。

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

      将您的重载值文件或自定义选项添加到以下命令,以在 Helm 升级期间保留您的自定义配置。

      1. 升级 Kubernetes CRD:

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

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

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