templates/ 是 Helm Chart 的核心引擎室

📅 2026/7/24 23:25:12 👁️ 阅读次数 📝 编程学习
templates/ 是 Helm Chart 的核心引擎室

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 资源清单。

学习时建议你做这件事:

  1. 打开templates/deployment.yaml,找到所有{{ .Values.xxx }}的占位符

  2. values.yaml里找到对应的值

  3. 在脑子里"手动渲染"一遍,看看最终 YAML 长什么样

  4. 再对比k8s/backend-deployment.yaml(你学过的原生版本),体会差异

这样你就能真正理解 Helm 的价值了。