Helm 3 把 Kubernetes 清单收成可版本化的包。三个词先分开:
| 词 | 是什么 |
|---|---|
| Chart | 一份模板加默认值,描述「怎么跑这个应用」 |
| Repository | Chart 的仓库 |
| Release | 某份 Chart 装到集群里的那一次,有名字、有修订号 |
找包去 repo,装包得到 release。同一份 Chart 可以装出多个 release,互不覆盖。
装、看、卸
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo mysql
helm install my-mysql bitnami/mysql
helm list --all
helm status my-mysql
helm uninstall my-mysql
helm search 后面要跟 repo 或 hub。helm status 必须带 release 名。Helm 3 没有 helm delete --purge,卸装就是 uninstall。
还没装、只想看渲染结果:
helm install my-mysql bitnami/mysql --dry-run --debug
helm lint ./mychart
values 谁说了算
模板里用 {{ .Values.image.tag }}。覆盖优先级从低到高:
- Chart 自带的
values.yaml -f传入的文件,后写的覆盖先写的--set/--set-string/--set-file
helm install my-rel ./mychart -f values-prod.yaml --set image.tag=1.2.3
嵌套用点号,数组用 servers[0].port=80,键里有点要转义:nodeSelector."kubernetes\.io/role"=master。
自己做 Chart:helm create mychart。templates/ 里是 Go template,_helpers.tpl 放可复用片段,NOTES.txt 是装完打在终端上的那段说明。include 嵌模板,required 保证关键值必须传入。管道很常见:{{ .Values.image.repository | default "nginx" }}。
升级和回滚
每次 install / upgrade 加一个 revision。看历史、回到某一版、导出当前算出的 values:
helm history myapp
helm rollback myapp 1
helm get values myapp > myapp-values.yaml
helm upgrade myapp ./mychart -f myapp-values.yaml
--history-max 限制留多少 revision。资源创建顺序 Helm 自己排:Namespace、RBAC、ConfigMap / Secret,再是 Service,最后才是工作负载和 Ingress。不必在 Chart 里手写依赖序号。
官方入口:Using Helm、Chart 技巧。