K8s 是强大的容器编排平台,但部署复杂应用时(如包含 Web 服务、数据库、缓存等多个组件的系统),需要编写大量 YAML 文件,管理成本高。Helm 就是为简化 K8s 应用部署而生的工具,它被称为 “K8s 的包管理器”,类似 Ubuntu 的apt
或 Mac 的brew
。
Chart(图表)
Release(发布)
Values(配置值)
场景 | 直接用 kubectl | 用 Helm |
---|---|---|
复杂应用部署 | 需要手动编写 / 管理多个 YAML 文件,易出错。 | 一键安装预定义的 Chart,自动处理依赖关系。 |
配置管理 | 配置硬编码在 YAML 中,难以复用和修改。 | 通过 Values 文件灵活配置,支持环境变量。 |
版本控制 | 手动记录 YAML 变更,回滚困难。 | 自动记录 Release 历史,支持一键回滚到任意版本。 |
依赖管理 | 需要手动确保组件顺序(如先部署 DB 再部署 APP) | Chart 中定义依赖关系,自动按顺序部署。 |
假设你想部署一个 WordPress 博客,包含 Web 服务和 MySQL 数据库:
bash
helm repo add bitnami https://charts.bitnami.com/bitnami # 添加官方仓库
helm install my-blog bitnami/wordpress # 安装WordPress Chart
模板引擎
# values.yaml
replicas: 3
# deployment.yaml
replicas: {{ .Values.replicas }} # 自动从values中获取值
钩子(Hooks)
brew install helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
choco install kubernetes-helm
helm version
# 输出类似:version.BuildInfo{Version:"v3.12.0", ...}
Helm 通过 仓库(Repository) 管理 Charts,类似 npm 或 Maven 的仓库:
helm repo add bitnami https://charts.bitnami.com/bitnami # 添加 Bitnami 官方仓库
helm repo update # 更新仓库索引
helm search repo wordpress # 搜索 WordPress 相关 Charts
# 输出类似:
# NAME CHART VERSION APP VERSION DESCRIPTION
# bitnami/wordpress 15.0.0 6.2.2 WordPress is the world's most popular blogging ...
以安装 WordPress 为例:
helm install my-blog bitnami/wordpress # 安装名为 my-blog 的 WordPress 实例
--version 15.0.0
:指定 Chart 版本--values my-values.yaml
:使用自定义配置文件--set service.type=LoadBalancer
:临时覆盖配置值helm list # 查看所有已安装的 Releases
helm status my-blog # 查看特定 Release 的详细信息
kubectl get pods # 验证 Pod 是否正常运行
复制默认配置并修改:
helm show values bitnami/wordpress > my-values.yaml
vi my-values.yaml # 编辑配置,例如修改数据库密码、服务类型等
bash
helm install my-blog bitnami/wordpress -f my-values.yaml
# my-values.yaml
wordpressUsername: admin
wordpressPassword: my-strong-password # 自定义 WordPress 密码
service:
type: NodePort # 将服务类型改为 NodePort
persistence:
size: 20Gi # 增加持久化存储大小
helm upgrade my-blog bitnami/wordpress --set wordpressPassword=new-password # 升级并修改密码
helm history my-blog
# 输出类似:
# REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
# 1 Mon Jul 10 12:00:00 2023 superseded wordpress-15.0.0 6.2.2 Install complete
# 2 Mon Jul 10 12:30:00 2023 deployed wordpress-15.1.0 6.2.2 Upgrade complete
helm rollback my-blog 1 # 回滚到版本 1
helm repo add my-repo https://my-company.com/charts
helm repo list
helm repo update # 每次使用前建议更新
helm create my-app # 创建名为 my-app 的 Chart 模板
my-app/
├── charts/ # 依赖的子 Charts
├── templates/ # YAML 模板文件
│ ├── deployment.yaml
│ ├── service.yaml
│ └── _helpers.tpl # 模板辅助函数
├── Chart.yaml # Chart 元数据(名称、版本等)
└── values.yaml # 默认配置值
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-app
spec:
replicas: {{ .Values.replicas }} # 从 values.yaml 获取副本数
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: {{ .Values.service.port }}
helm package my-app # 生成 my-app-0.1.0.tgz 包
helm install my-release ./my-app
命令 | 作用 |
---|---|
helm install release chart |
安装 Chart 为一个 Release |
helm upgrade release chart |
升级 Release |
helm uninstall release |
卸载 Release |
helm search repo keyword |
在仓库中搜索 Chart |
helm show values chart |
查看 Chart 的默认配置值 |
helm dependency update chart |
更新 Chart 的依赖 |
helm lint chart |
检查 Chart 语法错误 |
helm template chart |
渲染 Chart 模板(不安装) |
--set
参数,将配置保存在文件中便于版本控制。my-prod-api
)。helm install --dry-run
预渲染模板,确保配置正确。helm uninstall
不再需要的应用。通过 Helm,开发者可以将精力集中在业务逻辑上,而不是复杂的 K8s 配置,真正实现 “一键部署,全家无忧”!