使用 Helm 进行安装

使用 Helm 安装和配置 Istio 的快速入门说明。这种方式为 Istio 控制平面和 Sidecar 提供了丰富的配置,因此推荐用这种方式进行生产环境中的 Istio 部署。

先决条件

  1. 完成必要的 Kubernetes 平台设置
  2. 检查对 Pod 和服务的要求
  3. 安装高于 2.10 版本的 Helm 客户端
  4. 默认情况下,Istio 使用 LoadBalancer 服务类型,而有些平台是不支持 LoadBalancer 服务的。对于缺少 LoadBalancer 支持的平台,执行下面的安装步骤时,可以在 Helm 命令中加入 --set gateways.istio-ingressgateway.type=NodePort --set gateways.istio-egressgateway.type=NodePort 选项,使用 NodePort 来替代 LoadBalancer 服务类型。

安装步骤

下面的命令可以在任何目录下运行。这里 Helm 用 https 方式从 Istio 提供的服务中下载 Chart。

  1. 用 Helm 每日构建版本的地址来更新 Helm 的本地包缓存。

    $ helm repo add istio.io "https://gcsweb.istio.io/gcs/istio-prerelease/daily-build/release-1.1-latest-daily/charts/"
    
  2. 在下面的两个互斥方案中选择一个完成部署。

    • 要使用 Kubernetes 清单来部署 Istio,可以使用方案 1 中的步骤。
    • 也可以用 Helm Tiller pod 来对 Istio 进行管理,方案 2 中描述了这种方式。

方案 1:使用 helm template 进行安装

如果你的集群中没有运行 Tiller,你也不想安装它。

  1. 创建一个 Istio 的工作目录,用于下载 Chart:

    $ mkdir -p $HOME/istio-fetch
    
  2. 下载安装过程所需的 Helm 模板:

    $ helm fetch istio.io/istio-init --untar --untardir $HOME/istio-fetch
    $ helm fetch istio.io/istio --untar --untardir $HOME/istio-fetch
    
  3. 为 Istio 组件创建命名空间 istio-system

    $ kubectl create namespace istio-system
    
  4. 使用 kubectl apply 安装所有的 Istio CRD,命令执行之后,会隔一段时间才能被 Kubernetes API Server 收到:

    $ helm template $HOME/istio-fetch/istio-init --name istio-init --namespace istio-system | kubectl apply -f -
    
  5. 用下面的命令,来确认 Istio 的 58 个 CRD 都已经成功的提交给 Kubernetes API Server:

    $ kubectl get crds | grep 'istio.io\|certmanager.k8s.io' | wc -l
    58
    
  6. 渲染和提交 Istio 的核心组件:

    $ helm template $HOME/istio-fetch/istio --name istio --namespace istio-system | kubectl apply -f -
    
  7. 删除步骤:

    $ kubectl delete namespace istio-system
    
  8. 如果需要,可以用下列命令删除所有的 CRD:

    $ kubectl delete -f $HOME/istio-fetch/istio-init/files
    

方案 2:在 Helm 和 Tiller 的环境中使用 helm install 命令进行安装

这个方案使用 Helm 和 Tiller 来对 Istio 的生命周期进行管理。

  1. 如果没有为 Tiller 创建 Service account,就创建一个:

    Zip
    $ kubectl apply -f @install/kubernetes/helm/helm-service-account.yaml@
    
  2. 使用 Service account 在集群上安装 Tiller:

    $ helm init --service-account tiller
    
  3. 安装 istio-init chart,来启动 Istio CRD 的安装过程:

    $ helm install istio.io/istio-init --name istio-init --namespace istio-system
    
  4. 用下面的命令,来确认 Istio 的 58 个 CRD 都已经成功的提交给 Kubernetes API Server:

    $ kubectl get crds | grep 'istio.io\|certmanager.k8s.io' | wc -l
    58
    
  5. 安装 istio Chart:

    $ helm install istio --name istio --namespace istio-system
    
  6. 删除步骤:

    $ helm delete --purge istio
    $ helm delete --purge istio-init
    

删除 CRD 和 Istio 配置

  1. 要永久删除 Istio 的 CRD 以及所有 Istio 配置:

    $ mkdir -p $HOME/istio-fetch
    $ helm fetch istio.io/istio-init --untar --untardir $HOME/istio-fetch
    $ kubectl delete -f $HOME/istio-fetch/istio-init/files