helm模板文件chart编写语法详解

网友投稿 407 2022-10-13

helm模板文件chart编写语法详解

charts编写介绍

开始

快速创建一个chart模板,helm create mychart,执行命令后本地生成一个mychart目录.

chart目录结构

Chart.yaml: 该chart的描述文件,包括ico地址,版本信息等 vakues.yaml: 给模板文件使用的变量 charts: 依赖其他包的charts文件 requirements.yaml: 依赖的charts README.md: 开发人员自己阅读的文件 templates: 存放k8s模板文件目录 NOTES.txt 说明文件,helm install之后展示给用户看的内容 deployment.yaml 创建k8s资源的yaml文件 _helpers.tpl: 下划线开头的文件,可以被其他模板引用.

一个最小的chart目录,只需要包含一个Chart.yaml,和templates目录下一个k8s资源文件.如:

# mychart/Chart.yaml apiVersion: v1 appVersion: 2.9.0 version: 1.1.1 # mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap data: myvalue: "Hello World"

helm的模板语法实现原理:

- go-template双 - sprig

helm模板语法

模板引用方式,{{ .Release.Name }}, 通过双括号注入,小数点开头表示从最顶层命名空间引用. helm内置对象 # Release, release相关属性 # Chart, Chart.yaml文件中定义的内容 # Values, values.yaml文件中定义的内容 模板中使用管道 apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" drink: {{ .Values.favorite.drink | repeat 5 | quote }} food: {{ .Values.favorite.food | upper | quote }} if语句 {{ if PIPELINE }} # Do something {{ else if OTHER PIPELINE }} # Do something else {{ else }} # Default case {{ end }} 操作符, and/eq/or/not {{/* include the body of this if statement when the variable .Values.fooString exists and is set to "foo" */}} {{ if and .Values.fooString (eq .Values.fooString "foo") }} {{ ... }} {{ end }} {{/* do not include the body of this if statement because unset variables evaluate to false and .Values.setVariable was negated with the not function. */}} {{ if or .Values.anUnsetVariable (not .Values.aSetVariable) }} {{ ... }} {{ end }} 控制语句块在渲染后生成模板会多出空行,需要使用{{- if ...}}的方式消除此空行.如: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" {{- if eq .Values.favorite.drink "coffee"}} mug: true {{- end}} 引入相对命名空间,with命令: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" {{- with .Values.favorite }} drink: {{ .drink | default "tea" | quote }} food: {{ .food | upper | quote }} {{- end }} range命令实现循环,如: # values.yaml favorite: drink: coffee food: pizza pizzaToppings: - mushrooms - cheese - peppers - onions #configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" toppings: |- {{- range .Values.pizzaToppings }} - {{ . }} # .表示range的命令空间下的取值 {{- end }} {{- range $key, $val := .Values.favorite }} {{ $key }}: {{ $val | quote }} {{- end}} 变量赋值 ApiVersion: v1 Kind: ConfigMap Metadata: name: {{ .Release.Name }}-configmap Data: myvalue: "Hello World" # 由于下方的with语句引入相对命令空间,无法通过.Release引入,提前定义relname变量 {{- $relname := .Release.Name -}} {{- with .Values.favorite }} food: {{ .food }} release: {{ $relname }} # 或者可以使用$符号,引入全局命名空间 release: {{ $.Release.Name }} {{- end }} 公共模板,define定义,template引入,在templates目录中默认下划线_开头的文件为公共模板(_helpers.tpl) # _helpers.tpl文件 {{- define "mychart.labels" }} labels: generator: helm date: {{ now | htmlDate }} {{- end }} # configmap.yaml文件 apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap {{- template "mychart.labels" }} data: myvalue: "Hello World" template语句的升级版本include,template是语句无法在后面接管道符来对引入变量做定义,include实现了此功能. # _helpers.tpl文件 {{- define "mychart.app" -}} app_name: {{ .Chart.Name }} app_version: "{{ .Chart.Version }}+{{ .Release.Time.Seconds }}" {{- end -}} # configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap labels: {{- include "mychart.app" . | nindent 4 }} data: myvalue: "Hello World" {{- range $key, $val := .Values.favorite }} {{ $key }}: {{ $val | quote }} {{- end }} {{- include "mychart.app" . | nindent 2 }} # 如果使用template只能手动空格,不能使用管道后的nindent函数来做缩进 一个坑helm install stable/drupal --set image=my-registry/drupal:0.1.0 --set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt] --set livenessProbe.httpGet=null
,livenessProbe在values.yaml中定义了httpGet,需要手动设置为null,然后设置exec的探针.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot实现maven多模块和打包部署
下一篇:Rancher 2.2.5发布,CVE修复,支持K8S 1.15
相关文章

 发表评论

暂时没有评论,来抢沙发吧~