1. 程式人生 > 其它 >helm3自定義chart編寫

helm3自定義chart編寫

當我們安裝好helm之後我們可以開始自定義chart,那麼我們需要先創建出一個模板如下:

helm create myapp

之後我們可以一下目錄結構,目錄的作用我簡要介紹一下:

templates/目錄包括了模板檔案。當Helm評估chart時,會通過模板渲染引擎將所有檔案傳送到templates/目錄中。 然後收集模板的結果併發送給Kubernetes。

  • _helpers.tpl裡面的內容是定義模板用的,所有模板都可以再這裡定義,然後再任何yaml檔案當中都可以呼叫這個檔案下的模板
  • NOTES.txt: chart的"幫助文字"。這會在你的使用者執行helm install時展示給他們。
  • deployment.yaml: 建立Kubernetes工作負載的基本清單
  • service.yaml: 為你的工作負載建立一個service終端基本清單。
  • _helpers.tpl: 放置可以通過chart複用的模板輔助物件

values.yaml檔案也匯入到了模板。這個檔案包含了chart的預設值。這些值會在使用者執行helm installhelm upgrade時被覆蓋。

Chart.yaml檔案包含了該chart的描述。你可以從模板中訪問它。charts/目錄可以包含其他的chart(稱之為子chart)。 指南稍後我們會看到當涉及模板渲染時這些是如何工作的。

$tree myapp/
myapp
/ ├── charts ├── Chart.yaml ├── templates │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── hpa.yaml │ ├── ingress.yaml │ ├── NOTES.txt │ ├── serviceaccount.yaml │ ├── service.yaml │ └── tests │ └── test-connection.yaml └── values.yaml 3 directories, 10 files

現在展示一下我所建立的chart為例

$tree myapp/
myapp
/ ├── charts ├── Chart.yaml ├── templates │ ├── configmap.yaml │ └── _helpers.tpl ├── test.yaml ├── values.yaml └── values.yaml.bak 2 directories, 7 files

其中我修改過的內容如下:

$cat values.yaml
favorite:
  drink: coffee
  food: pizza
pizzaToppings:
- mushrooms
- cheese
- peppers
- onions
$cat templates/configmap.yaml
{{ $release := "ok" }}
apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-configmap
    labels:
    {{- include "mychart.labels" . | indent 8 }}
data:
    myvalue: "Hello World"
    {{- with .Values.favorite }}
    drink: {{ .drink }}
    food: {{ .food }}
    release: {{ $release }}
    {{- end }}
    {{- if eq .Values.favorite.drink "coffee" }}
    {{- nindent 4 "mug: true" }}
    {{- end }}
    toppings: |-
        {{- range $.Values.pizzaToppings }}
        -{{ . | title | quote }}
        {{- end }}
    size: |-
        {{- range $index,$name := tuple "small" "medium" "large" }}
        {{ $index }}: {{ $name }}
        {{- end }}
$cat templates/_helpers.tpl
{{/* Generate basic labels */}}
{{- define "mychart.labels" }}
generator: helm
date: {{ now | htmlDate }}
chart: {{ .Chart.Name }}
version: {{ .Chart.Version }}
{{- end }}