一、Helm 简介
Helm 是 Kubernetes 的包管理工具,类比 Linux 中的 yum
或 apt
,用于简化应用的打包、部署和版本管理。其核心功能包括:
- Chart 管理:将 Kubernetes 资源(Deployment、Service 等)打包为可复用的 Chart。
- 动态配置:通过模板化 YAML 文件支持参数注入。
- 版本控制:支持应用的升级、回滚及历史版本追踪。
二、Helm 安装与初始化
1. 安装 Helm 客户端
# 下载安装脚本并执行(适用于 Linux/macOS)
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
或 手动安装:
- 从 Helm 官网 下载二进制文件,解压后移动至
/usr/local/bin
。
2. 添加仓库
# 添加官方仓库
helm repo add stable https://charts.helm.sh/stable
# 添加阿里云仓库(国内加速)
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# 更新仓库索引
helm repo update
三、核心概念解析
概念 | 说明 |
---|---|
Chart | 应用包,包含部署所需的所有资源模板和配置(如 values.yaml )。 |
Repository | Chart 仓库,类似 Docker Registry,存储可共享的 Chart。 |
Release | Chart 在集群中的运行实例,每次安装生成唯一 Release。 |
四、Helm 使用详解
1. Chart 操作
-
搜索 Chart:
helm search repo nginx # 从本地仓库搜索 helm search hub mysql # 从 Artifact Hub 搜索公共 Chart
-
安装 Chart:
helm install my-nginx bitnami/nginx \ --namespace dev \ --set replicaCount=2 \ -f custom-values.yaml
--set
:动态覆盖配置参数。-f
:指定自定义values.yaml
文件。
-
查看已安装 Release:
helm list -n dev # 查看指定命名空间的 Release helm status my-nginx # 查看 Release 状态
2. Chart 开发
-
创建新 Chart:
helm create myapp # 生成 Chart 目录结构
目录结构:
myapp/ ├── Chart.yaml # Chart 元数据(名称、版本等) ├── values.yaml # 默认配置参数 ├── templates/ # Kubernetes 资源模板(Deployment、Service 等) └── charts/ # 子 Chart 依赖
-
打包与发布:
helm package myapp # 生成 .tgz 包 helm push myapp-1.0.0.tgz repo-url # 上传至私有仓库(需配置)
3. 升级与回滚
- 升级 Release:
helm upgrade my-nginx bitnami/nginx --version 1.2.0
- 回滚到历史版本:
helm history my-nginx # 查看版本历史 helm rollback my-nginx 2 # 回滚到版本 2
4. 卸载 Release
helm uninstall my-nginx -n dev
五、高级操作
1. 依赖管理
在 Chart.yaml
中定义依赖:
dependencies:
- name: mysql
version: 8.0.0
repository: https://charts.bitnami.com/bitnami
运行 helm dependency update
下载依赖。
2. 模板函数与流程控制
在 templates/
中使用 Go 模板语言动态生成配置:
# 示例:根据环境注入不同标签
metadata:
labels:
env: {{ .Values.environment | default "prod" }}
六、常见问题与注意事项
- 权限问题:确保 Helm 客户端有足够的 Kubernetes 集群权限。
- 网络问题:国内访问官方仓库可能需替换为镜像源(如阿里云)。
- 版本兼容性:Helm v3 移除 Tiller 组件,直接通过 kubeconfig 连接集群。
七、典型应用场景
- 微服务部署:一键部署包含数十个服务的复杂应用。
- 环境差异化配置:通过
values.yaml
区分开发、测试、生产环境。 - CI/CD 集成:在流水线中自动执行
helm upgrade
。
拓展
【一起来学kubernetes】28、StorageClass使用详解
【一起来学kubernetes】30、k8s的java sdk怎么用