Helm 是目前 Istio 官方推荐的安装方式,除去安装以外,还能够利用对输入值的一些调整,完成对 Istio 的部分配置工做。官方提供了 Istio 的 Helm 部署方式,侧重于快速启动,而这一组文章将会采用由上至下的顺序,基于 Istio 1.0.2 版本的 Helm Chart 作一系列的讲解。node
Istio 的 Helm Chart 分为两个大分支:istio 和 istio-remote,后者为多集群部署方式,这里暂不涉及,后面的内容围绕 istio 展开。架构
Istio Chart 是一个总分结构,其分级结构和设计结构是一致的,这里作一个简单的说明。分布式
Chart 的基础信息,这里看到 1.0.2 的 Release 中,version
的值仍是 1.0.1;要求的 Tiller 版本要大于等于 2.7.2-0
。ide
这里提供了一组 values 文件,提供 Istio 在各类场景下的关键配置范本。对 Istio 的定制能够从 values.yaml
的改写开始,完成后可使用 helm template
命令来生成最终的部署文件供 kubectl
使用。values.yaml
文件的一些细节能够参考官方文档。ui
这个文件用于管理 Chart 的依赖关系,Istio 的各个组件就是在这里定义的,而且能够经过变量进行控制。spa
该文件会生成一组节点亲和/互斥元素,供各个组件在渲染 YAML 时候使用。设计
nodeAffinityRequiredDuringScheduling
:仅在本文件中使用。这里规定了对节点的要求,values.yaml
中的 global.arch
变量中列出了一系列的主机架构,只有出如今这一列表中,且对应值大于 0
的节点,才会将 Pod 调度到该节点上。nodeAffinityPreferredDuringScheduling
:仅在本文件中使用。这里规定了调度优先级,为各类架构的节点分配了权重。nodeaffinity
:包含了上面谈到的两个模板,合成为一个节点亲和性的代码段,供外部文件使用,影响范围包括: |文件名|涉及对象| |—-|—-| |charts/galley/templates/deployment.yaml
|Deployment:istio-galley
。| |charts/gateways/templates/deployment.yaml
|全部 gateways Chart 生成的 Deployment。| |charts/grafana/templates/deployment.yaml
|Deployment:grafana
。| |charts/ingress/templates/deployment.yaml
|Deployment:istio-ingress
。| |charts/mixer/templates/deployment.yaml
|Deployment:istio-policy
| |charts/pilot/templates/deployment.yaml
|Deployment:istio-pilot
| |charts/prometheus/templates/deployment.yaml
|Deployment:prometheus
| |charts/security/templates/deployment.yaml
|Deployment:istio-citadel
| |charts/servicegraph/templates/deployment.yaml
|Deployment:servicegraph
| |charts/sidecarInjectorWebhook/templates/deployment.yaml
|Deployment:istio-sidecar-injector
| |charts/tracing/templates/deployment.yaml
|Deployment:istio-tracing
|这个文件并不特别,建立了四个变量,供 Helm 使用。code
这里定义了 ConfigMap 对象 istio-sidecar-injector
,为 sidecarInjectorWebhook
提供配置支持,在全局变量 omitSidecarInjectorConfigMap
为 False
的时候进行渲染,这一参数会用在生成新的 Gateway 之类的调整功能上,防止建立多余的 ConfigMap。这里能够看到使用各类变量拼装而成的注入模板,用于为被注入 Pod 提供初始化和 Sidecar 容器的支持。其中设计的变量会在后文中进行讲解。对象
这个文件定义了 ConfigMap 对象 istio
,该对象会随 Pilot 一同建立,也就是说它是 Pilot 的依赖项。其中所涉变量也一样会在其余文章中进行讲解。blog
certmanager
:一个基于 Jetstack Cert-Manager 项目的 ACME 证书客户端,用于自动进行证书的申请、获取以及分发galley
:Istio 利用 Galley 进行配置管理工做。gateways
:使用 Gateways 一节的配置,能够实现多个 Gateway Controllergrafana
:图形化的 Istio Dashboard。ingress
:一个遗留设计,缺省关闭,v1alpha3 以后建议弃用。kiali
:带有分布式跟踪、配置校验等多项功能的 Dashboard。mixer
:pilot
:prometheus
:security
:servicegraph
:sidecarInjectorWebhook
:自动注入 Webhook 的相关配置tracing
:Jaeger 的分布式跟踪相关配置。本篇主要讲述的是总体结构以及顶层对象的一些内容。后面将会分几篇文章讲讲各类变量的应用以及各个 Chart 的配置。