3.4.3 · блок 3
Автор chart: templates, helpers, lint
Автор chart: templates, helpers, lint
Зачем это нужно
Практикум модуля 3.4: свой chart для inference с upgrade/rollback. Platform team и зрелые ML-команды авторят charts: переиспользуемые шаблоны Deployment/Service/HPA, единые labels, безопасные defaults. Плохой chart генерирует невалидный YAML, дублирует labels или хардкодит namespace — ломает GitOps и review.
Вы уже потребляете values (3.4.2); здесь — как устроен chart изнутри.
Основные идеи
Структура chart.
scorer/
Chart.yaml # name, version, appVersion
values.yaml # defaults
templates/
deployment.yaml
service.yaml
hpa.yaml
_helpers.tpl # named templates
NOTES.txt # post-install hints
.helmignore
Chart.yaml. version — версия chart (semver); appVersion — версия приложения (информативно). При изменении templates bump version.
Go templates. {{ .Values.replicaCount }}, условия, циклы:
{{- if .Values.autoscaling.enabled }}
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
...
{{- end }}
Helpers (_helpers.tpl). DRY для labels и имён:
{{- define "scorer.fullname" -}}
{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 | trimSuffix "-" }}
{{- end }}
В Deployment: name: {{ include "scorer.fullname" . }}.
required и default.
replicas: {{ .Values.replicaCount | default 2 }}
image: {{ required "image.repository is required" .Values.image.repository }}
Fail fast при рендере, если забыли critical value.
helm lint. Проверка Chart.yaml, templates, values:
helm lint ./charts/scorer
helm lint ./charts/scorer -f values-prod.yaml
В Jenkins — обязательный stage перед merge.
helm template / dry-run.
helm template test-release ./charts/scorer -f values.yaml --debug
--debug показывает rendered YAML при ошибке template.
Tests (optional). templates/tests/test-connection.yaml — Pod с helm test hook после install.
Best practices (кратко). Имена через helpers; labels app.kubernetes.io/name; не хардкодить namespace в metadata (использовать {{ .Release.Namespace }}); документировать values в values.yaml комментариями; sensitive data — через Secret template, не plain values в Git.
Зависимости. Chart.yaml:
dependencies:
- name: redis
version: "17.x.x"
repository: https://charts.example.com
helm dependency update — vendor subcharts в charts/.
Как это выглядит на практике
Chart ml-inference для команды:
values.yaml:image,replicaCount,resources,autoscaling,model.mountPath.- Templates: Deployment с probes, Service, optional HPA, ConfigMap для non-secret config.
_helpers.tpl: standard labels для Prometheus scrape (блок 5).
Jenkins pipeline для автора:
1. helm lint charts/scorer
2. helm template ... | kubeconform (если доступен)
3. On tag — helm package + push OCI oci://registry/charts
MLE меняет templates при добавлении sidecar (metrics exporter); MLE/Platform меняют defaults в values.yaml.
Типичная ошибка: whitespace в YAML после template — используйте {{- trim markers.
Практикум: chart для inference + helm upgrade v2 (новый env) + helm rollback v1.
Что сделать после занятия
- [ ] Сгенерируйте skeleton:
helm create scorerи упростите до Deployment + Service + HPA. - [ ] Вынесите labels в
_helpers.tplи используйте в каждом template. - [ ] Добавьте условный HPA (
if .Values.autoscaling.enabled) и проверьтеhelm lint+helm templateдля enabled true/false.