在以前的一篇文章中云计算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,然后提交使用,这个可以个人考虑不够完善,甚至直接提交源文件也是可以使用的。