关灯
开启左侧

[其它] helm模板文件chart编写语法详解

[复制链接]
CloudService 发表于 2022-5-23 14:41:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
charts编写介绍开始快速创建一个chart模板,helm create mychart,执行命令后本地生成一个mychart目录.
chart目录结构Chart.yaml: 该chart的描述文件,包括ico地址,版本信息等vakues.yaml: 给模板文件使用的变量charts: 依赖其他包的charts文件requirements.yaml: 依赖的chartsREADME.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双- sprighelm模板语法模板引用方式,{{ .Release.Name }}, 通过双括号注入,小数点开头表示从最顶层命名空间引用.
helm内置对象# Release, release相关属性# Chart, Chart.yaml文件中定义的内容# Values, values.yaml文件中定义的内容模板中使用管道apiVersion: v1kind: ConfigMapmetadata:   name: {{ .Release.Name }}-configmapdata:  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: v1kind: ConfigMapmetadata:  name: {{ .Release.Name }}-configmapdata:  myvalue: "Hello World"  {{- if eq .Values.favorite.drink "coffee"}}  mug: true  {{- end}}引入相对命名空间,with命令:apiVersion: v1kind: ConfigMapmetadata:  name: {{ .Release.Name }}-configmapdata:  myvalue: "Hello World"  {{- with .Values.favorite }}  drink: {{ .drink | default "tea" | quote }}  food: {{ .food | upper | quote }}  {{- end }}range命令实现循环,如:
# values.yamlfavorite:  drink: coffee  food: pizzapizzaToppings:  - mushrooms  - cheese  - peppers  - onions#configmap.yamlapiVersion: v1kind: ConfigMapmetadata:  name: {{ .Release.Name }}-configmapdata:  myvalue: "Hello World"  toppings: |-    {{- range .Values.pizzaToppings }}    - {{ . }}    # .表示range的命令空间下的取值    {{- end }}    {{- range $key, $val := .Values.favorite }}    {{ $key }}: {{ $val | quote }}    {{- end}} 变量赋值ApiVersion: v1Kind: ConfigMapMetadata:  name: {{ .Release.Name }}-configmapData:  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: v1kind: ConfigMapmetadata:  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.yamlapiVersion: v1kind: ConfigMapmetadata:  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<br/>,livenessProbe在values.yaml中定义了httpGet,需要手动设置为null,然后设置exec的探针.
 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


0关注

0粉丝

95帖子

热门图文
热门帖子
排行榜
作者专栏

关注我们:微信订阅号

官方微信

APP下载

全国服务Q Q:

956130084

中国·湖北

Email:956130084@qq.com

Copyright   ©2015-2022  站长技术交流论坛|互联网技术交流平台Powered by©Discuz!技术支持:得知网络  

鄂公网安备 42018502006730号

  ( 鄂ICP备15006301号-5 )