helm--chart模板文件簡單語法使用


參考網址: https://docs.helm.sh/chart_template_guide/#the-chart-template-developer-s-guide

helm 模板

helm模板語法嵌套在{{和}}之間,有三個常見的 
.Values.* 
從value.yaml文件中讀取 
.Release.* 
從運行Release的元數據讀取 
.Template.* 
.Chart.* 
從Chart.yaml文件中讀取 
.Files.* 
.Capabilities.*

可以通過命令

helm install --debug --dry-run ./mychart

  

獲取helm渲染后的k8s可執行的yaml文件(只渲染不運行)。

.Values.*的值可以來自以下 
+ values.yaml文件 
+ 如果是子chart,值來自父chart的values.yaml 
+ 通過helm install -f標志的文件 
+ 來自–set中的配置

順序查找,下面找到的覆蓋上面找到的值。

模板函數和管道

quote是最常用的模板函數,它能把ABC轉化為“ABC”。它帶一個參數 
{{ quote .Values.favorite.drink }}

| 管道,類似linux下的管道。 
{{ quote .Values.favorite.drink }} 與 {{ .Values.favorite.drink | quote }} 效果一樣。

default 模板函數 
制定默認值 
drink: {{ .Values.favorite.drink | default “tea” | quote }} 
如果在values中無法找到favorite.drink,則配置為“tea”。

indent 模板函數 
對左空出空格 
例如

data:
  myvalue: "Hello World"
{{ include "mychart_app" . | indent 2 }}

 

會使渲染后的取值於左邊空出兩個空格,以符合yaml語法。

模板流程控制

模板中控制流程語句可以控制值的生成 
常用的有 
+ if/else 條件控制 
+ with 范圍控制 
+ range 循環控制

此外,模板中還可以定義變量 
values.yaml

favorite:
  drink: coffee
  food: pizza

 

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{- range $key, $val := .Values.favorite }}
  {{ $key }}: {{ $val | quote }}
  {{- end}}

  

定義了keykey和val兩個變量,並且賦值。渲染后

apiVersion: v1
kind: ConfigMap
metadata:
  name: eager-rabbit-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "pizza"

  

命名模板使用

一般在template文件夾下的_helpers.tpl中定義命名模板。 
通過define 函數定義命名模板 
template使用命名模板 
例如,在_helpers.tpl中定義命名模板

{{/* Generate basic labels */}}
{{- define "my_labels" }}
  labels:
    generator: helm
    date: {{ now | htmlDate }}
    chart: {{ .Chart.Name }}
    version: {{ .Chart.Version }}
{{- end }}

  

第一行為描述命名模板{{/* Generate basic labels */}}。 
使用命名模板

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  {{- template "my_labels" . }}

  

渲染后為

apiVersion: v1
kind: ConfigMap
metadata:
  name: plinking-anaco-configmap
  labels:
    generator: helm
    date: 2016-11-02
    chart: mychart
    version: 0.1.0

  

在模板中使用文件

基本使用 
例如,在chart的根目錄下有三個文件

config1.toml:

message = Hello from config 1 
config2.toml:

message = This is config 2 
config3.toml:

message = Goodbye from config 3 
在模板文件中使用

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- $files := .Files }}
  {{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
  {{ . }}: |-
    {{ $files.Get . }}
  {{- end }}

  

files.Filesfiles變量賦值為.Files對象,通過files.Get 獲取文件內容。

apiVersion: v1
kind: ConfigMap
metadata:
  name: quieting-giraf-configmap
data:
  config1.toml: |-
    message = Hello from config 1

  config2.toml: |-
    message = This is config 2

  config3.toml: |-
    message = Goodbye from config 3

  

上面的用法對於單行文件在configmap中使用有效,但是對於文件內容較多,則使用另一種方法(不過文件內容不能超過1M,因為整個chart包傳入tiller限制存儲為1M)。

apiVersion: v1
kind: ConfigMap
metadata:
  name: conf
data:
{{ (.Files.Glob "foo/*").AsConfig | indent 2 }}
---
apiVersion: v1
kind: Secret
metadata:
  name: very-secret
type: Opaque
data:
{{ (.Files.Glob "bar/*").AsSecrets | indent 2 }}

  

上面模板文件中查找chart根目錄下foo目錄的所有文件配置為configmap的內容。bar目錄下所有文件配置為sectet的內容。

子chart和全局values

子chart是父chart依賴的chart,父chart在根目錄的requirements.yaml中聲明依賴的子chart,並且在charts目錄中存放子chart。 
1. 子chart不能訪問父chart的values 
2. 父chart可以覆蓋子chart的values 
3. helm中可以定義global values被所有charts使用 
4. 父chart和子chart可以共享模板函數,定義在任何地方的自定義模板函數可以被所有的chart使用。

global values聲明與使用 
mychart/values.yaml

favorite:
  drink: coffee
  food: pizza

mysubchart:
  dessert: ice cream

global:
  salad: caesar

  

在global下定義即可

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  salad: {{ .Values.global.salad }}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM