Учебник Helm для начинающих
Helm — пакетный менеджер Kubernetes, который превращает разрозненные YAML-манифесты в версионируемые, переиспользуемые пакеты-чарты. Этот глубокий курс ведёт от боли «голых» манифестов к уверенной работе с шаблонами Go templates, values и окружениями, релизами, хуками, зависимостями, тестированием, публикацией чартов и автодеплоем в CI/CD. Для тех, кто уже знаком с Kubernetes и Docker и хочет управлять приложениями в кластере профессионально.
Курс «Helm: пакетный менеджер Kubernetes» состоит из 8 разделов и 28 уроков: Зачем нужен Helm, Работа с готовыми чартами, Структура чарта и основы шаблонов, Функции, логика и DRY в шаблонах, values и несколько окружений, Жизненный цикл, хуки и зависимости, Тестирование, упаковка, секреты, Helmfile и Прод-практики, CI/CD и сравнения. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Зачем нужен Helm
- Боль «голых» манифестов Kubernetes
Почему чистый YAML в Kubernetes не масштабируется: дублирование, окружения, версионирование. Какую проблему решает Helm.
- Что такое Helm: чарт, релиз, репозиторий
Базовые понятия Helm: chart как пакет приложения, release как установленный экземпляр, repository как каталог чартов.
- Установка Helm и первый готовый чарт
Ставим Helm CLI, проверяем helm version, добавляем репозиторий и разворачиваем первое приложение одной командой.
- Боль «голых» манифестов Kubernetes
2 Работа с готовыми чартами
- Поиск и установка готовых чартов
helm repo add/update/search и install с переопределением values: ставим PostgreSQL и nginx из публичного репозитория.
- upgrade, rollback и uninstall
Меняем выпущенный релиз через helm upgrade, безопасно откатываемся через rollback и удаляем релиз через uninstall.
- История, ревизии и статус релиза
helm list, helm status, helm history и helm get: как инспектировать состояние релиза и понять, что именно развёрнуто.
- Поиск и установка готовых чартов
3 Структура чарта и основы шаблонов
- Анатомия чарта: из чего состоит пакет
Структура директории чарта: Chart.yaml, values.yaml, templates/, charts/, _helpers.tpl, NOTES.txt — что за что отвечает.
- Chart.yaml и values.yaml подробно
Полный разбор полей Chart.yaml (apiVersion, type, dependencies) и принципов хорошего values.yaml как контракта чарта.
- Введение в Go templates: первые вставки
Синтаксис шаблонов Helm: двойные фигурные скобки, .Values, обрезка пробелов, как Helm рендерит шаблон в манифест.
- Встроенные объекты: Release, Chart, Values, Capabilities
Готовые объекты контекста в шаблонах Helm: .Release, .Chart, .Values, .Capabilities, .Files и где они полезны.
- Анатомия чарта: из чего состоит пакет
4 Функции, логика и DRY в шаблонах
- Функции и конвейеры: default, quote, toYaml
Функции шаблонов и оператор конвейера: default, quote, upper, toYaml — как преобразовывать значения в манифестах.
- indent и nindent: укрощение отступов
Главная боль Helm — отступы YAML. Разбираем indent, nindent и почему именно из-за них падают чарты.
- Управляющие конструкции: if, else, with, range
Условия if/else, изменение контекста with и циклы range в шаблонах Helm: как делать манифесты динамическими.
- Именованные шаблоны и _helpers.tpl
define/template/include и DRY в Helm: выносим повторяющуюся логику имён и лейблов в _helpers.tpl.
- Функции и конвейеры: default, quote, toYaml
5 values и несколько окружений
- Иерархия values: откуда берутся итоговые значения
Порядок слияния значений в Helm: дефолты чарта, файлы -f, флаги --set, значения родителя для subchart. Кто кого перебивает.
- Переопределение значений: -f и --set на практике
Практика переопределения values: когда файл -f, когда --set, как комбинировать и отлаживать через helm template.
- Несколько окружений: values-dev, values-prod
Паттерн «один чарт, несколько файлов окружений»: структура values/, отличия dev/staging/prod, общий base.
- Иерархия values: откуда берутся итоговые значения
6 Жизненный цикл, хуки и зависимости
- Жизненный цикл релиза и ревизии
Полный жизненный цикл релиза Helm: install, upgrade, rollback, uninstall, как Helm считает изменения и хранит ревизии.
- Хуки: pre/post install, upgrade, Job-миграции
Хуки Helm для запуска действий в нужный момент: миграции БД через pre-upgrade Job, веса, политика удаления хуков.
- Зависимости чарта и subcharts
Зависимости в Chart.yaml, helm dependency update, передача values в subchart, condition и tags для включения/выключения.
- Жизненный цикл релиза и ревизии
7 Тестирование, упаковка, секреты, Helmfile
- Отладка и тестирование чарта: lint, template, test
Три уровня проверки чарта: helm lint (статика), helm template (рендер для дебага), helm test (проверка в кластере).
- Упаковка и публикация: package, репозиторий, OCI
helm package, создание репозитория с index.yaml, ChartMuseum и публикация чартов в OCI-реестр как Docker-образов.
- Секреты в Helm: helm-secrets, sops, внешние
Проблема секретов в Helm: почему values не место паролям, шифрование через sops/helm-secrets и внешние секрет-сторы.
- Управление множеством релизов: Helmfile
Helmfile как декларативная обёртка над Helm: один файл описывает все релизы кластера, helmfile apply, окружения и DRY.
- Отладка и тестирование чарта: lint, template, test
8 Прод-практики, CI/CD и сравнения
- Helm в CI/CD: автоматический деплой
Интеграция Helm в пайплайн: GitLab CI / GitHub Actions, helm upgrade --install с фиксацией версий, безопасный деплой.
- Паттерны и best practices
Проверенные практики Helm: структура чарта, версионирование SemVer, иммутабельность образов, безопасные дефолты, лейблы.
- Типичные ошибки и их диагностика
Каталог частых граблей Helm: отступы YAML, nindent, гонки хуков, потеря контекста, и как их быстро находить.
- Helm против Kustomize и операторов. Реальный пример
Сравнение Helm с Kustomize и операторами: когда что выбрать. Финал: упаковываем веб-приложение в полноценный чарт.
- Helm в CI/CD: автоматический деплой