Зачем это нужно
Практикум модуля 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 для автора:
helm lint charts/scorerhelm template ... | kubeconform(если доступен)On tag —
helm package+ push OCIoci://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.