使用 Helm 升级
请参阅本指南使用 Helm 升级和配置 Istio 网格。 本指南假设您已经使用 Helm 安装了 Istio 的前一个次要版本或补丁版本。
本指南中使用的 Helm Chart 与通过 Istioctl
安装 Istio 时使用的图表相同,但 gateway
Chart 除外。
Istioctl 使用的 Gateway Chart 与本指南中描述的 Gateway Chart 不同
先决条件
执行任何必要的特定于平台的设置。
检查 Pod 和服务的要求。
安装最新的 Helm 客户端。 早于当前支持的最旧 Istio 版本 发布的 Helm 版本未经测试、支持或推荐。
配置 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 控制平面来校验新版本是否与您现有的配置和数据平面兼容:
升级 Istio Base Chart,以确保所有集群范围的资源都是最新的:
$ helm upgrade istio-base istio/base -n istio-system
通过设置修订版的值来安装金丝雀版本的 Istio 发现 Chart:
$ helm install istiod-canary istio/istiod \ --set revision=canary \ -n istio-system
验证您已经将两个
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
如果您正在使用 Istio Gateway, 可通过设置 revision 的值来安装金丝雀修订版的 Gateway Chart:
$ helm install istio-ingress-canary istio/gateway \ --set revision=canary \ -n istio-ingress
验证您已将两个
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 金丝雀升级的深度解析文档。
遵循此处的步骤来测试和迁移现有工作负载,以使用金丝雀控制平面。
一旦您已验证并迁移工作负载以使用金丝雀控制平面,您就可以卸载旧的控制平面:
$ helm delete istiod -n istio-system
再次升级 Istio Base Chart,这次将新的
canary
修订版本设为集群范围的默认版本。$ helm upgrade istio-base istio/base --set defaultRevision=canary -n istio-system
稳定修订标签(实验特性)
在将命名空间移动到新版本时,手动的重新标记命名空间可能既乏味又容易出错。 修订标签解决了这个问题。 修订标签是指向修订的稳定标识符,可用于避免重新标记命名空间。 网格管理员可以简单地更改标签以指向新的修订版,而不是重新标记命名空间。所有标有该标签的命名空间将同时更新。用法
考虑到一个安装了1-24-1
和 1-25-0
两个修订版本的集群。集群管理员创建了一个 prod-stable
修订标签,
以指向较旧的 1-24-1
稳定版本,并创建一个 prod-canary
修订标签,用以指向较新的 1-25-0
修订版本。
可以通过以下命令达到该状态:$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-24-1 -n istio-system | kubectl apply -f -
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-canary}" --set revision=1-25-0 -n istio-system | kubectl apply -f -
修订、标签和命名空间之间的结果映射如下所示:
除了标记的命名空间之外,集群管理员还可以通过以下 istioctl tag list
命令查看此映射:
$ istioctl tag list
TAG REVISION NAMESPACES
default 1-24-1 ...
prod-canary 1-25-0 ...
prod-stable 1-24-1 ...
当集群管理员对标记为 prod-canary
的控制面、命名空间的稳定性感到满意后,
istio.io/rev=prod-stable
可以通过修改 prod-stable
修订标记来更新,
以指向更新的 1-25-0
修订版本。
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-25-0 -n istio-system | kubectl apply -f -
现在,修订版、标记和命名空间之间更新后的映射关系如下所示:
当在带有 prod-stable
标签的命名空间中重新启动注入工作负载,将导致这些工作负载使用 1-25-0
控制平面。
请注意,将工作负载迁移到新版本时不需要重新标记命名空间。
默认标记
标签 default
指向的修订版本被认为是默认的修订版本,并具有额外的语义含义。
默认版本的功能如下:
- 为
istio-injection=enabled
命名空间选择器、sidecar.istio.io/inject=true
对象选择器和istio.io/rev=default
选择器注入 Sidecar。 - 验证 Istio 资源。
- 从非默认的修订版本中窃取 leader 锁并执行单例网格任务(例如更新资源状态)。
要将修订版本 1-25-0
设为默认版本,请运行以下命令:
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{default}" --set revision=1-25-0 -n istio-system | kubectl apply -f -
当使用 default
标签和现有的未修订版本的 Istio 安装方式一起使用时,
建议删除旧的 MutatingWebhookConfiguration
(通常称为 istio-sidecar-injector
),
以避免新旧控制平面同时尝试注入。原地升级
您可以使用 Helm 升级工作流在您的集群中对 Istio 执行原地升级。
升级 Istio Base Chart:
$ helm upgrade istio-base istio/base -n istio-system
升级 Istio Discovery Chart:
$ helm upgrade istiod istio/istiod -n istio-system
(可选)升级任何集群中安装的 Gateway Chart:
$ helm upgrade istio-ingress istio/gateway -n istio-ingress
卸载
请参阅 Helm 安装指南中的卸载章节。