使用 Helm 安装
此特性目前处于 alpha 阶段。
执行必要的.
检查 Pod 和服务的要求.
,需高于 3.1.1 版本。
Istio 安装不再支持 Helm2。
本文命令使用的 Helm charts 来自于 Istio 发行包,存放于目录 。
安装步骤
将目录转到发行包的根目录,按照以下说明进行操作。
default chart 配置将安全的第三方令牌映射到服务账户令牌, 此令牌将被 Istio 代理用于认证 Istio 控制平面。 继续安装下面 chart 之前,你需要用下面 验证:在集群中,第三方令牌是否启用。 如果尚未启用第三方令牌,你应该将参数 --set global.jwtPolicy=first-party-jwt
添加到 Helm 安装命令中。 如果设置 jwtPolicy
时出了问题,各类pod,比如关联到 istiod
、网关的 pod、 以及被注入 Envoy 代理的工作负载的 Pod等等,都会因为缺少 istio-token
卷的原因,而不能部署。
为 Istio 组件,创建命名空间
istio-system
:$ kubectl create namespace istio-system
安装 Istio base chart,它包含了 Istio 控制平面用到的集群范围的资源:
$ helm install istio-base manifests/charts/base -n istio-system
安装 Istio discovery chart,它用于部署
istiod
服务:$ helm install istiod manifests/charts/istio-control/istio-discovery \ --set global.hub="docker.io/istio" \ --set global.tag="1.13.2" \ -n istio-system
(可选项) 安装 Istio 的入站网关 chart,它包含入站网关组件:
$ helm install istio-ingress manifests/charts/gateways/istio-ingress \ --set global.hub="docker.io/istio" \ --set global.tag="1.13.2" \ -n istio-system
(可选项) 安装 Istio 的出站网关 chart,它包含了出站网关组件:
$ helm install istio-egress manifests/charts/gateways/istio-egress \ --set global.hub="docker.io/istio" \ --set global.tag="1.13.2" \ -n istio-system
确认命名空间
istio-system
中所有 Kubernetes pods 均已部署,且返回值中 的值为Running
:
更新 Istio 配置
你可以用自己的安装参数,覆盖掉前面用到的 Istio Helm chart 的默认行为, 然后按照 Helm 升级流程来定制安装你的 Istio 网格系统。 至于可用的配置项,你可以在 values.yaml
文件内找到, 此文件位于你的 Istio 发行包的 manifests/charts
目录中。
注意:上面说到的 Istio Helm chart values 特性正在紧张的开发中,尚属于试验阶段。 升级到新版本的 Istio,涉及到把你的定制参数迁移到新 API 定义中去。
定制安装支持两种方式: 方式和 Helm 值文件方式。 其中, ProxyConfig
支持模式验证,但非结构化的 Helm 值文件不支持,所以更推荐使用前者。
在你的集群中升级 Istio 之前,建议备份你的定制安装配置文件,以备不时之需。
$ kubectl get crds | grep 'istio.io' | cut -f1-1 -d "." | \ xargs -n1 -I{} sh -c "kubectl get --all-namespaces -o yaml {}; echo ---" > $HOME/ISTIO_RESOURCE_BACKUP.yaml
可以这样恢复你定制的配置文件:
$ kubectl apply -f $HOME/ISTIO_RESOURCE_BACKUP.yaml
如果你需要将使用 istioctl
或 Operator 安装的 Istio 迁移到 Helm, 那要删除当前 Istio 控制平面资源,并根据上面的说明,使用 Helm 重新安装 Istio。 在删除当前 Istio 时,前外不能删掉 Istio 的客户资源定义(CRDs),以免丢掉你的定制 Istio 资源。
建议:从集群中删除 Istio 前,使用上面的说明备份你的 Istio 资源。
依据你的安装方式,选择 Istioctl 卸载指南 或 。
按照下面步骤,安装一个金丝雀版本的 Istio 控制平面,验证新版本是否兼容现有的配置和数据平面:
注意:安装金丝雀版本的 istiod
服务后,主版本和金丝雀版本共享来自 base chart 的底层集群范围的资源。
当前,Istio 出站和入站网关的金丝雀升级支持尚且处于 紧张的开发过程, 属于 experimental
(实验)阶段。
设置版本,安装金丝雀版本的 Istio discovery chart:
$ helm install istiod-canary manifests/charts/istio-control/istio-discovery \ --set revision=canary \ --set global.hub="docker.io/istio" \ --set global.tag=<version_to_upgrade> \ -n istio-system
按照 步骤在金丝雀版本的控制平面中测试或迁移存量工作负载。
在你验证并迁移工作负载到金丝雀版本的控制平面之后,即可删除老版本的控制平面:
$ helm delete istiod -n istio-system
此升级路径仅支持 Istio 1.8+ 的版本。
将用于覆盖默认配置的值文件(values file)或自定义选项添加到下面的命令中, 以在 Helm 升级过程中保留自定义配置。
升级 Istio base chart:
$ helm upgrade istio-base manifests/charts/base -n istio-system
升级 Istio discovery chart:
$ helm upgrade istiod manifests/charts/istio-control/istio-discovery \ --set global.hub="docker.io/istio" \ --set global.tag=<version_to_upgrade> \ -n istio-system
(可选项) 如果集群中安装了 Istio 的入站或出站网关 charts,则升级它们:
$ helm upgrade istio-ingress manifests/charts/gateways/istio-ingress \ --set global.hub="docker.io/istio" \ --set global.tag=<version_to_upgrade>\ -n istio-system $ helm upgrade istio-egress manifests/charts/gateways/istio-egress \ --set global.hub="docker.io/istio" \ --set global.tag=<version_to_upgrade> \ -n istio-system
卸载
卸载前面安装的 chart,以便卸载 Istio 和它的各个组件。
列出在命名空间
istio-system
中安装的所有 Istio chart:$ helm ls -n istio-system
(可选项) 删除 Istio 的入/出站网关 chart:
$ helm delete istio-egress -n istio-system $ helm delete istio-ingress -n istio-system
删除 Istio discovery chart:
$ helm delete istiod -n istio-system
删除 Istio base chart:
通过 Helm 删除 chart 并不会级联删除它安装的定制资源定义(CRD)。
$ helm delete istio-base -n istio-system
删除命名空间
istio-system
:$ kubectl delete namespace istio-system
```
$ kubectl get crd | grep --color=never 'istio.io' | awk '{print $1}' \
| xargs -n1 kubectl delete crd
```