templates/是 Helm Chart 的核心引擎室。你可以把它理解为:
一个"智能 YAML 工厂"—— 你写一次模板,Helm 根据
values.yaml里的配置,自动"生产"出适合不同环境的 Kubernetes YAML。
与你学过的k8s/对比
Table
k8s/文件夹 | helm/templates/文件夹 | |
|---|---|---|
| 性质 | 静态 YAML,写死配置 | 动态模板,用{{ }}语法占位 |
| 环境切换 | 需要手动改多个文件 | 换一份values-xxx.yaml即可 |
| 复用性 | 低,每个环境复制一份 | 高,模板只写一次 |
| 维护成本 | 高,改一个地方要改多份 | 低,改模板一处生效 |
templates/里每个文件的作用
结合你在这个项目里看到的文件:
Table
| 文件 | 作用 |
|---|---|
_helpers.tpl | 模板"工具箱",定义可复用的代码片段(如生成统一标签、名称),不会直接生成 K8s 资源 |
deployment.yaml | 定义 Pod 怎么跑(镜像、副本数、环境变量、资源限制等) |
service.yaml | 定义集群内怎么访问这些 Pod(ClusterIP/NodePort 等) |
ingress.yaml | 定义外部流量怎么进来(域名、路径路由、TLS) |
configmap.yaml | 把配置数据(如 API 地址)注入容器 |
secret.yaml | 把敏感数据(如密码、Token)注入容器 |
pvc.yaml | 定义持久化存储(数据库文件、上传文件不落盘) |
hpa.yaml | 自动扩缩容规则(CPU > 80% 就多开 Pod) |
resourcequota.yaml | 限制整个命名空间能用多少 CPU/内存 |
networkpolicy.yaml | 限制 Pod 之间谁能访问谁(安全隔离) |
serviceaccount.yaml | 给 Pod 分配集群内的权限身份(RBAC) |
monitoring.yaml | 监控相关配置(ServiceMonitor 等) |
notes.txt | 安装完成后给用户看的提示信息(如访问地址) |
核心语法:看一个例子就懂
假设templates/deployment.yaml里有这样一段:
yaml
spec: replicas: {{ .Values.replicaCount.backend }} template: spec: containers: - name: backend image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" resources: requests: memory: "{{ .Values.backend.resources.requests.memory }}"然后values.yaml里配置:
yaml
replicaCount: backend: 3 image: repository: ghcr.io/xxx/camp-backend tag: "v1.0.0" backend: resources: requests: memory: "512Mi"Helm 渲染后,就变成你熟悉的原生 K8s YAML:
yaml
spec: replicas: 3 template: spec: containers: - name: backend image: "ghcr.io/xxx/camp-backend:v1.0.0" resources: requests: memory: "512Mi"一句话总结
templates/存放的是"带变量的 YAML 草稿",Helm 负责把values.yaml里的值填进去,生成最终交给 kubectl 执行的 Kubernetes 资源清单。
学习时建议你做这件事:
打开
templates/deployment.yaml,找到所有{{ .Values.xxx }}的占位符去
values.yaml里找到对应的值在脑子里"手动渲染"一遍,看看最终 YAML 长什么样
再对比
k8s/backend-deployment.yaml(你学过的原生版本),体会差异
这样你就能真正理解 Helm 的价值了。