【Kubernetes】

【k8s学习】Kubernetes打包工具Helm介绍

2022-06-21  本文已影响0人  伊丽莎白2015

【本文目标】

【前置文章】


1. Helm介绍

官网:https://helm.sh/

1.1 Package Manager for Kubernetes

Helm是k8s上的包管理工具。类似apt, yum, homebrew。

举个例子,如果我们要往Kubernetes集群中部署myapp项目,那么可能需要:

也许这些配置别人也同样做过,所以我们的目标是能复用这些yaml以达到减少自己写yaml的目标。而这些bundle yaml(yaml的集合),即为Helm Charts

我们可以创建自己的Helm Charts,然后push到Helm的Repository上。也可以下载别人的Helm Chart,如一些db配置(MongoDB, MySQL, Elasticsearch...),或是监控类配置(Promotheus),诸如此类复杂的Chart配置,在Repository上都已经有了。

Sharing Helm Charts——这种分享的方式,也让Helm成为热门项目的原因之一。

如何搜索:

除了Public Repository,有些公司会有自己的Private Helm Repository。

1.2 Templating Engine

如果有多个micro-service,每个micro-service都有自己的Pod yaml定义(大多数时候这个yaml定义都长的差不多,只有少部分field不一样),Helm的做法是把这些定义抽象成一个模版,那些不一样的field可以参数化。
模版定义例如:

apiVersion: v1
kind: Pod
metadata:
  name: {{ .Values.name }}
spec:
  containers:
  - name: {{ .Values.container.name }}
    image: {{ . Values.container.image }}
    port: {{ .Value.container.port }}

上述的{{ .Values... }}来自于另外的文件,叫values.yaml,在这个文件中我们传入的是真实的值:

name: my-app
container:
  name: my-app-container
  image: my-app-image
  port: 9001

使用模版驱动的配置对CI/CD比较有好处,在build的时候替换真实的values。

1.3 不同环境下的配置可以使用Helm

当我们的项目部署在不同环境下(如Dev,Test,Prod等),配置可能都长的差不多,这时候也可以使用Helm Chart来打包。

2. Helm Chart学习

一般来说Helm Chart的目录结构会是:
mychart/:mychart文件夹,以chart的名字命令,在这个文件夹下面,会有以下文件或是文件夹:

当使用命令helm install <chartname>来安装上述chart时,模版文件中的yaml模版里的参数将会被values.yaml替换掉,进而生成Kubernetes认识的yaml。

在mychart文件夹中的values.yaml,是默认的values.yaml,可以被重写掉,那么怎么进行重写呢?

3. Release Management

Helm Version 2 vs. 3

Helm Version 2有两部分:Client(helm CLI)和Server(Tiller)
Server是运行在Kubernetes集群中的,当我们在客户端使用命令helm install <chartname>进行安装的时候,请求会被发送到Server端的Tiller中。Tiller收到后会开始在Kubernetes集群中创建工作,如创建Pod,Service等。

Helm Version2的这个功能,可以帮助我们进行Release管理。
在Server端的Tiller会保存着helm的执行记录。

Tiller在Kubernetes集群中能干很多事,如创建、修改删除组件,正因为此,Tiller太过强大可能会导致一些安全问题,所以在Helm3中将Tiller移除了。


参考:
https://www.youtube.com/watch?v=X48VuDVv0do

上一篇下一篇

猜你喜欢

热点阅读