一、什么是 Helm?

Helm 是 Kubernetes 的 包管理工具,类似于 Linux 的 aptyum。它可以用来:

  • 管理 Kubernetes 应用的安装、升级、回滚等生命周期
  • 封装复杂的 Kubernetes YAML 配置文件成一个个可复用的“包”(称为 Chart)
  • 通过变量模板化部署,提高灵活性和复用性

二、核心概念

1. Chart

  • 一个 Helm 应用包
  • 包含一组描述 Kubernetes 资源的 YAML 模板
  • 结构如下:
mychart/
├── Chart.yaml        # Chart 元信息(名称、版本等)
├── values.yaml       # 默认值配置(变量)
├── templates/        # 核心 Kubernetes YAML 模板
│   ├── deployment.yaml
│   ├── service.yaml
│   └── ...
└── charts/           # 子 Chart(可选)

2. Release

  • 一个 Chart 的具体部署实例
  • 同一个 Chart 可以被部署多次,每次是一个新的 release

3. Repository

  • 存储 Chart 的服务器或路径
  • 可从公开仓库(如 Bitnami、Artifact Hub)或自建私有仓库安装 Chart

三、Helm 的功能特点

功能 说明
安装应用 一行命令快速部署复杂应用:helm install
升级应用 无缝升级:helm upgrade,保持配置与状态
回滚应用 回退到任意历史版本:helm rollback
参数注入 通过 --setvalues.yaml 注入自定义变量
模板引擎 使用 Go Template 实现模板化配置,提高灵活性
管理依赖 支持子 Chart、Chart 依赖管理
支持 hooks 支持 pre-install、post-upgrade 等生命周期钩子

四、常用命令

命令 说明
helm repo add 添加 Chart 仓库
helm search repo 搜索 Chart
helm install <release> <chart> 安装 Chart 应用
helm upgrade <release> <chart> 升级 release
helm rollback <release> [rev] 回滚 release 到指定版本
helm uninstall <release> 卸载应用
helm template 只渲染模板,不部署
helm lint 检查 Chart 是否有问题
helm show 查看 Chart 的详细信息
helm get all <release> 获取部署的全部信息

五、Helm 与 K8s 原生部署对比

项目 原生 Kubernetes 使用 Helm
部署复杂度 高,手动维护多个 YAML 低,封装为 Chart 一键部署
参数化 难,需要写多个文件 简单,values.yaml 支持变量注入
回滚支持 有,支持版本回滚
应用版本管理 有,release 管理
可维护性与复用性 高,模块化易于维护

六、实战示例:安装 Nginx

# 添加 Bitnami 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# 搜索 nginx
helm search repo nginx

# 安装 Nginx(release 名为 my-nginx)
helm install my-nginx bitnami/nginx

# 查看服务
kubectl get svc

# 卸载 nginx
helm uninstall my-nginx

七、如何自定义部署?

通过 values.yaml 自定义部署参数,例如:

replicaCount: 2

service:
  type: NodePort
  port: 80

执行命令:

helm install my-nginx bitnami/nginx -f my-values.yaml

或者直接在命令中设置参数:

helm install my-nginx bitnami/nginx --set replicaCount=3

八、Helm 模板语言(简要)

  • 使用 Go 模板语法:
    • {{ .Values.xxx }}:访问 values.yaml 中的值
    • {{ if ... }} ... {{ end }}:条件控制
    • {{ range ... }} ... {{ end }}:循环
    • {{ .Release.Name }}{{ .Chart.Name }}:上下文变量

九、常见场景

  • 企业私有云一键部署微服务系统
  • SaaS 平台多租户自动化安装
  • CICD 集成:在 GitOps 中结合 ArgoCD 或 Flux
  • 应用市场统一分发服务(如 Rancher App Catalog)

十、生态与工具

工具名 作用
ArgoCD 与 Helm 结合实现 GitOps
ChartMuseum 私有 Helm 仓库
Kubeapps Helm GUI 管理工具
Helmfile 管理多个 Chart 的部署

十一、常见问题与建议

常见问题

  • 模板调试困难?用 helm template 查看渲染结果
  • 应用太多不好管理?用 helmfile 管理多 release
  • Chart 太庞大?拆成子 Chart,提高复用性

建议

  • 编写 Chart 时注重参数化和可维护性
  • 使用 helm lint 保证 Chart 质量
  • 为每个环境准备独立的 values-{env}.yaml

总结

Helm 是 Kubernetes 下 DevOps 工程师的“利器”,它极大简化了复杂应用的部署、升级与维护。无论你是个人开发者还是企业平台研发,掌握 Helm 都是通往云原生世界的关键一步。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐