第五章 用Helm部署Istio
5.1 Istio Chart概述
Helm是目前Istio官方推荐的安装方式。还可以对输入值进行一些调整,完成对Istio的部分配置工作。Istio Chart是一个总分结构,其分级结构和设计结构是一致的。
5.1.1 Chart.yaml
包含版本号、名称、关键字等元数据信息。
5.1.2 values-*.yaml
提供Istio在各种场景下关键字配置范本,可以作为Helm的输入文件,来对Istio进行典型定制。对Istio的定制可以从对这些输入文件的改写开始,改写完后使用
helm template 命令生成最终的部署文件,这样就能用kubectl完成部署了。多个values-*.yaml文件,其中values.yaml罗列了大多数常用变量,也是我们做定制的基础。
5.1.3 requirements.yaml
用于管理对子chart的依赖关系,定义了一系列开关变量。比如控制grafana是否安装,以及安装版本。
5.1.4 templates/_affinity.tpl
该文件会生成一组节点亲和或互斥元素,供各个组件在渲染YAML时使用。在该文件里使用了一系列变量,用于控制Istio组件的节点亲和性(也就是限制Istio在部署时对节点的选择)。
5.1.5 templates/sidecar-inject-configmap.yaml
保存的配置数据被用于进行SicerCar注入。istioctl完成的手工注入,或者Istio的自动注入,都会引用这个Configmap。如果希望修改Istio的Sidecar的注入过程及其行为,就可以从该文件或者对应的CongfigMap入手了。
5.1.6 templates/configmap.yaml
该文件也会生成一个Configmap, 名称为istio, 这个对象用于为Pilot提供启动配置参数。
5.1.7 templates/crds.yaml
该文件包含了Istio所需的CRD定义。
5.1.8 charts
这个目录中的子目录就是istio的组件,如下所述:
certmanager: 证书客户端,用于自动进行证书的申请、获取以及分发。
galley: Istio利用Galley进行配置管理工作。
gateways: 对Gateways Chart进行配置。
grafana: 图形化的Istio Dashboard
ingress: 建议弃用。
kiali: 带有分布式跟踪、配置校验等多项功能的Dashboard.
mixer: Istio的策略实施组件。
pilot: Istio的流量管理组件。
prometheus: 监控软件
security: 证书的自动管理
servicegraph: 分布式跟踪组件。
siecarInjectorWebhook: 自动注入Webhook的相关配置。
tracing: 分布式跟踪组件。
5.2 全局变量介绍
使用chart的时候,通常不会修改chart的主体,仅通过对变量的控制来实现对部署过程的定制。Istio Helm Chart提供了大量的变量来帮助用户对Istio的安装进行定制。
Istio Chart分为父子两级,因此变量也有全局和本地两级。全局变量使用保留字global进行定义,子chart可以通过values.global的方式引用全局变量,而在主Chart中也可以用chart.va的方式为子chart指定变量值。
5.2.1 hub和tag
多数情况,这两个变量代表所有镜像的地址。
这两个变量对于内网部署非常有必要,将Istio的镜像拉取回来,并推送到私库后,只要在values.yaml中进行修改,就可以将Istio所需镜像的引用指向内网私库,省去了逐个修改Deployment文档的麻烦。
5.2.2 ingress.enabled
开关,是否启用Istio的Ingress Controller, istio不推荐ingress, 而是推荐Ingress Gateway。
有两个变量会受到这个开关的影响:
k8sIngressSelector : 利用Pod标签选择一个Gateway作为Ingress Controller。
k8sIngressHttps: 如果为True, 就在istio-autogenerated-k8s-ingress这个Gateway定义中加入443端口及其TLS配置。
5.2.3 Proxy先关参数
在values.yaml中定义了一组proxy变量,用于对Sidecar进行控制。
1. proxy.resources
为Sidecar分配资源。CPU和内存等。
2. proxy.concurrency
Proxy worker的线程数量。如果被设置为0(默认值),则根据CPU线程或核的数量进行分配。
3. proxy.accessLogFile
sidecar的访问日志位置。如果设置为空字符串,则关闭访问日志功能。默认是/dev/stdout
4. proxy.privileged
istio-init、istio-proxy的特权模式开关。默认false
5. proxy.enableCoreDump
如果打开,则新注入的Sidecar会启动CoreDump功能,在Pod中加入初始化容器enable-core-dump。 默认是false。
6. proxy.includelPRanges
劫持IP范围的白名单。默认是“*”,也就是劫持所有地址的流量。
7. proxy.excludelPRanges
劫持IP范围的黑名单。默认是空字符串.
8. proxyincludelnboundPorts:
入站流量的端口劫持白名单。
9.proxy.excludeInboundPorts
入站流量的端口劫持黑名单。
10. proxy.autoInject
控制是否自动完成Sidecar的注入工作。
11. proxy.envoyStared
该变量的默认值是:
enabled: true
host: istio-statsd-prom-bridge
port: 9125
5.2.4 proxy_init.image
网络中的服务pod在启动之前,首先会运行一个初始化镜像来完成流量劫持工作,这个变量可以用于指定初始化容器镜像。
5.2.5 imagePullPolicy
镜像拉取策略。默认是“ifNotPresent”.
5.2.6 controlPlaneSecurityEnabled
5.2.7 disablePolicyChecks
Mixer的预检功能是否启用。预检功能是一个同步过程,有可能因为预检缓慢造成业务应用的阻塞。
5.2.8 enableTracing
是否启用分布式跟踪。
5.2.9 mtls.enabled
服务之间是否默认启用没TLS连接。
5.2.10 imagePullSecrets
拉取镜像过程中所需要的认证凭证。
5.2.11 arch
用于部署的节点范围。
5.2.12 oneNamespace
默认为false,Pilot会监控所有命名空间内的服务的变化。
5.2.13 configValidation
是否开启服务端的配置验证。
5.2.14 meshExpansion
要将服务网格扩展到物理机或者虚拟机上,就会使用这一变量。
5.2.15 meshExpansionILB
5.2.16 defaultResources
为所有Istio组件都提供一个最小资源限制。
5.2.17 hyperkube
在Istio的设置过程会使用一个镜像执行一些job,例如在早期版本安装过程中的CRD初始化,或者现在的清理过期证书等任务。
5.2.18 priorityClassName
具有优先级的Pod不会被驱逐或抢占资源。
5.2.19 crds
是否包含crd定义。
5.3 Istio安装清单的生成和部署
5.3.1 编辑values.yaml
我们需要先根据实际需求对Istio进行定制,定制方法就是编辑values.yaml, 常见的修改包含以下内容:
1 镜像地址:
有一个小技巧,对于4.2中用到的istio-demo.yaml清单文件,如果想获取其中使用的镜像名称,就可以使用grep命令方便的过滤出来:
grep -r image: istio-demo.yaml | grep -0 -e "image:.*" | sort | unqu
如果想改成私有仓库的地址,修改values.yaml中各个镜像的地址。
2 系统资源
values.yaml中的系统资源设置是非常保守的,并且不完整
3 服务类型
Istio的istio-ingressgateway服务的默认类型是Loadbalancer, 如果要部署的目标K8s集群中没有负载均衡支持,就需要对服务类型进行修改。
4 可视化组件的服务开放
在Istio中包含的Prometheus、Grafana以及Kiali等可视化组件,在默认情况下都是ClusterIP类型的,可以修改。
5.3.2 生成部署清单
对values.yaml编辑之后,使用helm template命令生成最终的部署清单。
输入文件为my-values.yaml,那么可以用如下命令生成我们需要的YAML文件。
my-istio.yaml是生成的部署文件。
helm template install/kubernetes/helm/istio --name istio --namespace istio-system -f my-values.yaml > my-istio.yaml
5.3.3 部署Istio
生成部署清单后,就可以开始部署了。
1 首先创建命名空间:
kubectl create ns istio-system namespace/istio-system created
2 用前面生成的部署清单部署istio
kubectl apply -f my-istio.yaml
第五章 用Helm部署Istio的更多相关文章
- 2017.2.28 activiti实战--第五章--用户与组及部署管理(三)部署流程及资源读取
学习资料:<Activiti实战> 第五章 用户与组及部署管理(三)部署流程及资源读取 内容概览:如何利用API读取已经部署的资源,比如读取流程定义的XML文件,或流程对应的图片文件. 以 ...
- 2017.2.28 activiti实战--第五章--用户与组及部署管理(二)部署流程资源
学习资料:<Activiti实战> 第五章 用户与组及部署管理(二)部署流程资源 内容概览:讲解流程资源的读取与部署. 5.2 部署流程资源 5.2.1 流程资源 流程资源常用的有以下几种 ...
- 2017.2.20 activiti实战--第五章--用户与组及部署管理(一)用户与组
学习资料:<Activiti实战> 第五章 用户与组及部署管理(一)用户与组 内容概览:讲解activiti中内置的一套用户.组的关系,以及如何通过API添加.删除.查询. 5.1 用户与 ...
- CentOS7安装CDH 第五章:CDH的安装和部署-CDH5.7.0
相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...
- 《Introduction to Tornado》中文翻译计划——第五章:异步Web服务
http://www.pythoner.com/294.html 本文为<Introduction to Tornado>中文翻译,将在https://github.com/alioth3 ...
- <自动化测试方案_5>第五章、代码单元自动化测试
第五章.代码单元自动化测试 代码单元测试需要根据编程语言,选择单元测试框架,然后访问类方法,函数.代码单元测试做自动化,相比API.UI自动化做起来更加麻烦,建议放到待API自动化测试.UI自动化测试 ...
- Testlink1.9.17使用方法(第五章 测试用例管理)
第五章 测试用例管理 QQ交流群:585499566 TestLink支持的测试用例的管理包含二层:分别为新建测试用例集(Test Suites).创建测试用例(Test Cases).可以把测试用例 ...
- helm 部署
Helm 基本概念 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共享和使用为Kubernetes构建的应用,它包含几个基本概念 Chart:一个 Helm 包,其中包含了 ...
- 《NodeJS开发指南》第五章微博实例开发总结
所有文章搬运自我的个人主页:sheilasun.me <NodeJS开发指南>这本书用来NodeJS入门真是太好了,而且书的附录部分还讲到了闭包.this等JavaScript常用特性.第 ...
随机推荐
- PostgreSQL逻辑复制使用记录
之前逻辑复制刚刚出来的时候就使用过,但是没有进行整理,这次一个项目需要逻辑复制的自动迁移,再次拾起逻辑复制. 在此之前有两个疑问: 1)同一个表,既有流复制,又有逻辑复制,这样数据会有两份吗? --不 ...
- 运算符和typeof
算术运算符 例: var a =10; var b = "a"; var c = a-b; 那么c的值是NaN. 逻辑运算符:&&,|| 注意:如果是非布尔类型 ...
- 在初次安vs2008时设置的为C#现在怎么将其改为其他类型的界面
如将C#改成C++, 工具 -> 导入和导出设置 -> 重置所有设置 -> 否,仅重置设置,从而覆盖我的当前设置 -> 重新选一个设置 -> 完成 选择完毕后,如新建MF ...
- [置顶]
AI大行其道,你准备好了吗?—谨送给徘徊于转行AI的程序员
前言 近年来,随着 Google 的 AlphaGo 打败韩国围棋棋手李世乭之后,机器学习尤其是深度学习的热潮席卷了整个IT界.所有的互联网公司,尤其是 Google 微软,百度,腾讯等巨头,无不在布 ...
- visual studio 一些小技巧 整理
本博客将会陆续的整理一些作者在实际开发中的一些小技巧,一些挺有意思的东西,将会持续更新, 如果有问题,可以加群讨论,QQ群:592132877 #warning的使用 #warning 的意思是在程序 ...
- python中处理命令行参数的模块optpars
optpars是python中用来处理命令行参数的模块,可以自动生成程序的帮助信息,功能强大,易于使用,可以方便的生成标准的,符合Unix/Posix 规范的命令行说明.使用 add_option() ...
- Scikit-learn方法使用总结
在机器学习和数据挖掘的应用中,scikit-learn是一个功能强大的python包.在数据量不是过大的情况下,可以解决大部分问题.近期在学习使用scikit-learn的过程中,我自己也在补充着机器 ...
- 一个MySql Sql 优化技巧分享
有天发现一个带inner join的sql 执行速度虽然不是很慢(0.1-0.2),但是没有达到理想速度.两个表关联,且关联的字段都是主键,查询的字段是唯一索引. sql如下: SELECT p_it ...
- 何时使用padding和margin
先看看这张图: 重点其实是background-image CSS边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时改变所有的外边距. ...
- 关于Mybatis将查询结果中添加常量列并返回
引言 在使用mybatis的时候,查询一个集合返回给前台页面,在有的时候,我们会添加一个常量字段到对象或者集合中,来标识这个对象属于的类型等等情况,当前台进行再次请求的时候携带此变量进行请求. 但是: ...