大家好!继上次的Kustomize之后,今天我们将探讨Kubernetes生态系统中最广泛使用的包管理器——**Helm(赫尔姆)**。🚢
随着Kubernetes应用程序变得越来越复杂,需要管理的YAML文件数量呈指数级增长。Helm是一个强大的工具,它允许您将这些众多的清单文件捆绑成一个“包”进行管理。

1. 什么是Helm? 📦
Helm是Kubernetes的包管理器。可以简单理解为它在Kubernetes中扮演着与Linux的apt或yum、Node.js的npm相同的角色。
- Chart(图表): 定义Kubernetes资源的文件集合(包)。
- Repository(仓库): 存储和共享Chart的存储库。
- Release(发布): 在集群上安装的Chart的特定运行实例。如果同一个Chart被多次安装,每个实例都将拥有一个唯一的发布名称。
2. Helm的核心结构:模板引擎 🏗️
如果说Kustomize是在现有YAML之上叠加配置的“覆盖”方式,那么Helm则是将变量插入YAML内部的“模板”方式。它使用Go模板语法根据情况动态生成YAML。
3. Helm Chart的组成部分 📂
标准的Helm Chart目录结构如下:
my-chart/
├── Chart.yaml # Chart的元数据(名称、版本等)
├── values.yaml # 注入到模板中的默认配置值
├── charts/ # 此Chart依赖的其他Chart
└── templates/ # 实际的Kubernetes清单模板
├── deployment.yaml
├── service.yaml
└── _helpers.tpl # 通用模板代码
🔹 模板示例 (templates/deployment.yaml)
变量以 {{ .Values.replicaCount }} 的形式使用。
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-chart.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: my-app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
🔹 配置值示例 (values.yaml)
定义将注入到模板中的实际值。
replicaCount: 3
image:
repository: my-repo/my-app
tag: "1.0.0"
4. 主要命令用法 💻
以下是使用Helm管理应用程序的基本命令。
# 1. 添加Chart仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 2. 搜索Chart
helm search repo nginx
# 3. 安装Chart(创建Release)
helm install my-web bitnami/nginx
# 4. 通过更改配置值进行升级
helm upgrade my-web bitnami/nginx --set replicaCount=5
# 5. 回滚到以前的版本(Helm的强大功能!)
helm rollback my-web 1
# 6. 删除已安装的Release
helm uninstall my-web
5. Helm vs Kustomize: 应该使用哪个? ⚖️
| 比较项 | Helm | Kustomize |
| — | — | — |
| 方式 | 基于模板 (Go Templates) | 基于覆盖 (纯YAML) |
| 复杂性 | 初始学习曲线较高 | 非常容易学习 |
| 灵活性 | 支持条件语句、循环等强大逻辑 | 主要限于静态修改 |
| 版本管理 | 内置按发布回滚功能 | 依赖Git等外部工具 |
| 用途 | 部署复杂的商业应用程序 | 按环境微调配置值 |
—
6. 总结:Helm的价值 🚀
Helm不仅仅是一个辅助安装的工具,它还负责应用程序的生命周期管理。特别是版本管理和回滚功能,是在运营环境中发生故障时能够快速恢复的核心优势。
如果您正在运营复杂的微服务架构,或者需要将开源软件部署到您的集群中,那么Helm不是一个选择,而是一个必需品!🌟
发表回复