使用 Helm 安装

请跟随本指南一起,使用 Helm 安装、配置、并深入评估 Istio 网格系统。 本指南用到的 Helm chart、以及使用 IstioctlOperator 安装 Istio 时用到的 chart,它们都是相同的底层 chart。

此特性目前处于 alpha 阶段。

先决条件

  1. 下载 Istio 发行版.

  2. 执行必要的平台安装.

  3. 检查 Pod 和服务的要求.

  4. 安装 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 卷的原因,而不能部署。

  1. 为 Istio 组件,创建命名空间 istio-system :

    $ kubectl create namespace istio-system

  2. 安装 Istio base chart,它包含了 Istio 控制平面用到的集群范围的资源:

    $ helm install istio-base manifests/charts/base -n istio-system

  3. 安装 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

  4. (可选项) 安装 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

  5. (可选项) 安装 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

验证安装

  1. 确认命名空间 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 (实验)阶段。

  1. 设置版本,安装金丝雀版本的 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

  2. 验证在你的集群中运行了两个版本的 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

  3. 按照 这里的 步骤在金丝雀版本的控制平面中测试或迁移存量工作负载。

  4. 在你验证并迁移工作负载到金丝雀版本的控制平面之后,即可删除老版本的控制平面:

    $ helm delete istiod -n istio-system

就地升级

使用 Helm 的升级流程,在你的集群中就地升级 Istio:

此升级路径仅支持 Istio 1.8+ 的版本。

将用于覆盖默认配置的值文件(values file)或自定义选项添加到下面的命令中, 以在 Helm 升级过程中保留自定义配置。

  1. 升级 Istio base chart:

    $ helm upgrade istio-base manifests/charts/base -n istio-system

  2. 升级 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

  3. (可选项) 如果集群中安装了 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 和它的各个组件。

  1. 列出在命名空间 istio-system 中安装的所有 Istio chart:

    $ helm ls -n istio-system

  2. (可选项) 删除 Istio 的入/出站网关 chart:

    $ helm delete istio-egress -n istio-system $ helm delete istio-ingress -n istio-system

  3. 删除 Istio discovery chart:

    $ helm delete istiod -n istio-system

  4. 删除 Istio base chart:

    通过 Helm 删除 chart 并不会级联删除它安装的定制资源定义(CRD)。

    $ helm delete istio-base -n istio-system

  5. 删除命名空间 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 ```