Комментарии (1)
🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Мои знания о Helm шаблонах (Templates)
Helm шаблоны — это YAML файлы с дополнительными директориями и функциями Go template, которые позволяют динамически генерировать манифесты Kubernetes. Они расположены в директории templates/ Helm chart. Вот основные типы шаблонов и их особенности.
Основные типы шаблонов и их структура
- Базовые манифесты Kubernetes:
* `deployment.yaml` — шаблон для создания Deployment.
* `service.yaml` — шаблон для Service.
* `configmap.yaml` — шаблон для ConfigMap.
* `secret.yaml` — шаблон для Secret (часто с использованием функций `b64enc`).
* `ingress.yaml` — шаблон для Ingress.
- Специализированные шаблоны:
* `_helpers.tpl` — **ключевой файл**, содержащий общие определения шаблонов (например, `{{- define "chart.name" -}}`). Эти определения затем используются в других шаблонах через `{{ include "chart.name" . }}`.
* `NOTES.txt` — шаблон для сообщений, которые выводятся после установки chart. Это инструкции для пользователя.
* `tests/` — директория для тестовых манифестов (например, `test-connection.yaml`), которые можно запустить через `helm test`.
Примеры шаблонов с кодом
Рассмотрим пример deployment.yaml с использованием переменных и функций:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "chart.fullname" . }}
labels:
{{- include "chart.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "chart.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "chart.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.service.port }}
env:
{{- range $key, $value := .Values.env }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
И пример определения в _helpers.tpl:
{{- define "chart.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 -}}
{{- else -}}
{{- printf "%s-%s" .Chart.Name .Release.Name | trunc 63 -}}
{{- end -}}
{{- end -}}
Ключевые возможности шаблонов Helm
- Переменные и объекты: доступ к
.Values,.Chart,.Release,.Capabilities(для проверки версии Kubernetes). - Функции и pipelines: использование функций Go template (
quote,default,toYaml) и Helm (include,toYaml). Pipelines позволяют последовательно применять функции:{{ .Values.text | upper | repeat 3 }}. - Управление пробелами с помощью модификаторов пробелов:
{{-удаляет пробелы слева,-}}— справа. Это критично для чистого YAML. - Условные операторы и циклы:
{{ if .Values.enabled }} ... {{ end }},{{ range .Values.list }} ... {{ end }}. - Партинг шаблонов (subtemplate) через
{{- template "name" . }}или более современный{{- include "name" . }}, который позволяет передавать контекст.
Пример использования условий и партинг
# Пример условного создания Ingress
{{- if .Values.ingress.enabled -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "chart.fullname" . }}
spec:
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
pathType: Prefix
backend:
service:
name: {{ include "chart.fullname" . }}
port:
number: {{ .Values.service.port }}
{{- end }}
{{- end }}
{{- end }}
Практические советы по шаблонам
- Избегайте сложной логики в шаблонах. Если шаблон становится слишком сложным, возможно, стоит пересмотреть структуру
values.yamlили использовать_helpers.tpl. - Проверяйте валидность генерируемого YAML с помощью
helm template --debug, который выводит результат рендеринга и показывает ошибки. - Для секретов всегда используйте функции шифрования (
b64encдля данных, но помните, что сами шаблоны не шифруют — секреты должны управляться осторожно).
В итоге, Helm шаблоны — это мощный инструмент для создания параметризованных, повторно используемых конфигураций Kubernetes. Правильное использование _helpers.tpl, функций и управления пробелами позволяет создавать чистые, поддерживаемые и безопасные charts.