使用 Helm 安装
请跟随本指南一起,使用 Helm 安装、配置、并深入评估 Istio 网格系统。 本指南用到的 Helm chart、以及使用 Istioctl、Operator 安装 Istio 时用到的 chart,它们都是相同的底层 chart。
此特性目前处于 alpha 阶段。
先决条件
执行必要的平台安装.
检查 Pod 和服务的要求.
安装 Helm 客户端 ,需高于 3.1.1 版本。
Istio 安装不再支持 Helm2。
本文命令使用的 Helm charts 来自于 Istio 发行包,存放于目录 manifests/charts
。
安装步骤
将目录转到发行包的根目录,按照以下说明进行操作。
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.12.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.12.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.12.2" \ -n istio-system
验证安装
确认命名空间
istio-system
中所有 Kubernetes pods 均已部署,且返回值中STATUS
的值为Running
:$ kubectl get pods -n istio-system
更新 Istio 配置
你可以用自己的安装参数,覆盖掉前面用到的 Istio Helm chart 的默认行为, 然后按照 Helm 升级流程来定制安装你的 Istio 网格系统。 至于可用的配置项,你可以在 values.yaml
文件内找到, 此文件位于你的 Istio 发行包的 manifests/charts
目录中。
注意:上面说到的 Istio Helm chart values 特性正在紧张的开发中,尚属于试验阶段。 升级到新版本的 Istio,涉及到把你的定制参数迁移到新 API 定义中去。
定制安装支持两种方式: ProxyConfig 方式和 Helm 值文件方式。 其中, ProxyConfig
支持模式验证,但非结构化的 Helm 值文件不支持,所以更推荐使用前者。
使用 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
从非 Helm 安装迁移
如果你需要将使用 istioctl
或 Operator 安装的 Istio 迁移到 Helm, 那要删除当前 Istio 控制平面资源,并根据上面的说明,使用 Helm 重新安装 Istio。 在删除当前 Istio 时,前外不能删掉 Istio 的客户资源定义(CRDs),以免丢掉你的定制 Istio 资源。
建议:从集群中删除 Istio 前,使用上面的说明备份你的 Istio 资源。
依据你的安装方式,选择 Istioctl 卸载指南 或 Operator 卸载指南。
金丝雀升级 (推荐)
按照下面步骤,安装一个金丝雀版本的 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
验证在你的集群中运行了两个版本的
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
按照 这里的 步骤在金丝雀版本的控制平面中测试或迁移存量工作负载。
在你验证并迁移工作负载到金丝雀版本的控制平面之后,即可删除老版本的控制平面:
$ helm delete istiod -n istio-system
就地升级
使用 Helm 的升级流程,在你的集群中就地升级 Istio:
此升级路径仅支持 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
(可选项) 删除 Istio 安装的 CRD
永久删除 CRD, 会删除你在集群中创建的所有 Istio 资源。 用下面命令永久删除集群中安装的 Istio CRD:
```
$ kubectl get crd | grep --color=never 'istio.io' | awk '{print $1}' \
| xargs -n1 kubectl delete crd
```