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

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


k8s:helm

Различия

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

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

Следующая версия
Предыдущая версия
k8s:helm [2024/11/28 06:27]
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>
Строка 56: Строка 57:
   * **create** - создает новый чарт с указанным именем   * **create** - создает новый чарт с указанным именем
   * **package** - упаковать каталог чарта в архив   * **package** - упаковать каталог чарта в архив
-  * **show** - показать информацию о чарте+  * **show [chart|values|all] <chart-name>** - показать информацию о чарте
   * **get** - расширенная информация о релизе   * **get** - расширенная информация о релизе
   * **verify** - верификация чарта   * **verify** - верификация чарта
Строка 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>
Строка 230: Строка 256:
  
 :!: Знак $ - операторы "range" и "with" создают свою область видимости (точка указывает на текущую область). Чтобы получить значения из "values.yaml" нужно задать корневую область видимости, что и делает этот параметр\\  :!: Знак $ - операторы "range" и "with" создают свою область видимости (точка указывает на текущую область). Чтобы получить значения из "values.yaml" нужно задать корневую область видимости, что и делает этот параметр\\ 
 +</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, иначе шаблонизатор падает\\
 +прям душнила .......\\
 +★ "удалятры" (-) удаляют пустые строки\\
 +
 +**helm template . --debug**\\
 +<details>
 +<summary>:!: Валидация переменных при шаблонизации </summary>
 +<code yaml>
 +# Values
 +my_string: "this string"
 +my_list: ["this", "list"]
 +my_empty_list: []
 +
 +# В шаблоне
 +string: {{ .Values.my_string }}
 +list: {{ .Values.my_list }}
 +empty_list: {{ .Values.my_empty_list }}
 +none_list: {{ .Values.my_none_list }}
 +
 +# Вывод
 +string: this string
 +list: [this list]
 +empty_list: []
 +none_list:
 +</code>
 +
 +В случае несуществующей переменной, в блоке IF можно дополнительно не приседать, если переменной нет то блок IF не отработает\\
 +<code yaml>
 +{{- if .Values.no_exist_var }}
 +no_exist_var: exist
 +{{ end }}
 +</code>
 +
 +Цикл при несуществующей переменной тоже нормально отрабатывает\\
 +</details>
 +
 +
 +
 +Еще пример по работе с циклом. Обращение к элементу\\
 +<code yaml>
 +{{- range $item := .Values.my_list }}
 +item: {{ $item }}
 +{{- end }}
 +
 +# Альтернатива
 +{{- range .Values.my_list }}
 +item: {{ . }}
 +{{- end }}
 +</code>
 +
 +
 +
 +<details>
 +<summary>:!: Работа с файлами </summary>
 +Вставка содержимого файла в шаблоне\\
 +
 +Переменные
 +<code yaml>
 +config_service_version: v1
 +config_service_dir: config
 +service: test
 +</code>
 +
 +Шаблон
 +<code yaml>
 +---
 +apiVersion: v1
 +kind: ConfigMap
 +metadata:
 +  name: {{ .Values.service }}-{{ .Values.config_service_version }}
 +data:
 +  config.json: |-
 +    {{ .Files.Get (printf "%s/%s-%s.json" .Values.config_service_dir .Values.service .Values.config_service_version ) | indent 4 }}
 +
 +  config_base64.json: |-
 +    {{ .Files.Get "my-file.json" | indent 4 | b64enc }}
 +</code>
 +
 +Специально для манифестов\\
 +Эти функции сами подставляются в формате "имя-файла: значение", секреты сразу кодируются\\
 +<code yaml>
 +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 }}
 +</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>
 +</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>
 +
 +
 +
 +<details>
 +<summary>:!: </summary>
 +
 +
 +<code bash>
 +</code>
 </details> </details>
  
k8s/helm.1732775271.txt.gz · Последнее изменение: 2024/11/28 06:27 — admin