Инструменты пользователя

Инструменты сайта


k8s:helm

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
k8s:helm [2024/12/02 10:23]
admin
k8s:helm [2025/04/09 07:52] (текущий)
admin
Строка 1: Строка 1:
 ====== Helm Charts ====== ====== Helm Charts ======
- 
  
 [[https://habr.com/ru/companies/otus/articles/790710/|habr]]\\ [[https://habr.com/ru/companies/otus/articles/790710/|habr]]\\
Строка 48: Строка 47:
  
 ==== To use ==== ==== To use ====
 +
 +[[https://helm.sh/docs/chart_template_guide|Офф дока]]\\
  
 <details> <details>
Строка 193: Строка 194:
 <code bash> <code bash>
 helm install --dry-run --set certificateSecretStore.enabled=false test-release ./helm-chart helm install --dry-run --set certificateSecretStore.enabled=false test-release ./helm-chart
 +</code>
 +
 +
 +
 +Пример с 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: "exist"
 +var_before: {{ $my_var }}
 +{{- end -}}
 </code> </code>
 </details> </details>
Строка 231: Строка 257:
 :!: Знак $ - операторы "range" и "with" создают свою область видимости (точка указывает на текущую область). Чтобы получить значения из "values.yaml" нужно задать корневую область видимости, что и делает этот параметр\\  :!: Знак $ - операторы "range" и "with" создают свою область видимости (точка указывает на текущую область). Чтобы получить значения из "values.yaml" нужно задать корневую область видимости, что и делает этот параметр\\ 
 </details> </details>
 +
 +
 +
 +<details>
 +<summary>:!: Циклы</summary>
 +<code yaml>
 +Values:
 +pizzaToppings:
 +  - mushrooms
 +  - cheese
 +  - peppers
 +  - onions
 +  - pineapple
 +
 +Temlate:
 +  toppings: |-
 +    {{- range .Values.pizzaToppings }}
 +    - {{ . | title | quote }}
 +    {{- end }}
 +</code>
 +
 +
 +Цикл по кол-ву указанному в переменной, конкатенация со строкой, приведение типа плюс обращение к элементу списка по индексу
 +<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: {{ index $.Values.jpa.dataSources.description $index }}
 +      {{- end }}
 +</code>
 +
 +
 +Еще примеры циклов - перечень указанных значений (tuple)
 +<code yaml>
 +  sizes: |-
 +    {{- range tuple "small" "medium" "large" }}
 +    - {{ . }}
 +    {{- end }}
 +</code>
 +
 +
 +Цикл по словарю
 +<code yaml>
 +  toppings: |-
 +    {{- range $index, $topping := .Values.pizzaToppings }}
 +      {{ $index }}: {{ $topping }}
 +    {{- end }}  
 +</code>
 +
 +
 +Цикл по списку плюс числовой индекс
 +<code yaml>
 +Values:
 +ssl:
 +  sslcert_keyname: ["cert1", "cert2", "cert3"]
 +-----
 +Templ:
 +{{- range $index, $item := .Values.back_conf.app.jpa.dataSources.ssl.sslcert_keyname  }}
 +  {{ . }}
 +  {{ $index }}
 +  {{ $item }}
 +  ###############
 +{{- end }}
 +------
 +Result:
 +  cert1
 +  0
 +  cert1
 +  ###############
 +  cert2
 +  1
 +  cert2
 +  ###############
 +</code>
 +</details>
 +
 +
  
  
 === Шаблонизация === === Шаблонизация ===
-:!: Если файл yaml то все должно быть четко yaml, иначе шаблонизатор падает\\+★ Если файл yaml то все должно быть четко yaml, иначе шаблонизатор падает\\
 прям душнила .......\\ прям душнила .......\\
-:!: "удалятры" (-) удаляют пустые строки\\+★ "удалятры" (-) удаляют пустые строки\\
  
 **helm template . --debug**\\ **helm template . --debug**\\
- 
 <details> <details>
 <summary>:!: Валидация переменных при шаблонизации </summary> <summary>:!: Валидация переменных при шаблонизации </summary>
- 
 <code yaml> <code yaml>
 # Values # Values
Строка 271: Строка 374:
 Цикл при несуществующей переменной тоже нормально отрабатывает\\ Цикл при несуществующей переменной тоже нормально отрабатывает\\
 </details> </details>
 +
  
  
Строка 284: Строка 388:
 {{- end }} {{- end }}
 </code> </code>
 +
  
  
Строка 296: Строка 401:
 service: test service: test
 </code> </code>
- 
  
 Шаблон Шаблон
Строка 311: Строка 415:
   config_base64.json: |-   config_base64.json: |-
     {{ .Files.Get "my-file.json" | indent 4 | b64enc }}     {{ .Files.Get "my-file.json" | indent 4 | b64enc }}
- 
 </code> </code>
  
Строка 331: Строка 434:
 data: data:
 {{ (.Files.Glob "bar/*").AsSecrets | indent 2 }} {{ (.Files.Glob "bar/*").AsSecrets | indent 2 }}
 +</code>
 +
 +Проверка существования файла
 +<code yaml>
 +{{ $res := .Files.Glob "input_files/resources.zip" }}
 +{{- if $res }}
 +apiVersion: v1
 +kind: Secret
 +type: Opaque
 +metadata:
 +  name: my-secrets
 +  labels:
 +    app: my-app
 +data:
 +{{ ($res).AsSecrets | indent 2 }}
 +{{ end }}
 </code> </code>
 </details> </details>
  
  
 +
 +<details>
 +<summary>:!: Еще про переменные </summary>
 +★ Область видимости, если объявлена в блоке, будет доступна только в блоке, глобальные так же доступны в блоке, имена могут пересекаться\\
 +★ ":=" объявляет новую переменную, "=" присваивает значение существующей\\
 +
 +
 +<code bash>
 +# Объявили переменную
 +{{ $my_var := "first" }}
 +port1: {{ $my_var }}
 +
 +# Присвоили новое значение
 +{{- $my_var = "second" }}
 +port2: {{ $my_var }}
 +
 +# Внутри блока (цикла) присвоили новое значение
 +{{ range $svc := .Values.list_sys_services }}
 +  {{ $my_var = "three" }}
 +  var_in_range_after: {{ $my_var }}
 +  
 +  # Если использовать := то будет новая, локальная переменная, имя может пересекаться с глобальной
 +  {{ $my_var = "this_is_local" }}
 +  # здесь уже применяется локальная
 +  var_in_range_after: {{ $my_var }}
 +  
 +{{- end }}
 +
 +# здесь глобальная, с обновленным значением, "three"
 +var_after_range: {{ $my_var }}
 +</code>
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: Примеры в шаблонизации</summary>
 +Условие, дефолтное значение, кавычки
 +<code yaml>
 +  drink: {{ .Values.favorite.drink | default "tea" | quote }}
 +  food: {{ .Values.favorite.food | upper | quote }}
 +  {{- if eq .Values.favorite.drink "coffee" }}
 +  mug: "true"
 +  {{- end }}
 +</code>
 +
 +
 +Оператор With
 +<code yaml>
 +Values:
 +favorite:
 +  drink: coffee
 +  food: pizza
 +----------
 +Temlate:
 +  myvalue: "Hello World"
 +  {{- with .Values.favorite }}
 +  drink: {{ .drink | default "tea" | quote }}
 +  food: {{ .food | upper | quote }}
 +  {{- end }}
 +</code>
 +
 +
 +Приведение типа переменной
 +<code yaml>
 +{{- range $index, $count := until (int .Values.jpa.dataSources.count) }}
 +</code>
 +
 +
 +Арифметика\\
 +addf, subf, mulf, divf\\
 +<code yaml>
 +minAvailable: {{ mulf .Values.autoscaling.minReplicas 0.75 }}
 +</code>
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: Работа со списками</summary>
 +until\\
 +Функция until создает диапазон целых чисел\\
 +<code yaml>
 +# [0, 1, 2, 3, 4]
 +range $i, $e := until 5
 +</code>
 +
 +
 +seq\\
 +Работает аналогично команде bash seq.\\
 +Параметр 1 (end) - генерирует все счетные числа от 1 до end включительно.\\
 +Параметр 2 (start, end) - генерирует все счетные числа от start до end включительно, увеличивая или уменьшая их на 1.\\
 +3 параметра (start, step, end) - будут сгенерированы все счетные целые числа от начала до конца, включая пошаговое увеличение или уменьшение.\\
 +<code yaml>
 +</code>
 +
 +
 +len\\
 +Длинна строки либо списка\\
 +<code yaml>
 +{{ len .Values.jpa.dataSources.url }}
 +</code>
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: Проход по списку, уникальные значения</summary>
 +<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 }}
 + result: {{ $list_ports | sortAlpha | uniq }}
 +
 + # вариант со словарем
 + {{- $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 }}
 +</code>
 +</details>
  
  
k8s/helm.1733135006.txt.gz · Последнее изменение: 2024/12/02 10:23 — admin