使用 Helm 安装

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

此特性目前处于 alpha 阶段。

先决条件

  1. 下载 Istio 发行版.

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

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

  4. 安装 Helm 客户端 ,需高于 3.1.1 版本。

本文命令使用的 Helm charts 来自于 Istio 发行包,存放于目录 manifests/charts

安装步骤

将目录转到发行包的根目录,按照以下说明进行操作。

  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.9.5" \
        -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.9.5" \
        -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.9.5" \
        -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 目录中。

定制安装支持两种方式: 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 资源。

依据你的安装方式,选择 Istioctl 卸载指南Operator 卸载指南

金丝雀升级 (推荐)

按照下面步骤,安装一个金丝雀版本的 Istio 控制平面,验证新版本是否兼容现有的配置和数据平面:

  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:

  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 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
这些信息有用吗?
Do you have any suggestions for improvement?

Thanks for your feedback!