Helm 学习笔记
安装与配置
Helm 是 Kubernetes 的包管理器,类似于 apt 和 debian 的关系。要使用 Helm 的话,需要先
- 有一个 k8s 集群
- 设计一个安装 Helm 时的安全配置
- 安装和配置 Helm
安装很简单,下载 Helm 的二进制文件,将它放在 PATH 中能在终端中访问到即可,由于 Helm 是使用 kubectl 来操作 k8s 的,所以本地先要有一个配置完毕的 kubectl.
Helm 安装完毕后,可以给它增加 repository ,就跟给 apt 增加 repository 类似,因为不同软件可能有自己的 repository , 要下载的话需要去对应的 repository 下载。
Helm 的三大基本概念
Chart 是 Helm 的包,它包含了 k8s 中对于应用、工具或者服务所需的所有资源的定义。类似与 package.json 里的 dependencies.
Repository 是一个用于收集和共享 chart 的地方,类似与 npm 的 registry.
Release 是一个运行在 k8s 集群中的 chart 实例。一个 chart 可以被安装很多次,每次安装都会创建一个新的 release.
Helm 安装一个 chart 的时候,在 k8s 里创建资源会有一个顺序,这个顺序可以在官方文档找到。
Helm 不会等到资源创建完成才退出,而是敲完命令后后台会自动安装,用 helm status
来查看 release 的状态。
在安装前自定义 chart
每个人用的 k8s 环境都不同,所以一般安装前都可能会对安装的配置进行自定义。
可以用 helm show values
来查看 chart 的配置。
可以用在 YAML 文件(比如下面的 values.yaml)中覆盖所有的配置项,然后安装时把这个文件传入。
helm install -f values.yaml bitnami/wordpress --generate-name
也可以用 --set
来覆盖单个值,当两者同时使用时,--set
的优先级更高。使用 --set
覆盖一些嵌套结构下的值时,需要注意它的语法。
Helm 还有一些常用的功能,比如下面这些,具体使用看官方文档即可
helm upgrade
helm rollback
helm uninstall
helm list
- etc.
Helm Chart Template
Helm 的资源文件用的是 go 标准库里的模板语法。然后 Helm 还把 Sprig library 除了 env
和 expandenv
之外的全部函数包含进来了,并且还增加了 include
和 required
两个函数。
string 类型的变量需要用 quote
,integer 类型不要 quote
,因为可能会被 k8s 解析错误。
Helm chart 基础知识
chart 的目录结构通常长这样
wordpress/
Chart.yaml # A YAML file containing information about the chart
LICENSE # OPTIONAL: A plain text file containing the license for the chart
README.md # OPTIONAL: A human-readable README file
values.yaml # The default configuration values for this chart
values.schema.json # OPTIONAL: A JSON Schema for imposing a structure on the values.yaml file
charts/ # A directory containing any charts upon which this chart depends.
crds/ # Custom Resource Definitions
templates/ # A directory of templates that, when combined with values, will generate valid Kubernetes manifest files.
templates/NOTES.txt # OPTIONAL: A plain text file containing short usage notes
Helm 使用 charts/
, crds/
和 templates/
目录,以及被列出来的文件。其他的文件则会 “be left as they are.”
总结
charts/
目录下的文件表示安装当前 chart 的时候需要依赖安装的其它 chart ,templates/
下则是当前 chart 对应的 k8s 的 manifest 文件模板,这些模板里的变量是可以用命令去修改的,一个 chart 被 install 完毕意味着 templates/
定义的软件被安装、且 charts/
里依赖的 chart 也被安装。