Helm 包管理
一个应用常由十几个 yaml 组成,还要在开发/生产间改镜像、调副本数,手动复制粘贴极易出错。Helm 是 Kubernetes 的包管理器,把一组资源打包成 Chart(模板+参数),一条命令完成安装、升级、回滚与卸载,相当于 Linux 的 apt/yum。
核心概念
| 概念 | 说明 |
|---|---|
| Chart | 应用的打包模板,含资源 yaml 模板与默认参数 |
| Release | Chart 的一次部署实例,每次 install 产生一个 |
| Repository | 存放 Chart 的仓库,类似软件源 |
| values.yaml | Chart 内的默认参数,部署时可覆写 |
安装 Helm 与配置仓库
先在客户端安装 helm 命令(方式见官方文档),再添加 Chart 仓库:
helm version
# 输出:version.BuildInfo{Version:"v3.x.x", ...}
helm repo add bitnami https://charts.bitnami.com/bitnami # 添加仓库
helm repo update # 更新仓库索引
helm search repo nginx # 搜索 Chart
# 输出:NAME CHART VERSION APP VERSION
# bitnami/nginx 19.x.x 1.25.x
常用部署命令
安装、升级、回滚、卸载构成完整生命周期:
helm install my-nginx bitnami/nginx # 安装,my-nginx 是 release 名
helm list # 查看已安装的 release
helm upgrade my-nginx bitnami/nginx --set replicaCount=3 # 升级并覆写参数
helm history my-nginx # 查看 release 的版本历史
helm rollback my-nginx 1 # 回滚到第 1 个版本
helm uninstall my-nginx # 卸载
Chart 目录结构
一个 Chart 的典型结构如下,templates 里是带占位符的资源模板:
mychart/
├── Chart.yaml # 名称、版本等元信息
├── values.yaml # 默认参数
├── charts/ # 依赖的子 Chart
└── templates/
├── deployment.yaml # Deployment 模板
├── service.yaml # Service 模板
└── _helpers.tpl # 公共模板函数
values.yaml 覆写
部署时按环境覆盖默认值,优先级:--set > -f 自定义文件 > values.yaml 默认值:
helm upgrade my-nginx bitnami/nginx -f prod-values.yaml
# prod-values.yaml
replicaCount: 3
image:
repository: myregistry/nginx
tag: "1.25.3"
模板简例
模板用 {{ .Values.xxx }} 引用 values.yaml 的值,配合模板函数动态生成:
# templates/deployment.yaml(片段)
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
values.yaml 里 image.tag 写成 1.25.3,渲染出的镜像就是 myregistry/nginx:1.25.3;模板函数可加默认值兜底,如 {{ .Values.image.tag | default "latest" }}。
小结:Helm 用 Chart 打包应用、values.yaml 存参数、模板渲染出可部署的 yaml;install 部署、upgrade 升级、rollback 回滚、uninstall 卸载一气呵成,多环境差异用 -f 与 --set 覆写即可。