Helm-k8s包管理工具(一)核心概念、helm工作目录
介绍
Helm是什么
- Helm本质是k8s的包管理工具,类似于Linux中的
apt
或者yum
- Helm可以将k8s yaml抽象成chart,用于管理k8s应用的
安装
、升级
、回滚
等生命周期操作
为什么使用Helm
-
没有helm时部署k8s应用的问题
-
yml文件编辑繁琐
- 为了在k8s部署一个应用需要编辑大量的yml文件,而且这些yml一般都是静态模板文件。比如deployment、service、configmap、secret等yml文件
-
yml一致性难以保证
- 一般使用git仓库来保存这些yml文件,yml在k8s环境生效时,git仓库中的yml文件和实际k8s环境中的yml文件一致性难以保证,运维困难
-
yml历史版本难以管理
- 原生k8s没有提供yml历史版本的功能
- 有些场景下需要做yml版本回退等操作
-
Helm的优势
-
在k8s中,很多情况下需要在多个环境部署多个应用,特别是微服务的项目。如果每个应用都需要
kubectl apply
来执行的话,运维人员操作会非常繁琐困难 -
Helm的优势在于拥有一键式部署所有应用的能力,有以下好处
- 简化部署
- 允许单个命令部署和管理应用程序,简化了整个部署过程
- 可以智能识别资源的部署顺序,比如service和configmap需要在deployment部署前创建出来
- 参数化配置
- 提供了高度可配置的选项,可以自定义修改应用程序的部署配置
- 版本控制
- 可以管理应用程序的多个版本,实现版本控制和回滚
- 模板化
- 将k8s的yaml抽象成Helm Chart模板,提高了重用性和扩展性
- 应用程序库
- Helm应用程序库可以共享和重用Helm Charts
- 插件系统
- 拥有强大的插件系统,允许扩展和定制Helm的功能
- 简化部署
核心概念
-
Chart
- 一个Helm应用包,包含一组描述k8s资源的yaml模板,定义应用程序的资源配置和部署逻辑
- 结构一般包含
Chart.yaml
、values.yaml
、templates/
、charts/
等
-
Release
- 某次chart安装后的运行实例,多次安装同一个chart是多个release,且每个release对应不同的名称
-
Repository
- 存储Chart的仓库服务器或路径,一般使用Git仓库。可以是公开仓库或自建私有仓库
-
Value
- Helm Chart的参数,用来配置k8s对象。通过 values.yaml 或 --set 注入变量值
工作目录
- helm标准的目录结构(chart根目录命名示例:mychart/)
mychart/ ├── Chart.yaml # 必需:Chart 元信息(名称、版本、描述等) ├── values.yaml # 必需:默认配置参数(可被用户覆盖) ├── charts/ # 可选:子 Chart(依赖包) ├── crds/ # 可选:自定义资源定义(CRDs) ├── templates/ # 必需:模板目录,存放所有 Kubernetes YAML 模板 │ ├── deployment.yaml │ ├── service.yaml │ ├── ingress.yaml │ ├── hpa.yaml │ ├── serviceaccount.yaml │ ├── _helpers.tpl # 辅助模板(函数、变量等) │ ├── NOTES.txt # 安装后提示信息 │ └── tests/ │ └── test-connection.yaml ├── LICENSE # 可选:许可证信息 ├── README.md # 可选:使用说明文档 └── values.schema.json # 可选:values.yaml 的 JSON Schema 校验文件
- 目录详解
文件/目录 | 说明 |
---|---|
Chart.yaml | 定义 Chart 名称、版本、描述、图标、维护者、依赖等元数据。 |
values.yaml | 提供模板中使用的默认值,用户可通过 --set 或 -f 覆盖。 |
templates/ | 所有 Kubernetes 资源模板文件存放目录,支持 Go 模板语法。 |
_helpers.tpl | 定义可复用的模板片段(如标签、命名规范),供其他模板引用。 |
charts/ | 存放子 Chart(依赖),Helm 会自动解析 Chart.yaml 中的依赖。 |
crds/ | 放置 CRD YAML 文件,Helm 安装时先部署这些资源。 |
NOTES.txt | 安装完成后输出的提示信息,如访问地址、用户名密码等。 |
tests/ | 定义测试 Pod,用于验证 Chart 安装是否成功(如连接测试)。 |
LICENSE | 开源协议说明,可选。 |
README.md | Chart 使用说明,可选。 |
values.schema.json | 对 values.yaml 的结构进行校验,防止配置错误。 |
Helm的工作流程
-
构建chart
- 开发者创建并编辑chart配置
-
打包发布至git仓库
- 打包发布至helm仓库repository
-
helm命令安装
- 管理员使用helm命令安装时,相关依赖会从仓库下载
-
helm自动部署资源到k8s
- helm会根据下载的配置自动部署k8s资源