使用 Helm 升级
请按照本指南使用 Helm 升级和配置 Istio 网格。本指南假设您已对 Istio 的先前次要版本或修补程序版本执行了 使用 Helm 安装。
本指南中使用的base
和 istiod
的 Helm 图表与通过 Istioctl 安装 Istio 时使用的相同。但是,通过 Istioctl 进行的安装使用不同的 网关图表,而不是本指南中描述的 图表先决条件
执行任何必要的 特定于平台的设置。
安装 Helm 客户端,版本 3.6 或更高版本。
配置 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 版本,以验证新版本是否与您现有的配置和数据平面兼容。
升级 Istio 基础图表以确保所有集群范围的资源都更新到最新版本。
$ helm upgrade istio-base istio/base -n istio-system
通过设置修订版本值来安装 Istio discovery 图表的 Canary 版本。
$ 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 网关,请通过设置修订版本值安装网关图表的 Canary 版本。
$ 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
有关网关 Canary 升级的详细文档,请参阅 升级网关。
按照 此处 的步骤测试或迁移现有工作负载以使用 Canary 控制平面。
验证并迁移工作负载以使用 Canary 控制平面后,您可以卸载旧的控制平面。
$ helm delete istiod -n istio-system
再次升级 Istio 基础图表,这次将新的
canary
修订版本设为集群范围的默认值。$ helm upgrade istio-base istio/base --set defaultRevision=canary -n istio-system
稳定版本标签
在将命名空间移动到新修订版本时手动重新标记命名空间可能很繁琐且容易出错。修订版本标签 可以解决此问题。修订版本标签 是指向修订版本的稳定标识符,可用于避免重新标记命名空间。网格操作员无需重新标记命名空间,只需更改标签以指向新的修订版本即可。使用该标签标记的所有命名空间都将同时更新。用法
考虑一个安装了两个修订版本的集群,1-23-1
和 1-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 -
修订版本、标签和命名空间之间的最终映射如下所示
除了标记的命名空间之外,集群操作员还可以通过 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 -
现在,修订版本、标签和命名空间之间的更新映射如下所示
重新启动标记为 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 的就地升级。
升级 Istio 基础图表。
$ helm upgrade istio-base istio/base -n istio-system
升级 Istio discovery 图表。
$ helm upgrade istiod istio/istiod -n istio-system
(可选)升级和网关图表安装在您的集群中。
$ helm upgrade istio-ingress istio/gateway -n istio-ingress
卸载
请参阅我们 Helm 安装指南 中的卸载部分。