使用 Helm 安装

    此特性目前处于 alpha 阶段。

    1. 执行必要的.

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

    3. ,需高于 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 卷的原因,而不能部署。

    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.13.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.13.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.13.2" \ -n istio-system

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

    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. 按照 步骤在金丝雀版本的控制平面中测试或迁移存量工作负载。

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

      $ helm delete istiod -n istio-system

    此升级路径仅支持 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

    ``` $ kubectl get crd | grep --color=never 'istio.io' | awk '{print $1}' \ | xargs -n1 kubectl delete crd ```