Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
k8s:helm [2024/12/02 10:08] admin |
k8s:helm [2025/04/09 07:52] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Helm Charts ====== | ====== Helm Charts ====== | ||
- | |||
[[https:// | [[https:// | ||
Строка 48: | Строка 47: | ||
==== To use ==== | ==== To use ==== | ||
+ | |||
+ | [[https:// | ||
< | < | ||
Строка 193: | Строка 194: | ||
<code bash> | <code bash> | ||
helm install --dry-run --set certificateSecretStore.enabled=false test-release ./ | helm install --dry-run --set certificateSecretStore.enabled=false test-release ./ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Пример с IF. Переменные в шаблоне\\ | ||
+ | В двух циклах проверяем наличие чего либо во вложенном списке, | ||
+ | <code bash> | ||
+ | {{ $my_var := false }} | ||
+ | |||
+ | {{- range $svc := .Values.list_sys_services }} | ||
+ | {{- range $port := $svc.listen_ports }} | ||
+ | {{ $my_var = true }} | ||
+ | {{- end }} | ||
+ | {{- end }} | ||
+ | |||
+ | {{- range $svc := .Values.list_plugin_services }} | ||
+ | {{- range $port := $svc.listen_ports }} | ||
+ | {{ $my_var = true }} | ||
+ | {{- end }} | ||
+ | {{- end -}} | ||
+ | |||
+ | {{- if $my_var }} | ||
+ | manifest: " | ||
+ | var_before: {{ $my_var }} | ||
+ | {{- end -}} | ||
</ | </ | ||
</ | </ | ||
Строка 231: | Строка 257: | ||
:!: Знак $ - операторы " | :!: Знак $ - операторы " | ||
</ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code yaml> | ||
+ | Values: | ||
+ | pizzaToppings: | ||
+ | - mushrooms | ||
+ | - cheese | ||
+ | - peppers | ||
+ | - onions | ||
+ | - pineapple | ||
+ | |||
+ | Temlate: | ||
+ | toppings: |- | ||
+ | {{- range .Values.pizzaToppings }} | ||
+ | - {{ . | title | quote }} | ||
+ | {{- end }} | ||
+ | </ | ||
+ | |||
+ | |||
+ | Цикл по кол-ву указанному в переменной, | ||
+ | <code yaml> | ||
+ | {{- range $index, $count := until (int .Values.jpa.dataSources.count) }} | ||
+ | db_{{ $index }}: | ||
+ | url: {{ index $.Values.jpa.dataSources.url $index }} | ||
+ | username: {{ index $.Values.jpa.dataSources.username $index }} | ||
+ | name: {{ index $.Values.jpa.dataSources.name $index }} | ||
+ | description: | ||
+ | {{- end }} | ||
+ | </ | ||
+ | |||
+ | |||
+ | Еще примеры циклов - перечень указанных значений (tuple) | ||
+ | <code yaml> | ||
+ | sizes: |- | ||
+ | {{- range tuple " | ||
+ | - {{ . }} | ||
+ | {{- end }} | ||
+ | </ | ||
+ | |||
+ | |||
+ | Цикл по словарю | ||
+ | <code yaml> | ||
+ | toppings: |- | ||
+ | {{- range $index, $topping := .Values.pizzaToppings }} | ||
+ | {{ $index }}: {{ $topping }} | ||
+ | {{- end }} | ||
+ | </ | ||
+ | |||
+ | |||
+ | Цикл по списку плюс числовой индекс | ||
+ | <code yaml> | ||
+ | Values: | ||
+ | ssl: | ||
+ | sslcert_keyname: | ||
+ | ----- | ||
+ | Templ: | ||
+ | {{- range $index, $item := .Values.back_conf.app.jpa.dataSources.ssl.sslcert_keyname | ||
+ | {{ . }} | ||
+ | {{ $index }} | ||
+ | {{ $item }} | ||
+ | ############### | ||
+ | {{- end }} | ||
+ | ------ | ||
+ | Result: | ||
+ | cert1 | ||
+ | 0 | ||
+ | cert1 | ||
+ | ############### | ||
+ | cert2 | ||
+ | 1 | ||
+ | cert2 | ||
+ | ############### | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
=== Шаблонизация === | === Шаблонизация === | ||
- | :!: Если файл yaml то все должно быть четко yaml, иначе шаблонизатор падает\\ | + | ★ Если файл yaml то все должно быть четко yaml, иначе шаблонизатор падает\\ |
прям душнила .......\\ | прям душнила .......\\ | ||
- | :!: " | + | ★ " |
**helm template . --debug**\\ | **helm template . --debug**\\ | ||
- | |||
< | < | ||
< | < | ||
- | |||
<code yaml> | <code yaml> | ||
# Values | # Values | ||
Строка 271: | Строка 374: | ||
Цикл при несуществующей переменной тоже нормально отрабатывает\\ | Цикл при несуществующей переменной тоже нормально отрабатывает\\ | ||
</ | </ | ||
+ | |||
Строка 284: | Строка 388: | ||
{{- end }} | {{- end }} | ||
</ | </ | ||
+ | |||
Строка 296: | Строка 401: | ||
service: test | service: test | ||
</ | </ | ||
- | |||
Шаблон | Шаблон | ||
Строка 311: | Строка 415: | ||
config_base64.json: | config_base64.json: | ||
{{ .Files.Get " | {{ .Files.Get " | ||
+ | </ | ||
+ | Специально для манифестов\\ | ||
+ | Эти функции сами подставляются в формате " | ||
+ | <code yaml> | ||
+ | apiVersion: v1 | ||
+ | kind: ConfigMap | ||
+ | metadata: | ||
+ | name: conf | ||
+ | data: | ||
+ | {{ (.Files.Glob " | ||
+ | --- | ||
+ | apiVersion: v1 | ||
+ | kind: Secret | ||
+ | metadata: | ||
+ | name: very-secret | ||
+ | type: Opaque | ||
+ | data: | ||
+ | {{ (.Files.Glob " | ||
+ | </ | ||
+ | |||
+ | Проверка существования файла | ||
+ | <code yaml> | ||
+ | {{ $res := .Files.Glob " | ||
+ | {{- if $res }} | ||
+ | apiVersion: v1 | ||
+ | kind: Secret | ||
+ | type: Opaque | ||
+ | metadata: | ||
+ | name: my-secrets | ||
+ | labels: | ||
+ | app: my-app | ||
+ | data: | ||
+ | {{ ($res).AsSecrets | indent 2 }} | ||
+ | {{ end }} | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | ★ Область видимости, | ||
+ | ★ ": | ||
+ | |||
+ | |||
+ | <code bash> | ||
+ | # Объявили переменную | ||
+ | {{ $my_var := " | ||
+ | port1: {{ $my_var }} | ||
+ | |||
+ | # Присвоили новое значение | ||
+ | {{- $my_var = " | ||
+ | port2: {{ $my_var }} | ||
+ | |||
+ | # Внутри блока (цикла) присвоили новое значение | ||
+ | {{ range $svc := .Values.list_sys_services }} | ||
+ | {{ $my_var = " | ||
+ | var_in_range_after: | ||
+ | | ||
+ | # Если использовать := то будет новая, локальная переменная, | ||
+ | {{ $my_var = " | ||
+ | # здесь уже применяется локальная | ||
+ | var_in_range_after: | ||
+ | | ||
+ | {{- end }} | ||
+ | |||
+ | # здесь глобальная, | ||
+ | var_after_range: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Условие, | ||
+ | <code yaml> | ||
+ | drink: {{ .Values.favorite.drink | default " | ||
+ | food: {{ .Values.favorite.food | upper | quote }} | ||
+ | {{- if eq .Values.favorite.drink " | ||
+ | mug: " | ||
+ | {{- end }} | ||
+ | </ | ||
+ | |||
+ | |||
+ | Оператор With | ||
+ | <code yaml> | ||
+ | Values: | ||
+ | favorite: | ||
+ | drink: coffee | ||
+ | food: pizza | ||
+ | ---------- | ||
+ | Temlate: | ||
+ | myvalue: "Hello World" | ||
+ | {{- with .Values.favorite }} | ||
+ | drink: {{ .drink | default " | ||
+ | food: {{ .food | upper | quote }} | ||
+ | {{- end }} | ||
+ | </ | ||
+ | |||
+ | |||
+ | Приведение типа переменной | ||
+ | <code yaml> | ||
+ | {{- range $index, $count := until (int .Values.jpa.dataSources.count) }} | ||
+ | </ | ||
+ | |||
+ | |||
+ | Арифметика\\ | ||
+ | addf, subf, mulf, divf\\ | ||
+ | <code yaml> | ||
+ | minAvailable: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | until\\ | ||
+ | Функция until создает диапазон целых чисел\\ | ||
+ | <code yaml> | ||
+ | # [0, 1, 2, 3, 4] | ||
+ | range $i, $e := until 5 | ||
+ | </ | ||
+ | |||
+ | |||
+ | seq\\ | ||
+ | Работает аналогично команде bash seq.\\ | ||
+ | Параметр 1 (end) - генерирует все счетные числа от 1 до end включительно.\\ | ||
+ | Параметр 2 (start, end) - генерирует все счетные числа от start до end включительно, | ||
+ | 3 параметра (start, step, end) - будут сгенерированы все счетные целые числа от начала до конца, включая пошаговое увеличение или уменьшение.\\ | ||
+ | <code yaml> | ||
+ | </ | ||
+ | |||
+ | |||
+ | len\\ | ||
+ | Длинна строки либо списка\\ | ||
+ | <code yaml> | ||
+ | {{ len .Values.jpa.dataSources.url }} | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code yaml> | ||
+ | # Конкатенация (дополнение) списков | ||
+ | {{ $list_ports = concat $list_ports (list ($item.port | default 5432)) }} | ||
+ | {{ $list_ports = append $list_ports ($item.port | default 5432) }} | ||
+ | |||
+ | # Формирование списка из словаря в цикле, затем удление дубликатов | ||
+ | {{ $list_ports := list }} | ||
+ | {{- range $index, $item := .Values.egress_route.postgresql }} | ||
+ | {{- $list_ports = append $list_ports ($item.port | default 5432) }} | ||
+ | {{- end }} | ||
+ | | ||
+ | |||
+ | # вариант со словарем | ||
+ | {{- $used_port := dict }} | ||
+ | {{- range $index, $item := .Values.egress_route.postgresql }} | ||
+ | {{- $var_port := (($item.port | default 5432) | toString) }} | ||
+ | {{- if not (hasKey $used_port $var_port) }} | ||
+ | port: {{ $item.port }} | ||
+ | {{- $_ := set $used_port $var_port $item.port }} | ||
+ | {{- end }} | ||
+ | {{- end }} | ||
+ | </ | ||
+ | </ | ||