Istio Helm Chart 详解 —— 概述

Stella981
• 阅读 914

前言

Helm 是目前 Istio 官方推荐的安装方式,除去安装之外,还可以利用对输入值的一些调整,完成对 Istio 的部分配置工作。官方提供了 Istio 的 Helm 部署方式,侧重于快速启动,而这一组文章将会采用由上至下的顺序,基于 Istio 1.0.2 版本的 Helm Chart 做一系列的讲解。

Istio 的 Helm Chart 分为两个大分支:istio 和 istio-remote,后者为多集群部署方式,这里暂不涉及,后面的内容围绕 istio 展开。

总体结构

Istio Chart 是一个总分结构,其分级结构和设计结构是一致的,这里做一个简单的说明。

Istio Helm Chart 详解 —— 概述

Chart.yaml

Chart 的基础信息,这里看到 1.0.2 的 Release 中,version 的值还是 1.0.1;要求的 Tiller 版本要大于等于 2.7.2-0

values-*.yaml

这里提供了一组 values 文件,提供 Istio 在各种场景下的关键配置范本。对 Istio 的定制可以从 values.yaml 的改写开始,完成后可以使用 helm template 命令来生成最终的部署文件供 kubectl 使用。values.yaml 文件的一些细节可以参考官方文档。

  • values-istio-auth-galley.yaml:启用控制面 mTLS;缺省打开网格内的 mTLS;启用 Galley。

  • values-istio-auth-multicluster.yaml:多集群配置;启用控制面 mTLS;缺省打开网格内的 mTLS;禁用自签署证书。

  • values-istio-auth.yaml:启用控制面 mTLS;缺省打开网格内的 mTLS。

  • values-istio-demo-auth.yaml:启用控制面 mTLS;缺省打开网格内的 mTLS;激活 Grafana、Jaeger、ServiceGraph 以及 Galley;允许自动注入。

  • values-istio-demo.yaml:激活 Grafana、Jaeger、ServiceGraph 以及 Galley;允许自动注入。

  • values-istio-galley.yaml:启用 Galley 和 Prometheus。

  • values-istio-gateways.yaml:这是一个样例,可以用这种形式定义新的 Gateway。

  • values-istio-multicluster.yaml:多集群配置,禁用自签发证书。

  • values-istio-one-namespace-auth.yaml

  • values-istio-one-namespace.yaml:启用控制面 mTLS;缺省打开网格内的 mTLS;

  • values-istio.yaml:oneNameSpace 设置为 True,让 Pilot 只监控单一的 Namespace,目前的情况是只监控 Istio 的部署命名空间。此处的 istiotesting 似乎是个 Issue。

  • values.yaml:罗列了(可能)所有变量,也是我们做定制的基础。

requiremtens.yaml

这个文件用于管理 Chart 的依赖关系,Istio 的各个组件就是在这里定义的,并且可以通过变量进行控制。

templates

_affinity.tpl

该文件会生成一组节点亲和/互斥元素,供各个组件在渲染 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|

_helpers.tpl

这个文件并不特别,创建了四个变量,供 Helm 使用。

sidecar-injector-configmap.yaml

这里定义了 ConfigMap 对象 istio-sidecar-injector,为 sidecarInjectorWebhook 提供配置支持,在全局变量 omitSidecarInjectorConfigMapFalse 的时候进行渲染,这一参数会用在生成新的 Gateway 之类的调整功能上,防止创建多余的 ConfigMap。这里可以看到使用各种变量拼装而成的注入模板,用于为被注入 Pod 提供初始化和 Sidecar 容器的支持。其中设计的变量会在后文中进行讲解。

configmap.yaml

这个文件定义了 ConfigMap 对象 istio,该对象会随 Pilot 一同创建,也就是说它是 Pilot 的依赖项。其中所涉变量也同样会在其他文章中进行讲解。

charts

  • certmanager:一个基于 Jetstack Cert-Manager 项目的 ACME 证书客户端,用于自动进行证书的申请、获取以及分发

  • galley:Istio 利用 Galley 进行配置管理工作。

  • gateways:使用 Gateways 一节的配置,可以实现多个 Gateway Controller

  • grafana:图形化的 Istio Dashboard。

  • ingress:一个遗留设计,缺省关闭,v1alpha3 之后建议弃用。

  • kiali:带有分布式跟踪、配置校验等多项功能的 Dashboard。

  • mixer

  • pilot

  • prometheus

  • security

  • servicegraph

  • sidecarInjectorWebhook:自动注入 Webhook 的相关配置

  • tracing:Jaeger 的分布式跟踪相关配置。

小结

本篇主要讲述的是整体结构以及顶层对象的一些内容。后面将会分几篇文章讲讲各种变量的应用以及各个 Chart 的配置。

本文分享自微信公众号 - 伪架构师(fake-architect)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Service Mesh 最火项目: Istio 架构解析
Istio是一个开源的服务网格,可为分布式微服务架构提供所需的基础运行和管理要素。随着各组织越来越多地采用云平台,开发者必须使用微服务设计架构以实现可移植性,而运维人员必须管理包含混合云部署和多云部署的大型分布式应用。Istio采用一种一致的方式来保护、连接和监控微服务,降低了管理微服务部署的复杂性。从架构设计上来看,Istio服务网格在逻辑上分为
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh
本文将介绍如何使用DockerCompose搭建Istio。Istio号称支持多种平台(不仅仅Kubernetes)。然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺了一些内容,而且还有坑。本文希望能补实这些内容。我认为在学习Istio的过程中,相比于Kubernetes,使用DockerCompose部署更能深刻地理解I
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Helm 架构
在实践之前,我们先来看看Helm的架构。Helm有两个重要的概念:chart和release。chart是创建一个应用的信息集合,包括各种Kubernetes对象的配置模板、参数定义、依赖关系、文档说明等。chart是应用部署的自包含逻辑单元。可以将chart想象成apt、yum中的软件安装包。release是cha
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这