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

Качество chart и поставка: Helm, Jenkins, GitOps

Зачем это нужно

Chart, который «работает у автора» — не готов к prod. Нужны lint, review values, immutable tags образов, воспроизводимый путь commit → registry → Git → cluster. Этот урок связывает модули 3.2 (Jenkins), 3.3 (Kubernetes), 3.4 (Helm) и заходит на GitOps (Argo CD в модуле 3.7) — без дублирования UI Argo, но с понятной склейкой.

Capstone курса повторит: Helm + Jenkins + Argo + rollback при fire-drill.

Основные идеи

Quality gates для chart.

  1. helm lint — синтаксис и conventions.

  2. helm template + валидация против Kubernetes schema (kubeconform, --dry-run=server в CI с доступом к cluster).

  3. Policy checks (optional): не latest, limits memory заданы, probes обязательны.

  4. Peer review MR в Git — diff values, не только templates.

Версионирование.

  • Image tag — из Jenkins: gitSha-buildNumber, не mutable latest в prod.

  • Chart version — semver при изменении templates.

  • Release revision — Helm history в кластере; Git commit — source of truth при GitOps.

Helm + Jenkins — типовой pipeline.

Stage Действие
Test app pytest (repo приложения)
Build docker build & push → IMAGE_TAG
Chart lint helm lint deploy/chart
Render helm template release deploy/chart -f values-ci.yaml --set image.tag=$IMAGE_TAG
Publish values commit/MR в deploy-repo: prod/image.tag=$IMAGE_TAG или artifact
(GitOps) Argo CD sync (автоматически или manual approval)

Jenkins может выполнять helm upgrade в dev namespace; для prod — только обновление Git (pull request), чтобы Argo CD был единственным deployer.

Helm + Argo CD — GitOps.

  • Git repo ml-scorer-deploy: chart + environments/prod/values.yaml.

  • Argo CD Application указывает path: charts/scorer, helm.valueFiles: [../../environments/prod/values.yaml].

  • Sync diff visible в UI; rollback = revert Git commit или Argo history → Helm rollback.

  • Values overlays в Argo: несколько valueFiles или parameters — тот же порядок merge, что в CLI.

Преимущество: кластер = declared in Git; drift виден; audit trail.

Helm + Jenkins + Argo — сквозной сценарий.

  1. Developer merge PR в ml-scorer (код).

  2. Jenkins: test, build scorer:abc-99, push registry.

  3. Jenkins job (или bot) открывает MR в ml-scorer-deploy: bump image.tag: abc-99.

  4. Review + merge → Argo CD OutOfSync → Sync → rolling update в prod.

  5. Инцидент → revert MR или helm rollback / Argo Rollback → tag abc-98.

Post-deploy checks. Smoke HTTP, проверка /health, canary через Istio (модуль 3.6) — chart должен поддерживать labels/version для traffic split.

Supply chain hygiene. Scan image (Trivy) в Jenkins; pin base image digest в values; sign artifacts — advanced, но знайте направление.

Documentation. README chart: обязательные values, пример install, таблица environments overlays.

Как это выглядит на практике

Структура двух репозиториев (частый паттерн):

ml-scorer/ # код + Dockerfile + Jenkinsfile ml-scorer-deploy/ # charts/scorer + environments/*/values.yaml

values overlays:

environments/dev/values.yaml # replicaCount: 1 environments/staging/values.yaml # integration tests environments/prod/values.yaml # autoscaling, prod tags

Jenkinsfile (deploy repo) или multibranch на app repo с shared library — lint chart на каждый MR.

Fire-drill (учебный):

  1. Выкатить заведомо broken tag (fail readiness).

  2. Argo/Helm rollback.

  3. Postmortem: какой stage pipeline не поймал ошибку.

Практикум модуля: свой chart для inference + upgrade/rollback; опишите, куда встанет Argo CD в следующем модуле.

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

  • Добавьте stage helm lint в Jenkinsfile (app или deploy repo).

  • Подготовьте три values overlays и таблицу отличий dev/staging/prod.

  • Нарисуйте sequence diagram: developer → Jenkins → registry → Git → Helm/Argo → Pod.

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