istio部署-helm
参考
1. Istio Chart 目录结构
- PATH:
istio-1.1.7/install/kubernetes/helm
1.1 Chart.yaml
- Chart 的基础信息文件,其中包含版本号,名称,关键字等元数据信息。
1.2 values-*.yaml
- 提供 istio 在各种场景下的关键配置范本,范本文件可以作为 helm 的输入文件,对 istio 进行典型定制;
- 对输入文件改写后,使用
helm template
命令生成最终的部署文件。
1.3 requirements.yaml
- 用于管理对子 Chart 的依赖关系,其中定义了一系列开关变量‘
- 在 helm 的输入内容中对相关变量进行定义,就可以对 istio 的部署文件进行修改,来控制对应组件的启用状态。
1.4 templates
1.4.1 _affinity.tpl
- 生成一组节点亲和或互斥元素,供各个组件在渲染 yaml 时使用;
- 在该文件里使用一系列变量,用于控制 istio 组件的节点亲和性,即 istio 在部署时对节点的选择。
- 定义了两个局部模版:
- nodeAffinityRequiredDuringScheduling: 会根据全局变量中的 arch 参数对部署节点进行限制;istio 组件的 pod 会根据 arch 参数中的服务器类型列表来决定是否部署到某一台服务器上,并根据各种服务器类型的权重来决定优先级。
- nodeAffinityPreferredDuringScheduling: 类似
nodeAffinityRequiredDuringScheduling
,但是软限制
1.4.2 sidecar-injector-configmap.yaml
- 该文件最终会生成一个
ConfigMap
对象,在该对象中保存的配置数据被用于进行Sidecar
注入; - istio 完成的手工注入或自动注入,都会引用这个
ConfigMap
对象,即如果希望修改 istio 的Sidecar
的注入过程及具体行为,可以从该文件或对应的ConfigMap
入手。
1.4.3 configmap.yaml
- 生成名为
istio
的ConfigMap
对象,用于为 Pilot 提供启动配置数据。
1.5 charts
目录中的子目录就是istio组件:
- certmanager: 一个基于 Jetstack Cert-Manager 项目的 ACME 证书客户端,用于自动进行证书的申请,获取与分发。
- galley:istio 利用 galley 进行配置管理工作。
- gateways: 对 gateways chart 进行配置,可以安装多个 gateway controller。
- grafana:图形化的 istio dashboard。
- ingress: 遗留设计,默认关闭,在流量控制协议升级到 network.istio.io/v1alpha3 之后关闭,已建议弃用。
- kiali: 带有分布式跟踪,配置校验等多项功能的 dashboard。
- mixer: istio 的策略实施组件。
- pilot: istio 的流量管理组件。
- prometheus: 监控软件,其中包含 istio 特定的指标抓取设置。
- security: citadel 组件,用于证书自动管理。
- servicegraph:分布式跟踪组件,用于获取和展示服务调用关系图,即将废除。
- sidecarInjectorWebhook:自动注入 Webhook 的相关配置。
- tracing:分布式跟踪组件,使用 Jaeger 实现,替代原 servicegraph 组件。
2. 全局变量
istio chart 分为父子两层,因此变量具有全局与本地两级。
- 全局变量使用保留字
global
进行定义; - 子 chart 可以通过 values.global的方式引用全局变量;
- 在主 chart 中也可以用 chart.var 的方式为子 chart 指定变量值。
2.1 hub & tag
- 在多数情况下,这两个变量代表所有镜像的地址,具体名称一般以
{{ .Values.global.hub }}/[component]/:{{ .Values.global.tag }}
的形式拼接而成; - 在
proxy_init
,Mixer
,Grafana
与Pilot
的 Deployment 模板中 ,一旦在其 image 变量中包含路径符 "/" ,则会弃用global.hub
,直接采用 image 的定义。
2.2 ingress.enabled
- 用来控制是否启用 istio 的 ingress controller;
- 设置为 True ,就会启用对 Kubernetes Ingress 资源的支持,这是一个兼容功能,istio 并不推荐 ingress 的使用方式,建议使用 ingress gateway 取代;
- k8sIngressSelector & k8sIngressHttps 两个变量受 ingress.enabled 影响(设置为 True 时,两个变量相关内容才生效)。
2.3 proxy相关参数
在 values.yaml 中定义了一组 proxy 变量,用于对 Sidecar 进行控制。
2.3.1 proxy.resources
- 用于为 Sidecar 分配资源。
2.3.2 proxy.concurrency
- Proxy Worker 的线程数量;
- 如果被设置为
0
(default),则根据 CPU 线程或核的数量进行分配。
2.3.3 proxy.accessLogFile
- Sidecar 的访问日志位置;
- 如果被设置为空字符串,表示关闭访问日志功能;
- 默认值:/dev/stdout 。
2.3.4 proxy.privileged
- istio-init & istio-proxy 的特权模式开关,默认值
false
。
2.3.5 proxy.enableCoreDump
- 如果打开,则新注入的 Sidecar 会启动 CoreDump 功能,在 Pod 中加入初始化容器
enable-core-dump
; - 默认值
false
。
2.3.6 proxy.includeIPRanges
- 劫持 IP 范围的白名单;
- 默认值
*
,表示劫持所有流量; - 在
sidecar-injector-configmap.yaml
中应用了这个变量,用于生成istio-sidecar-injector
这个ConfigMap
,此ConfigMap
设置了 istio-init 的运行参数,proxy.includeIPRanges
通过对 istio-init 的"-i" 参数进行修改来完成这一个任务。
2.3.7 proxy.excludeIPRanges
- 劫持 IP 范围的黑名单;
- 默认值为空字符串,表示劫持该范围以外的IP;
proxy.excludeIPRanges
影响 istio-init 的"-x" 参数。
2.3.8 proxy.includeInboundPorts
- 入站流量的端口劫持白名单;
- 所有从范围内的端口进入 Pod 的流量都会被劫持;
proxy.includeInboundPorts
影响 istio-init 的"-b" 参数。
2.3.9 proxy.excludeInboundPorts
- 入站流量的端口劫持黑名单;
- 端口范围之外的入站流量会被劫持;
proxy.excludeInboundPorts
影响 istio-init 的"-d" 参数。
2.3.10 proxy.autoInject
- 用于控制是否自动完成 Sidecar 的注入工作。
2.3.11 proxy.envoyStatsd
- 默认值如下:
- enabled: true
- host: istio-statsd-prom-bridge
- port: 9125
- 参数会设置 Envoy 的 "--statsdUdpAddress" 参数,在某些参数下(如没有安装 Mixer)可以关闭。
2.4 proxy_init.image
- 用于指定初始化容器镜像。网格中的服务 Pod 在启动之前,首先会运行一个初始化镜像来完成流量劫持工作。
2.5 imagePullPolicy
- 镜像拉取策略;
- 默认值
IfNotPresent
。
2.6 controlPlaneSecurityEnabled
- 指定是否在 istio 控制面组件上启用 mTLS 通信;
- 启用之后,Sidecar 与控制面组件之间,以及控制平面组件之间的通信,都会被改成 mTLS 方式;
- 受影响组件包括:Ingress , Mixer ,Pilot 及 Sidecar。
2.7 disablePloicyChecks
- 设置为
True
,则会禁用 Mixer 的预检功能; - 预检功能是一个同步过程,有可能因预检缓慢造成业务应用的阻塞。
2.8 enableTracing
- 是否启用分布式跟踪功能;
- 默认值
true
。
2.9 mtls.enabled
- 服务之间是否默认启用 mTLS 连接;
- 如果被设置为
true
,那么网格内部所有服务之间的通信都会使用 mTLS 进行安全加固; - 此变量是全局的,对于每个服务还可以单独使用目标规则或通过服务注解的方式,自行决定是否采用 mTLS 加固。
2.10 imagePullSecrets
- 用于为 ServiceAccount 分配在镜像拉取过程中所需要的认证凭据;
- 默认值为空。
2.11 arch
- 在设置 istio 组件的节点亲和性过程中,会使用此变量的列表内容来确定可以用于部署的节点范围,并按照不同的服务器架构设置优先顺序;
- 默认列表内容如下:
amd64: 2
s390x: 2
ppc64le: 2
2.12 oneNamespace
- 默认值
false
,Pilot 会监控所有命名空间内的服务变化; - 如果设置为
true
,则会在 Pilot 的服务发现参数中加入 "-a",此时 Pilot 只会对 istio 组件所在命名空间进行监控。
2.13 configValidation
- 用于配置是否开启服务端的配置验证;
- 默认值
true
; - 开启之后,会生成1个 "ValidatingWebhookConfiguration" 对象,并被包含到 Galley 的配置中,从而启用校验功能。
2.14 meshExpansion
- 需要将网格扩展到物理机或虚拟机上时,使用此变量;
- 默认值
false
; - 开启之后,会在 Ingress Gateway 上公开 Pilot 与 Citadel 的服务。
2.15 meshExpansionILB
- 是否在内部网关中公开 Pilot 与 Citadel 的端口;
- 默认值
false
,仅在网格扩展时会使用此变量。
2.16 defaultResources
- 为所有 istio 组件都提供1个最小资源限制;
- 默认只设置1个请求
10m
CPU 资源的值; - 可在各 Chart 的局部变量中分别设置资源需求。
2.17 hyperkube
- 在 istio 的设置过程会使用一个镜像执行一些
Job
,如早期版本安装过程中的 CRD 初始化,或现在的清理过期证书等任务; - 镜像默认使用:
quay.io/coreos:v1.7.6_coreos.0
。
2.18 priorityClassName
- 在 Kubernetes v1.11.0 以上版本有
priorityClass
的概念,具有优先级的 Pod 不会被驱逐或抢占资源; - 默认值为空 ,可选值:
system-cluster-critical
与system-node-critical
。
2.19 crds
- 该变量用于决定是否包含 CRD 定义;
- 如果使用
heml template
命令,或 2.10 以上版本的heml install
命令,应将其设置为true
; - 否则在安装之前需要执行
kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
,并将该变量设置为false
。
3. 自定义安装
3.1 Install with Helm via helm template
根据实际需求定制 values.yaml
文件,包括各子 Chart 的 values.yaml
。如:
- 镜像地址
- 系统资源
- 服务类型
- 可视化组件的服务开放
3.1.1 准备
# 创建 "namespace"
kubectl create namespace istio-system
# 安装 Istio Custom Resource Definitions (CRDs)
helm template install/kubernetes/helm/istio-init --name istio-init --namespace istio-system | kubectl apply -f -
# "CRDs" 部署后,需要等待一些时间(3~5min),待其完全向 Kubernetes API-servera 注册提交
# "CRDs" 数量默认是 "53",如果启用 "cert-manager" ,则是 "58"
# istio "CRDs" 以 "istio.io" 或 "certmanager.k8s.io" 结尾
kubectl get crds | grep 'istio.io\|certmanager.k8s.io' | wc -l
3.1.2 生成部署清单
# --name: 设置生成的部署内容的基础名称;
# --namespace: 设置命名空间;
# -f: 从指定文件获取输入内容。
helm template install/kubernetes/helm/istio --name istio --namespace istio-system -f values-demo.yaml > istio-demo.yaml
3.1.3 部署
# default profile
# helm template install/kubernetes/helm/istio --name istio --namespace istio-system | kubectl apply -f -
# 采用生成的部署清单
kubectl apply -f istio-demo.yaml
3.2 Install with Helm and Tiller via helm install
helm install
方式需要Tiller
服务器端,不会生成清单文件;- 如果需要管理
release
,建议使用此方式。 - 参考:helm install
istio部署-helm的更多相关文章
- 部署 Helm - 每天5分钟玩转 Docker 容器技术(162)
本节我们将安装和部署 Helm 客户端和 Tiller 服务器. Helm 客户端 通常,我们将 Helm 客户端安装在能够执行 kubectl 命令的节点上,只需要下面一条命令: curl http ...
- 部署 Helm【转】
本节我们将安装和部署 Helm 客户端和 Tiller 服务器. Helm 客户端 通常,我们将 Helm 客户端安装在能够执行 kubectl 命令的节点上,只需要下面一条命令: curl http ...
- istio部署
Istio的部署介绍 目录 Istio的部署介绍 部署模型 集群模式 单集群 多集群 网络模型 单网络 多网络 控制面模型 身份和信任模型 网格中的信任 网格之间的信任 网格模型 单网格 多网格 租户 ...
- k8s1.13.3安装istio(helm方式)
官方文档:https://istio.io/zh/docs/setup/kubernetes/install/helm/ 一.环境信息 centos7 k8s1.13.3 主机名 ip cpu ram ...
- [Istioc]Istio部署sock-shop时rabbitmq出现CrashLoopBackOff
因Istio官网自带的bookinfo服务依赖关系较少,因此想部署sock-shop进行进一步的实验. kubectl apply -f <(istioctl kube-inject -f so ...
- 部署helm服务
helm在ocp中相当于catalog中的template k8s中使用helm之前遇到的问题 .很难管理.编辑和维护如此多的服务.每个服务都有若干配置,缺乏一个更高层次的工具将这些配置组织起来. . ...
- istio部署-sidecar注入
参考 fleeto/sleep fleeto/flaskapp 1. Sidecar注入 1.1 对工作负载的一些要求 支持的工作负载类型:Job,DaemonSet,ReplicaSet,Pod,D ...
- istio部署-快速入门
参考 istio/istio Quick Start Evaluation Install fleeto/sleep fleeto/flaskapp 本文为 istio 快速入门部署,一般用于演示环境 ...
- kubernetes 1.14安装部署helm插件
简单介绍: Helm其实就是一个基于Kubernetes的程序包(资源包)管理器,它将一个应用的相关资源组织成为Charts,并通过Charts管理程序包.再简单点说,可以当做RHEL/CentOS系 ...
随机推荐
- nwjs-简单应用于基本结构
简单应用 1.在解压目录下创建文件夹dmeo01 2.在文件夹中创建index.html和package.json两个文件 3.index.html内容: <!DOCTYPE html> ...
- Jenkins的简介及安装
Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 1. jenkins就是 ...
- 用欧拉计划学Rust语言(第7~12题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 书籍推荐-An introduction to Data Science
为什么要读这本书? 该书是由我们老师推荐的,通过学习此数,可以了解R语言的使用,也可以知道基本的数据分析方法. 看到Creating a Data Set in R -- 24页面
- ROS源更改
ROS源更改 配置你的电脑使其能够安装来自 packages.ros.org 的软件,使用国内或者新加坡的镜像源,这样能够大大提高安装下载速度 sudo sh -c '. /etc/lsb-relea ...
- java跳出循环break;return;continue使用
for(int i=0;i<5;i++){ if(i==2){ System.out.println("i==2时忽略了"); continue;//忽略i==2时的循环 } ...
- RAID(独立磁盘冗余阵列)简介
RAID(独立磁盘冗余阵列) 在大数据技术出现之前,人们就需要面对这些关于存储的问题,对应的解决方案就是RAID技术. RAID(独立磁盘冗余阵列)技术主要是为了改善磁盘的存储容量,读写速度,增强磁盘 ...
- WPF精修篇 多数据触发器
原文:WPF精修篇 多数据触发器 有多属性触发器 就有多数据触发器 <Grid> <CheckBox x:Name="c1" Content="许可协议 ...
- C语言语法教程-链表
链表是一群结构体(称为结点)通过指针连起来.这种结构体类型,比较特殊,叫自引用结构体类型.它有一个指针指向和和结构体一样的类型,其余是数据成员. 头指针指向第一结点,尾指针一定要用空表示,这叫有头有尾 ...
- 记第一次使用NET CORE 2.2 完成的DEMO部署在LINUX并且上线
.NET CORE 这么久了一直没有成功打通过,今天花了点儿时间做了一个小DEMO,首次完成并且部署上线.记录一下. DEMO中只是测试了一下从MSSQL中获取数据,并且显示在页面上,涉及到了数据库连 ...