Helm
Helm 是 Kubernetes 的包管理器,被称为 "Kubernetes 的包管理器"。它允许用户定义、安装和更新复杂的 Kubernetes 应用程序,简化了应用程序部署和管理的过程。
Helm 核心概念
Chart
Helm 包,包含描述相关 Kubernetes 资源的文件集合
Release
Helm Chart 在 Kubernetes 集群中的运行实例
Repository
存储和共享 Helm Chart 的仓库
Tiller (v2)
Helm v2 中的服务器端组件(v3 中已移除)
Helm 与 Kubernetes 资源对比
| 特性 | Kubernetes 原生资源 | Helm |
|---|---|---|
| 部署复杂度 | 需要多个 YAML 文件 | 单个 Chart 管理 |
| 版本管理 | 手动管理 | 内置版本控制 |
| 参数化 | 需要手动修改 | 通过 values.yaml 配置 |
| 依赖管理 | 无内置支持 | 支持 Chart 依赖 |
| 更新回滚 | 复杂的手动操作 | 一键更新回滚 |
Helm Chart 结构
graph TD
A[Helm Chart] --> B[Chart.yaml]
A --> C[values.yaml]
A --> D[templates/]
A --> E[README.md]
A --> F[charts/]
D --> G[deployment.yaml]
D --> H[service.yaml]
D --> I[_helpers.tpl]
D --> J[ingress.yaml]
B --> J1[元数据]
C --> J2[默认值]
F --> J3[依赖 Chart]
常用命令
# 搜索 Charts
helm search repo
# 添加仓库
helm repo add stable https://charts.helm.sh/stable
# 更新仓库
helm repo update
# 安装 Chart
helm install my-release stable/nginx
# 查看发布
helm list
# 升级发布
helm upgrade my-release stable/nginx --set image.tag=1.19
# 回滚发布
helm rollback my-release 1
# 卸载发布
helm uninstall my-release
# 创建新 Chart
helm create my-chart
# 打包 Chart
helm package my-chart
Helm 最佳实践
| 实践 | 说明 |
|---|---|
| 使用命名模板 | 在 _helpers.tpl 中定义可重用的模板片段,提高代码复用性 |
| 合理使用依赖 | 通过 Chart.yaml 管理 Chart 依赖关系,简化复杂应用部署 |
| 版本控制 | 使用语义化版本控制管理 Chart 版本,便于追踪变更 |
| 测试 Chart | 使用 helm test 命令验证 Chart 功能,确保部署质量 |
| 参数化配置 | 通过 values.yaml 文件管理配置参数,实现环境差异化部署 |
| 文档完善 | 编写清晰的 README.md 和注释,便于他人理解和使用 |