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 核心操作(新手必学)

前置条件

  1. 已安装 Kubernetes 集群(或 Minikube/Kind 本地集群);

  2. 已安装 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 的优势(新手视角)

  1. 简化部署:一键部署复杂应用(比如 WordPress 需 Deployment + Service + PVC + ConfigMap,Helm 只需一条命令);

  2. 环境隔离:一套 Chart 可通过不同 values 文件适配开发 / 测试 / 生产环境;

  3. 版本可控:应用升级 / 回滚只需操作 Release 版本,无需手动改 YAML;

  4. 社区丰富:大量成熟的 Chart 可直接使用(如 Nginx、MySQL、Redis),避免重复造轮子。

五、常见使用场景

  • 快速部署开源中间件(MySQL、Redis、Elasticsearch 等);

  • 标准化企业内部应用的 K8s 部署流程;

  • 实现应用的 CI/CD 自动化(比如 Jenkins 中用 Helm 部署);

  • 管理多环境(开发 / 测试 / 生产)的应用配置。

总结

  1. Helm 是 Kubernetes 的包管理工具,核心是将零散的 K8s YAML 打包成 Chart,实现一键部署 / 升级 / 回滚;

  2. 核心概念:Chart(包)、Release(部署实例)、Repository(仓库)、Values(配置);

  3. 新手先掌握「添加仓库 → 搜索 Chart → 安装 / 升级 / 删除 Release」的基础流程,再尝试自定义 Chart。

文章作者: 楚少爱看雪
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 楚少爱看雪
学习 Study
喜欢就支持一下吧