[K8s 相關] 寫 Helm 技巧筆記

Helm 或許不是現在最新最流行的工具,但公司用這個,所以還是得知道怎麼寫,這邊整理一些撰寫中一些實用小技巧。因為他底層是用 go template,有些語法會跟 Go 很像

  1. 使用 name template 來降低 template 的雜亂度

    1
    2
    3
    {{- define "temp.name" }}
    ...
    {{end -}}
  2. 使用不會輸出到 YAML 的註解表示法: {{ /* /*}}

  3. 需知道 {{- -}}- 的意思,知道他要去除那邊的空白

  4. 可以使用 {{- $var := printf "%s-%s" .Values.xxx .Values.yyy -}} 的寫法來定義範圍區域變數

  5. 使用 printf 時,要留意資料型別,這部分可查閱 Go printf 的使用辦法

  6. 在 name template 內如果要使用全域變數時,可加上 $ ,例如 {{ $.Values.xxxx}}

  7. 使用 name template 時,可以利用 dict 將多組資料傳入 name templates 中

    1
    2
    3
    4
    5
    6
    7
    8
    {{- $data := dict "key1" value1 "key2" value2 -}}
    {{ include "name.template" $data }}

    // name template 內使用傳進來資料的方式
    {{- define "name.template" }}
    value1: {{ .key1 }}
    value2: {{ .key2 }}
    {{end -}}
  8. 使用 range 搭配 Values 中的列表資料,可以快速產生多組設定

    1
    2
    3
    4
    {{- range $item := .Values.items }}
    value in item: {{ $item.value }}
    {{ include "name.template" $item }}
    {{- end}}
  9. HELM 有一些 Flow control 的運算式可以使用,可參閱 Doc

  10. 內建 function 及善用 pipe 可以簡化很多工作

    1
    {{ toYaml .Values.resoureces | indent 12}}
    • 轉成 YAML 格式且 indent 12 個空白