istio1.11.2版本安装
使用 Helm 安装(istio1.7后重新启用helm)
阅读大约需要 3 分钟 页面测试
请跟随本指南一起,使用 Helm 安装、配置、并深入评估 Istio 网格系统。 本指南用到的 Helm chart、以及使用 Istioctl、Operator 安装 Istio 时用到的 chart,它们都是相同的底层 chart。
此特性目前处于 alpha 阶段。
先决条件
- 下载 Istio 发行版.
- 执行必要的平台安装.
- 检查 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.11.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.11.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.11.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