Helm3子模板使用指南
一、子模板的定义
在Helm3中,子模板可以通过两种方式定义:
- 在`templates/xx.yaml`文件中定义
- 在`templates/xx.tpl`文件内定义
子模板的定义语法如下:
{{- define "subTemplateName" }}
...
{{- end}}
推荐在`helpers.tpl`文件中集中定义子模板,以保持代码结构清晰。
1. 在yaml文件中定义
[root@k8s-master m1]# cat chart6/templates/configmap.yaml
{{- define "childTemplates" }}
labels:
name: test
date: {{ now | date "2006-01-02" }}
{{- end}}
2. 在tpl文件中定义
{{- define "childTemplates" }}
labels:
name: {{ .Values.labels.name }}
date: {{ now | date "2006-01-02" }}
{{- end}}
注意: 如果使用了`templates/`目录中的`.tpl`文件,应执行`rm -rf templates/*`以删除现有内容,否则可能会导致错误。错误信息如下:
Error: INSTALLATION FAILED: template: chart6/templates/tests/test-connection.yaml:4:12: executing "chart6/templates/tests/test-connection.yaml" at <include "chart6.fullname" .>: error calling include: template: no template "chart6.fullname" associated with template "gotpl" helm.go:88: [debug] template: chart6/templates/tests/test-connection.yaml:4:12: executing "chart6/templates/tests/test-connection.yaml" at <include "chart6.fullname" .>: error calling include: template: no template "chart6.fullname" associated with template "gotpl"
二、子模板的调用
子模板的调用方式包括`template`和`include`,但推荐使用`include`,因为它支持管道操作。
调用语法如下:
{{- template/include "subTemplateName" . }}
其中,`.`表示当前作用域,可以从整个chart的上下文中获取值,例如`values.yaml`。
1. 使用`include`调用(推荐)
在`helpers.tpl`文件中定义子模板,并在主yaml文件中调用并进行结果处理。
示例1: 在`helpers.tpl`文件中定义子模板
[root@k8s-master m1]# cat mychart/templates/_helpers.tpl
{{- define "childTemplates" }}
labels:
date: {{ now | date "2006-01-02" }}
{{- end}}
示例2: 在主yaml文件中调用并处理结果
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}
{{- include "childTemplates" . | indent 2}} # 缩进2个字符
data:
value1: test
运行结果:
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart
labels:
date: 2025-11-04
data:
value1: test
包含对象的调用: 在`helpers.tpl`文件中定义子模板,并在主yaml文件中调用
values.yml文件:
[root@k8s-master m1]# cat mychart/values.yaml labels: app: test
configmap.yaml文件:
[root@k8s-master m1]# cat mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}
{{- include "childTemplates" . }}
data:
value1: test
运行结果:
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart
labels:
app: test
date: 2025-11-04
data:
value1: test
2. 使用`template`调用
在`templates/configmap.yaml`文件中定义子模板并直接调用
[root@k8s-master m1]# cat chart6/templates/configmap.yaml
{{- define "childTemplates" }}
labels:
app: test
date: {{ now | date "2006-01-02" }}
{{- end}}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}
{{- template "childTemplates" . }}
data:
value1: test
运行结果:
# Source: chart6/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: chart6
labels:
name: test
date: 2025-11-04
data:
value1: test
相关文章
Linux crontab 详解
1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...
富文本里可以允许的 HTML 属性
一、所有标签默认允许的安全属性(极少)class (可选)id (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...
Mac 安装 Node.js 指南
方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...
Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签
在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...
Laravel 事件和监听器创建
在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...
自定义域名解析神器 dnsmasq
什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...