返回归档
🥁Kubernetes

Helm:Chart、Release 和 values 覆盖

Chart 是包装好的 Kubernetes 清单模板,装一次产生一个 Release。覆盖 values 的优先级是:chart 自带 < -f 文件 < --set。回滚用 helm rollback,不要再用 helm delete --purge。

文章目录

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 后面要跟 repohubhelm status 必须带 release 名。Helm 3 没有 helm delete --purge,卸装就是 uninstall

还没装、只想看渲染结果:

helm install my-mysql bitnami/mysql --dry-run --debug
helm lint ./mychart

values 谁说了算

模板里用 {{ .Values.image.tag }}。覆盖优先级从低到高:

  1. Chart 自带的 values.yaml
  2. -f 传入的文件,后写的覆盖先写的
  3. --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 mycharttemplates/ 里是 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 HelmChart 技巧