In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-30 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Servers >
Share
Shulou(Shulou.com)06/03 Report--
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,livenessProbe在values.yaml中定义了httpGet,需要手动设置为null,然后设置exec的探针.
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.