DevOps и инфраструктура

Учебник Helm для начинающих

28 уроков · 8 разделов · бесплатно, без регистрации

Helm — пакетный менеджер Kubernetes, который превращает разрозненные YAML-манифесты в версионируемые, переиспользуемые пакеты-чарты. Этот глубокий курс ведёт от боли «голых» манифестов к уверенной работе с шаблонами Go templates, values и окружениями, релизами, хуками, зависимостями, тестированием, публикацией чартов и автодеплоем в CI/CD. Для тех, кто уже знаком с Kubernetes и Docker и хочет управлять приложениями в кластере профессионально.

Курс «Helm: пакетный менеджер Kubernetes» состоит из 8 разделов и 28 уроков: Зачем нужен Helm, Работа с готовыми чартами, Структура чарта и основы шаблонов, Функции, логика и DRY в шаблонах, values и несколько окружений, Жизненный цикл, хуки и зависимости, Тестирование, упаковка, секреты, Helmfile и Прод-практики, CI/CD и сравнения. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Зачем нужен Helm

    1. Боль «голых» манифестов Kubernetes

      Почему чистый YAML в Kubernetes не масштабируется: дублирование, окружения, версионирование. Какую проблему решает Helm.

    2. Что такое Helm: чарт, релиз, репозиторий

      Базовые понятия Helm: chart как пакет приложения, release как установленный экземпляр, repository как каталог чартов.

    3. Установка Helm и первый готовый чарт

      Ставим Helm CLI, проверяем helm version, добавляем репозиторий и разворачиваем первое приложение одной командой.

  2. 2 Работа с готовыми чартами

    1. Поиск и установка готовых чартов

      helm repo add/update/search и install с переопределением values: ставим PostgreSQL и nginx из публичного репозитория.

    2. upgrade, rollback и uninstall

      Меняем выпущенный релиз через helm upgrade, безопасно откатываемся через rollback и удаляем релиз через uninstall.

    3. История, ревизии и статус релиза

      helm list, helm status, helm history и helm get: как инспектировать состояние релиза и понять, что именно развёрнуто.

  3. 3 Структура чарта и основы шаблонов

    1. Анатомия чарта: из чего состоит пакет

      Структура директории чарта: Chart.yaml, values.yaml, templates/, charts/, _helpers.tpl, NOTES.txt — что за что отвечает.

    2. Chart.yaml и values.yaml подробно

      Полный разбор полей Chart.yaml (apiVersion, type, dependencies) и принципов хорошего values.yaml как контракта чарта.

    3. Введение в Go templates: первые вставки

      Синтаксис шаблонов Helm: двойные фигурные скобки, .Values, обрезка пробелов, как Helm рендерит шаблон в манифест.

    4. Встроенные объекты: Release, Chart, Values, Capabilities

      Готовые объекты контекста в шаблонах Helm: .Release, .Chart, .Values, .Capabilities, .Files и где они полезны.

  4. 4 Функции, логика и DRY в шаблонах

    1. Функции и конвейеры: default, quote, toYaml

      Функции шаблонов и оператор конвейера: default, quote, upper, toYaml — как преобразовывать значения в манифестах.

    2. indent и nindent: укрощение отступов

      Главная боль Helm — отступы YAML. Разбираем indent, nindent и почему именно из-за них падают чарты.

    3. Управляющие конструкции: if, else, with, range

      Условия if/else, изменение контекста with и циклы range в шаблонах Helm: как делать манифесты динамическими.

    4. Именованные шаблоны и _helpers.tpl

      define/template/include и DRY в Helm: выносим повторяющуюся логику имён и лейблов в _helpers.tpl.

  5. 5 values и несколько окружений

    1. Иерархия values: откуда берутся итоговые значения

      Порядок слияния значений в Helm: дефолты чарта, файлы -f, флаги --set, значения родителя для subchart. Кто кого перебивает.

    2. Переопределение значений: -f и --set на практике

      Практика переопределения values: когда файл -f, когда --set, как комбинировать и отлаживать через helm template.

    3. Несколько окружений: values-dev, values-prod

      Паттерн «один чарт, несколько файлов окружений»: структура values/, отличия dev/staging/prod, общий base.

  6. 6 Жизненный цикл, хуки и зависимости

    1. Жизненный цикл релиза и ревизии

      Полный жизненный цикл релиза Helm: install, upgrade, rollback, uninstall, как Helm считает изменения и хранит ревизии.

    2. Хуки: pre/post install, upgrade, Job-миграции

      Хуки Helm для запуска действий в нужный момент: миграции БД через pre-upgrade Job, веса, политика удаления хуков.

    3. Зависимости чарта и subcharts

      Зависимости в Chart.yaml, helm dependency update, передача values в subchart, condition и tags для включения/выключения.

  7. 7 Тестирование, упаковка, секреты, Helmfile

    1. Отладка и тестирование чарта: lint, template, test

      Три уровня проверки чарта: helm lint (статика), helm template (рендер для дебага), helm test (проверка в кластере).

    2. Упаковка и публикация: package, репозиторий, OCI

      helm package, создание репозитория с index.yaml, ChartMuseum и публикация чартов в OCI-реестр как Docker-образов.

    3. Секреты в Helm: helm-secrets, sops, внешние

      Проблема секретов в Helm: почему values не место паролям, шифрование через sops/helm-secrets и внешние секрет-сторы.

    4. Управление множеством релизов: Helmfile

      Helmfile как декларативная обёртка над Helm: один файл описывает все релизы кластера, helmfile apply, окружения и DRY.

  8. 8 Прод-практики, CI/CD и сравнения

    1. Helm в CI/CD: автоматический деплой

      Интеграция Helm в пайплайн: GitLab CI / GitHub Actions, helm upgrade --install с фиксацией версий, безопасный деплой.

    2. Паттерны и best practices

      Проверенные практики Helm: структура чарта, версионирование SemVer, иммутабельность образов, безопасные дефолты, лейблы.

    3. Типичные ошибки и их диагностика

      Каталог частых граблей Helm: отступы YAML, nindent, гонки хуков, потеря контекста, и как их быстро находить.

    4. Helm против Kustomize и операторов. Реальный пример

      Сравнение Helm с Kustomize и операторами: когда что выбрать. Финал: упаковываем веб-приложение в полноценный чарт.