Helm 详解
Helm 是 Kubernetes(K8s)的包管理工具,可以把它理解为 Kubernetes 世界里的 apt(Ubuntu)、yum(CentOS)或 npm(Node.js)—— 核心作用是简化 Kubernetes 应用的部署、升级、回滚和管理。
一、为什么需要 Helm?
直接用 Kubernetes 的 YAML 文件部署应用时,会遇到这些问题:
一个应用可能需要部署 Deployment、Service、ConfigMap 等多个 YAML 文件,管理零散;
不同环境(开发 / 测试 / 生产)需要修改 YAML 中的配置(如镜像版本、端口),手动改容易出错;
应用升级 / 回滚需要手动操作多个资源,步骤繁琐。
Helm 把这些零散的 YAML 文件打包成一个「包」(Chart),并提供版本管理、配置替换、一键部署 / 回滚等能力,彻底解决上述痛点。
二、Helm 核心概念(由浅入深)
1. Chart(图表)
定义:Helm 的「包」,是一个包含部署应用所需所有 Kubernetes YAML 文件和配置的目录结构。
类比:就像 npm 的
package.json+ 项目代码,或 Docker 的Dockerfile+ 镜像。核心组成(新手只需关注关键文件):
my-chart/ # Chart 根目录 ├── Chart.yaml # 必选!Chart 元数据(名称、版本、描述等) ├── values.yaml # 必选!默认配置(如镜像地址、端口、副本数) └── templates/ # 必选!K8s YAML 模板(支持变量替换) ├── deployment.yaml └── service.yaml
2. Release(发布)
定义:Chart 部署到 Kubernetes 集群后的「实例」。
类比:就像用 Docker 镜像运行出的「容器」—— 同一个 Chart 可以部署多个 Release(比如开发环境一个、测试环境一个)。
举例:执行
helm install my-nginx nginx-stable/nginx后,K8s 中会生成一个名为my-nginx的 Release。
3. Repository(仓库)
定义:存放 Chart 的「远程仓库」,类似 npm 的
npmjs.com、Docker 的Docker Hub。常用仓库:
官方仓库:
https://charts.helm.sh/stable(已归档,推荐用社区仓库);社区仓库:
https://charts.bitnami.com/bitnami(常用的 Bitnami 仓库);自定义仓库:企业内部搭建的私有 Chart 仓库。
4. Values(配置)
定义:Chart 的配置文件(
values.yaml),用于定义模板中可替换的变量(如镜像版本、服务端口)。作用:部署时可通过
--set或自定义 YAML 文件覆盖默认值,实现「一套 Chart 适配多环境」。举例:
默认
values.yaml:image: repository: nginx tag: 1.24.0 service: port: 80部署时覆盖:
helm install my-nginx nginx-stable/nginx --set image.tag=1.25.0 --set service.port=8080。
三、Helm 核心操作(新手必学)
前置条件
已安装 Kubernetes 集群(或 Minikube/Kind 本地集群);
已安装 Helm 客户端(参考官方安装文档)。
1. 基础命令(从安装到删除)
(1)添加仓库
# 添加 Bitnami 仓库(常用)
helm repo add bitnami https://charts.bitnami.com/bitnami
# 更新仓库缓存(获取最新 Chart 列表)
helm repo update
(2)搜索 Chart
# 搜索仓库中的 Chart
helm search repo nginx
# 搜索所有可用 Chart(包括远程)
helm search hub nginx
(3)安装 Release
# 基础安装:仓库名/Chart名 → 自动生成 Release 名
helm install bitnami/nginx
# 指定 Release 名安装
helm install my-nginx bitnami/nginx
# 自定义配置安装(用本地 YAML 文件覆盖 values)
helm install my-nginx bitnami/nginx -f my-values.yaml
# 临时覆盖配置(优先级高于 YAML 文件)
helm install my-nginx bitnami/nginx --set service.port=8080
(4)查看 Release
# 列出所有 Release
helm list
# 查看某个 Release 的详细信息
helm status my-nginx
(5)升级 Release
# 升级版本(同时可覆盖配置)
helm upgrade my-nginx bitnami/nginx --set image.tag=1.25.0
(6)回滚 Release
# 查看 Release 版本历史
helm history my-nginx
# 回滚到指定版本(比如版本 1)
helm rollback my-nginx 1
(7)删除 Release
# 删除 Release(默认保留历史记录,可回滚)
helm uninstall my-nginx
# 彻底删除(不保留历史)
helm uninstall my-nginx --no-history
2. 自定义 Chart(新手入门)
# 1. 创建一个空 Chart
helm create my-first-chart
# 2. 编辑 Chart 配置(修改 values.yaml)
vim my-first-chart/values.yaml
# 3. 检查 Chart 语法是否正确
helm lint my-first-chart
# 4. 本地测试部署(不实际安装到集群)
helm install --dry-run --debug my-test my-first-chart
# 5. 打包 Chart(生成 .tgz 包,可上传到仓库)
helm package my-first-chart
四、Helm 的优势(新手视角)
简化部署:一键部署复杂应用(比如 WordPress 需 Deployment + Service + PVC + ConfigMap,Helm 只需一条命令);
环境隔离:一套 Chart 可通过不同 values 文件适配开发 / 测试 / 生产环境;
版本可控:应用升级 / 回滚只需操作 Release 版本,无需手动改 YAML;
社区丰富:大量成熟的 Chart 可直接使用(如 Nginx、MySQL、Redis),避免重复造轮子。
五、常见使用场景
快速部署开源中间件(MySQL、Redis、Elasticsearch 等);
标准化企业内部应用的 K8s 部署流程;
实现应用的 CI/CD 自动化(比如 Jenkins 中用 Helm 部署);
管理多环境(开发 / 测试 / 生产)的应用配置。
总结
Helm 是 Kubernetes 的包管理工具,核心是将零散的 K8s YAML 打包成 Chart,实现一键部署 / 升级 / 回滚;
核心概念:Chart(包)、Release(部署实例)、Repository(仓库)、Values(配置);
新手先掌握「添加仓库 → 搜索 Chart → 安装 / 升级 / 删除 Release」的基础流程,再尝试自定义 Chart。