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 version4. 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/mysql5.2 配置值传递优先级
--set 参数 > -f 文件(最右侧文件优先) > Chart 默认 values.yaml5.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 --debug6. 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 pod7. 自定义 Chart(了解)
7.1 Chart 目录结构
my-chart/
├── Chart.yaml # Chart 元数据
├── values.yaml # 默认配置值
├── charts/ # 依赖的子 Chart
├── templates/ # K8s 资源模板
│ ├── deployment.yaml
│ ├── service.yaml
│ └── _helpers.tpl # 模板辅助函数
└── .helmignore7.2 创建 Chart
# 创建一个基础 Chart 骨架
helm create my-chart
# 检查模板渲染结果
helm template my-chart
# 打包 Chart
helm package my-chart8. 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 |