MLOps Path

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 для команды:

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.

Что сделать после занятия

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

Открыть интерактивную версию