核心 · Key Idea
一句话:Helm 是 K8s 的包管理器。一个 Chart = 一组 Go 模板化的 YAML + 默认值。helm install 把它渲染成具体资源装到集群,helm upgrade --atomic 失败自动回滚。
是什么#
my-chart/
├── Chart.yaml # name / version / appVersion
├── values.yaml # 默认值
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── ingress.yaml
└── charts/ # 依赖
templates/deployment.yaml 用 Go 模板:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-chart.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources: {{- toYaml .Values.resources | nindent 12 }}helm install my-app ./my-chart -f values-prod.yaml
helm upgrade --install my-app ./my-chart -f values-prod.yaml --atomic --wait
helm rollback my-app 3
helm list打个比方#
打个比方 · Analogy
直接写 K8s YAML 像手写每一份合同:写错一个字段重写一份。
Helm 像带变量的合同模板:客户名字、金额、条款是参数,生成一份 PDF。
关键概念#
Chart图表
Helm 的包格式。
Release发布
Chart 装到集群里的一个实例。同一个 Chart 可装多次(不同 release name)。
Values值
渲染模板时注入的参数;values.yaml 默认 + -f 覆盖 + --set 命令行覆盖。
Repository仓库
公共 / 私有 Chart 仓库(Artifact Hub / OCI registry)。
Hooks钩子
pre-install / post-upgrade / pre-delete 等生命周期钩子。
Atomic / Wait原子升级
`--atomic` 失败回滚;`--wait` 等所有资源 Ready 再返回。
怎么工作#
每次 install / upgrade 都把 release 历史以 Secret 形式存集群里 → 才能回滚。
实操要点#
- 善用社区 Chart:Bitnami / cert-manager / ingress-nginx / loki-stack —— 直接
helm install,比抄 YAML 快多了。 - 不要 fork Chart 改源:用
values.yaml覆盖;真要改用umbrella chart包一层。 - CI/CD 集成:Argo CD / Flux 都原生支持 Helm,写在 GitOps 仓库里。
helm template调试:本地渲染出 YAML 检查再 apply,避免helm install失败搞乱集群。--atomic+--wait:生产升级标配,失败自动回。- 机密别写 values:用 sealed-secrets / external-secrets / SOPS 加密。
- Chart 版本 vs 应用版本:
Chart.yaml里version是 Chart 自己版本,appVersion是被打包应用版本。
易混点#
Helm Chart
模板 + 参数注入。
适合**发布给别人**用的标准化包。
适合**发布给别人**用的标准化包。
Kustomize
叠加 patch,**不引入模板语法**。
适合自己内部定制。
适合自己内部定制。
延伸阅读#
- Kubernetes 核心概念
- Pod / Service / Ingress
- Argo CD —— 把 Helm + GitOps 串起来