什么是 Helm
Helm 是一个用于管理 Kubernetes 应用程序的包管理工具。它允许您定义、安装和升级 Kubernetes 应用程序,以简化应用程序部署和管理的过程。
在 Kubernetes 中,应用程序被打包为一个或多个称为 “Charts” 的 Helm 资源。一个 Chart 是一个预定义的目录结构,包含了用于部署应用程序的 Kubernetes 资源清单模板。Chart 可以包含 Deployment、Service、ConfigMap、Ingress 等 Kubernetes 资源的定义。
使用 Helm,您可以将应用程序打包为一个 Chart,并使用 Helm 客户端来安装和管理 Chart。这使得应用程序的部署过程更加简单、可重复和可扩展。您可以根据需要部署多个实例,轻松地进行升级和回滚操作,并使用 Helm 提供的值覆盖机制来自定义每个实例的配置。
最重要的是,Helm 支持使用 Helm 仓库来共享和发布 Charts。Helm 仓库是一个集中存储 Charts 的地方,供用户从中搜索和安装 Charts。Helm 仓库可以是公共的,也可以是私有的,您可以自己搭建私有仓库来管理自己的 Charts。
Helm 所作的事情
Helm 管理名为 chart
的Kubernetes包的工具。故 Helm 可以做以下的事情:
- 创建一个新的 chart
- 将 chart 打包成归档 (tgz) 文件
- 与存储 chart 的仓库进行交互
- 在现有的 Kubernetes 集群中安装和卸载 chart
- 管理与Helm一起安装的 chart 的发布周期
Helm中的术语
- chart:类似于rpm包,deb包,包含Kubernetes资源所需要的必要信息。
- repo:chart仓库,类似于yum的仓库,chart仓库是一个简单的HTTP服务。
- values:提供了自定义信息用来覆盖模板中的默认值。
- release :chart安装后的版本记录。
Helm 与 YAML 资源清单比有什么优势?
- 模板化和参数化: Helm 使用 Go 的模板引擎来创建 Kubernetes 资源清单。这使得您可以在 Chart 中使用模板来定义资源配置的部分内容,例如标签、名称、端口等。同时,Helm 还支持使用参数化的值,允许您根据不同的环境或需求来自定义 Chart 的配置。这样一来,您可以根据需要生成不同的 Kubernetes 资源清单,而无需手动编辑每个清单文件。
- 可重用性: Helm 提供了一种将应用程序打包为 Chart 的方式,可以将 Chart 存储在 Helm 仓库中进行共享和重用。这样,您可以使用其他人创建的 Charts 来快速部署常见的应用程序,避免从头开始编写和管理 Kubernetes 资源清单。同时,您也可以将自己的应用程序打包为 Chart,方便自己和团队在不同环境中部署和管理。
- 版本管理和升级: 使用 Helm,您可以对已安装的 Chart 进行版本管理和升级。当应用程序的配置或代码发生变化时,您可以通过升级 Chart 来自动应用这些更改,而无需手动修改和重新部署 Kubernetes 资源清单。Helm 还提供了回滚功能,允许您在升级出现问题时快速回退到之前的版本。
- 依赖管理: Helm 允许您在 Chart 中定义和管理依赖关系。这意味着您可以在部署应用程序时自动解析和安装它所依赖的其他 Charts。这样,您可以轻松地管理应用程序所需的其他资源,减少手动处理依赖关系的工作。
- 部署的一致性和标准化: Helm 提供了一种标准的部署方式,使得不同团队或开发者之间可以使用相同的工具和流程来管理应用程序的部署。这样可以确保在不同环境中的一致性,并降低由于不同部署方式导致的错误和配置差异。
- 可管理的 Charts: Helm Charts 是可管理的,您可以在 Chart 中定义预先配置的模板、默认值、钩子和配置验证。这使得管理应用程序的配置和部署过程更加灵活和可控。
- 社区支持和生态系统: Helm 是一个活跃的开源项目,拥有庞大的用户社区和丰富的生态系统。这意味着您可以轻松地找到文档、示例、教程和问题解答,并从社区中获取支持和贡献。
- 可扩展性和插件支持: Helm 提供了插件机制,允许您扩展 Helm 的功能。您可以使用插件来添加自定义的命令、功能和工作流程,以满足特定需求或自动化常见的任务。
- 可视化界面和用户友好性: Helm 可以与各种第三方工具和平台集成,提供可视化界面和用户友好的操作方式。这使得非技术人员或不熟悉命令行的开发人员也能够方便地部署和管理应用程序。
安装helm
Helm 安装主要官方提供了几种安装方式
- 二进制版本安装:利用预编译好的二进制包直接解压使用
- 使用脚本安装:Helm 提供了安装脚本,可以直接拉去最新版进行安装在本地
- 各操作系统上的包管理工具进行安装
添加源
|
|
Helm 使用例子 [2]
命令行参数
命令 | 说明 |
---|---|
helm list | 查看发布 |
helm remove | 删除 |
helm repo add xxx url | 添加仓库 |
helm upgrade | 更新 |
helm rollback | 回滚 |
–generate-name | 为部署的应用生成一个随即名 |
–namespace | 部署在哪个名称空间 |
–set | 覆盖 chart 中的默认 values 值 |
inspect | 查看存在哪些 values 值 |
show | 查看你要查看的内容,例如 chart, values等 |
使用本地 chart 包安装
|
|
查看 chart 中的 values
查看 chart 中的 values,可以查看 tar 归档的 chart
|
|
也可以查看解压后的
|
|
查看 chart 包
|
|
show 查看chart值,可查看在线和离线
|
|
覆盖 chart 默认values值
使用 –set 可以覆盖 chart 的默认值,可以指定多个
|
|
更新一个应用
可以依据一个已经存在的 Chart 来更新已经部署过的应用
|
|
查看对应 service 配置已经更改
|
|
从仓库下载一个 Chart
|
|
Chart
Charts 是创建在特定目录下面的文件集合,然后可以将它们打包到一个版本化的存档中来部署。接下来我们就来看看使用 Helm 构建 charts 的一些基本方法。
Chart.yaml
文件是chart必需的。包含了以下字段:
|
|
--dry-run
模拟安装
--debug
详细的输出
--generate-name
:生成随机实例名
|
|
go template
{{ .Values.favoriteDrink }}
读取变量值
quote
go template 函数,引用字符串 ,给变量值加""
pipeline
可将多个功能连接在一起
默认值 chart.yaml
gender: {{ .values.gender|default "zhangsan" }}
values.yaml 中不能加default函数
流程控制
|
|
如果 pipeline的值被判定为如下的值则为false:
- a boolean false
- a numeric zero
- an empty string
- a
nil
(empty or null) - an empty collection (
map
,slice
,tuple
,dict
,array
)
使用 -
摆脱新行{{- if eq .Values.favorite.drink "coffee" }}
-
在前面表示删除前面的空行,在后面表示删除后面的空行,{{-
之间没有空格
{{ indent 2 "mug:true" }}
缩进,缩进的是文字内容不是yaml
{{with .Values.xxx}} {{end}}
提升作用于,release: {{ $.Release.Name }}
执行时将变量映射到根域,可以在作用域中使用
Reference
[1] Implementing a custom Kubernetes authentication method
[2] Helm 命令行