在以前的一篇文章中云计算CDCI系列—- helm2中,我们说明了helm的架构使用,目前helm已经发展到了helm3,重架构方面发送了很大的变化,所以今天我们来看看helm3。

基本概念

helm的精髓就在于打包一次,随处(kuberentes平台之上)运行,helm也提供了应用部署,存储和分发的完整的机制。

基础概念基本上没有改变,核心在于helm3移除了tiller服务端的概念,一切接在helm,我们在下面的架构做详细的说明。下面我们简单看看原来的几个概念。

  • Chart: 就是一个用helm打包好的应用。 包含运行该应用的所有资源的定义或工具。
  • Repository(仓库):用于存储和分享打包好的应用(chart)
  • Release(实例):应用在kuberentes中运行的一个实例。一个chart可以在一个集群中多次安装,每次安装都会有一个新的实例。多个实例需要有不同的命名。

架构

helm在helm 3中有重大更新,在helm2版本及以前,helm有一个在集群中运行的服务叫Tiller,需要安装部署在集群中去执行同kuberentes的交互操作。但是在helm3中删除了Tiller这个架构,在客户端的位置几乎重新写了一个类似tiller作用的Library,很多时出于安全性的目的,设计成将所有的同kuberentes api交互的操作都采用kuberentes原生的client进行管理。

所以helm 3的架构变得更加的简单,只有helm完成所有的客户端和服务端的工作,主要结构如下:

  • Helm Client: Helm的命令行客户端helm cli,用于helm的操作
  • Helm Library: helm的服务端,通kuberents api进行交互,用于接收客户端的指令并执行部署,更新,删除和版本的管理,可见这个部分就是取代tiller的功能。

部署

由于架构的改变,部署变得更加的简单,总结来说,只要拥有helm的二进制文件就可以。

  • 下载指定版本的helm安装包(https://github.com/helm/helm/releases)

  • 解压 # tar -zxvf helm-v3.0.0-linux-amd64.tar.gz

  • 找到helm命令的位置,然后放到希望放到的位置,例如/usr/local/bin,然后在任意位置都可以执行helm命令了

      # mv linux-amd64/helm /usr/local/bin/helm
    
  • 查看版本信息

      # helm version
      WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
      version.BuildInfo{Version:"v3.5.4", GitCommit:"1b5edb69df3d3a08df77c9902dc17af864ff05d1", GitTreeState:"clean", GoVersion:"go1.15.11"}
    

使用

其实基本使用还是一样的,我们可以利用helm create命令,创建一个简单的示例。helm create的示例chart也并不是一无所有,它包含了大部分的资源抽象,例如kubernetes deployment,service,ingress,serviceaccount等资源。

$ helm create helloworld
Creating hellworld
$ tree hellworld
hellworld
├── charts										# 这个 charts 依赖的其他 charts,始终被安装
├── Chart.yaml									# 描述这个 Chart 的相关信息、包括名字、描述信息、版本等
├── templates									# 模板目录
│   ├── deployment.yaml							# deployment 控制器的 Go 模板文件
│   ├── _helpers.tpl							# 以 _ 开头的文件不会部署到 k8s 上,可用于定制通用信息
│   ├── ingress.yaml							# ingress 的模板文件
│   ├── NOTES.txt								# Chart 部署到集群后的一些信息,例如:如何使用、列出缺省值
│   ├── serviceaccount.yaml
│   ├── service.yaml							# service 的 Go 模板文件
│   └── tests
│       └── test-connection.yaml
└── values.yaml									# 模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件

3 directories, 9 files
  • charts: 用于存放其他依赖和关联的chart。例如应用依赖数据库的chart。

  • Chart.yaml:存储一些元数据,例如chart的信息,描述等等

  • templates文件夹:是所有资源的位置,我们可以看到很多kubernetes的资源文件都在这里存放。

    • 其中的_helpers.tpl,用于存储模板片段,可以在文件中直接使用template函数调用。
    • NOTES.txt:相当于你运行helm install的时候给用户输出的提示。
  • value.yaml:存储该chart的默认值,实际安装时可以对默认值进行覆盖。

实战

首先我们有部署的grafana的yaml文件,我们可以通过下面的方法进行操作

  • 网上找到一个charts,人家考虑还是比较全面的,选择其中相关的template,然后对应的做修改,然后提交使用就可以
  • 对着自己的yaml文件,提出自己认为重要或者可变的变量,比如image,然后提交使用,这个可以个人考虑不够完善,甚至直接提交源文件也是可以使用的。