Skip to content
Helm 包管理

Helm 包管理

Helm 概念与使用:Chart、Repository、Release,以及通过 Helm 快速部署应用的实战指南。


1. Helm 是什么

Helm 是 Kubernetes 的包管理工具,类似 Ubuntu 的 APT、CentOS 的 YUM 或 Node.js 的 npm。Helm 使用 Chart 封装 K8s 应用的 YAML 文件,只需设置参数即可自动部署复杂应用。

1.1 为什么需要 Helm

痛点 Helm 如何解决
手动编写大量 YAML Chart 封装了模板,减少重复
环境间配置管理混乱 通过 values.yaml 区分环境
应用升级/回滚复杂 helm upgrade / helm rollback 一键操作
依赖管理困难 Chart 可声明依赖,自动安装
缺少版本和发布概念 Release 机制管理安装生命周期

2. 核心概念

概念 说明 类比
Chart 包含运行应用所需的所有资源定义和依赖的 Helm 包 APT 的 .deb / npm 的 package.json
Repository 存放和共享 Chart 的仓库 Docker Hub / npm Registry
Release Chart 的运行实例。同一个 Chart 可在集群中安装多次,每次创建一个 Release Docker Container / npm 安装的依赖

🚨 Release 名称不能重复。每次安装都会创建新的 Release。


3. 安装 Helm

# 下载(选择对应版本)
wget https://get.helm.sh/helm-v3.16.3-linux-amd64.tar.gz
tar -zxvf helm-v3.16.3-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm

# 配置环境变量(K3s 环境需要)
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

# 验证安装
helm version

4. Helm Repository 操作

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

# 更新仓库索引
helm repo update

# 查看已添加的仓库
helm repo list

# 搜索 Chart
helm search repo mysql

# 移除仓库
helm repo remove bitnami

常用 Helm 仓库

仓库 地址 说明
Bitnami https://charts.bitnami.com/bitnami 最全面,覆盖数据库、中间件等
Ingress-nginx https://kubernetes.github.io/ingress-nginx 官方 Ingress 控制器
Prometheus https://prometheus-community.github.io/helm-charts 监控栈
Grafana https://grafana.github.io/helm-charts 可视化面板

5. 安装与管理应用

5.1 安装 Chart

# 基础安装
helm install my-mysql bitnami/mysql

# 传递配置值(命令行方式)
helm install my-mysql \
  --set auth.rootPassword="123456" \
  --set primary.persistence.size=2Gi \
  bitnami/mysql

# 传递配置值(YAML 文件方式)
helm install my-mysql -f values.yaml bitnami/mysql

5.2 配置值传递优先级

--set 参数 > -f 文件(最右侧文件优先) > Chart 默认 values.yaml

5.3 常用管理命令

# 列出所有 Release
helm list
helm ls

# 查看 Release 的配置值
helm get values my-mysql

# 查看 Release 的所有信息
helm get all my-mysql

# 查看 Release 状态
helm status my-mysql

# 升级 Release
helm upgrade my-mysql -f new-values.yaml bitnami/mysql

# 回滚 Release
helm rollback my-mysql 1      # 回滚到版本 1
helm history my-mysql          # 查看历史版本

# 卸载 Release
helm uninstall my-mysql

# 模拟安装(dry-run,不实际创建资源)
helm install my-mysql bitnami/mysql --dry-run --debug

6. values.yaml 示例

# values.yaml — MySQL 的典型配置

auth:
  rootPassword: "123456"

primary:
  persistence:
    size: 2Gi
    enabled: true

secondary:
  persistence:
    size: 2Gi
    enabled: true
  replicaCount: 2

architecture: replication
# 创建 Release
helm install cluster -f values.yaml bitnami/mysql

# 安装后查看生成的 Pod
kubectl get pod

7. 自定义 Chart(了解)

7.1 Chart 目录结构

my-chart/
├── Chart.yaml          # Chart 元数据
├── values.yaml         # 默认配置值
├── charts/             # 依赖的子 Chart
├── templates/          # K8s 资源模板
│   ├── deployment.yaml
│   ├── service.yaml
│   └── _helpers.tpl    # 模板辅助函数
└── .helmignore

7.2 创建 Chart

# 创建一个基础 Chart 骨架
helm create my-chart

# 检查模板渲染结果
helm template my-chart

# 打包 Chart
helm package my-chart

8. Helm vs kubectl apply

方面 kubectl apply helm install
配置管理 需手动管理 YAML values.yaml 集中管理
参数化 无,需手动修改 YAML 支持模板 + 参数
版本管理 需手动 rollout undo helm rollback 一键回滚
依赖管理 手动 Chart 依赖自动安装
生命周期 手动创建/删除 install/upgrade/rollback/uninstall
适用场景 简单、一次性部署 复杂应用、多环境管理

💡 最佳实践:简单/自定义资源用 kubectl apply,第三方复杂应用(MySQL、Redis、Kafka 等)优先用 Helm。


9. 常见问题

问题 解决
Error: INSTALLATION FAILED: cannot re-use a name Release 名已存在,用 helm uninstall 先卸载或换一个名字
Chart 拉取失败 helm repo update 更新索引
K3s 环境 helm 连不上集群 设置 export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
删除 Release 后 PVC 残留 Helm 不会自动删除 PVC,需手动清理:kubectl delete pvc -l release=my-mysql