03 · Платформа: DevOps, k8s, сеть, хранилище3.4 · Helm-чарты3.4.3средний

Автор 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:

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.

Официальные материалы