ArcLibrary

Helm(K8s 包管理器)

把一组 K8s 资源打包成可参数化的 Chart —— 复用 + 升级 + 回滚。

HelmChartK8s
核心 · 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.yamlversion 是 Chart 自己版本,appVersion 是被打包应用版本。

易混点#

Helm Chart
模板 + 参数注入。
适合**发布给别人**用的标准化包。
Kustomize
叠加 patch,**不引入模板语法**。
适合自己内部定制。

延伸阅读#