Что такое Helm и Helm Charts?

Ответ

Helm — это пакетный менеджер для Kubernetes, который позволяет определять, устанавливать и обновлять даже самые сложные приложения как единое целое — «чарт» (Chart).

Helm Chart — это упакованный набор файлов, описывающих связанный набор ресурсов Kubernetes. Он содержит шаблоны, значения по умолчанию и метаданные.

Основные преимущества:

  • Шаблонизация: Позволяет параметризировать манифесты Kubernetes с помощью Go-шаблонов и файла values.yaml. Это устраняет дублирование кода.
  • Управление конфигурациями: Легко создавать разные релизы одного приложения (dev, staging, prod) с разными наборами значений.
  • Управление зависимостями: Чарт может зависеть от других чартов (например, приложение + база данных).
  • Жизненный цикл: Простые команды для установки (helm install), обновления (helm upgrade), отката (helm rollback) и удаления (helm uninstall).

Структура чарта:

my-app-chart/
├── Chart.yaml          # Метаданные чарта (имя, версия, зависимости)
├── values.yaml         # Значения параметров по умолчанию
├── templates/          # Каталог с шаблонами манифестов
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   └── _helpers.tpl   # Вспомогательные шаблоны
└── charts/             # Подчиненные чарты (зависимости)

Практический пример:

  1. Поиск чарта: helm search hub nginx
  2. Установка из репозитория: helm install my-nginx bitnami/nginx -f custom-values.yaml
  3. Создание своего чарта: helm create my-microservice
  4. Упаковка и публикация: helm package ./my-microservice && helm push my-microservice-1.0.0.tgz oci://my-registry.com/charts

Ответ 18+ 🔞

А, Helm! Ну это, блядь, такая штука, которая из кучи этих ваших yaml-манифестов для кубера делает одну красивую, завернутую в бантик, коробочку. Представь, что у тебя есть приложение — там деплоймент, сервис, ингресс, конфигмапы, овердохуища всего. Так вот, вместо того чтобы таскать эту пачку файлов и охуевать каждый раз, когда надо что-то поменять, ты это всё упаковываешь в чарт (Chart). Это как архив, но умный.

Чарт — это, по сути, папка, где лежат шаблоны твоих манифестов, настройки по умолчанию и прочая мета-хрень. Всё связанное в один пакет. Удобно, ёпта.

Зачем это всё, спросишь? Ну, преимущества-то на лицо:

  • Шаблонизация, мать её. Вместо того чтобы копипастить один и тот же манифест для дев, стейджинга и прода, ты пишешь шаблон на Go-мове. А потом подсовываешь ему разные файлики values.yaml — и он сам, хитрая жопа, подставляет нужные порты, имена и прочую хуйню. Дублирования кода — ноль ебать.
  • Конфиги на любой вкус. Захотел развернуть три копии приложения с разными настройками? Да похуй! Создал три релиза (helm install app-dev ..., helm install app-stage ...) с разными values — и сиди, радуйся. Никакой возни.
  • Зависимости. Твоё приложение сосёт сок из PostgreSQL? Можно сделать так, чтобы чарт твоего приложения автоматом тянул за собой чарт базы. Красота.
  • Жизненный цикл, как у взрослых. Всё через команды: поставил (install), обновил (upgrade), откатился, если всё накрылось медным тазом (rollback), или просто вынес всё к хуям (uninstall). Не надо вручную kubectl delete тыкать.

Из чего эта манда с ушами состоит? Смотри структуру:

my-app-chart/
├── Chart.yaml          # Тут всякая инфа о чарте: имя, версия, описание. Типа обложка.
├── values.yaml         # А это, бля, главный файл! Тут все настройки по умолчанию лежат. Как конфиг в игре.
├── templates/          # А вот это святая святых! Тут лежат шаблоны тех самых yaml'ей.
│   ├── deployment.yaml # Шаблон для деплоймента
│   ├── service.yaml    # Для сервиса
│   ├── ingress.yaml    # Для ингресса
│   └── _helpers.tpl    # А это такие вспомогательные куски кода, чтобы в шаблонах не повторяться.
└── charts/             # Папка для подчинённых чартов (тех самых зависимостей). Если они есть.

Ну и как этим пользоваться, чувак? Практика:

  1. Найти чарт в интернете: helm search hub nginx. Найдёшь кучу готового добра.
  2. Поставить найденное добро: helm install my-nginx bitnami/nginx -f custom-values.yaml. Где -f — это твой кастомный конфиг, который перебивает дефолтные настройки. Волнение ебать, когда всё встаёт.
  3. Создать свой, блядь, шедевр: helm create my-microservice. Он тебе нагенерит каркас папки со всеми этими файлами. Осталось только шаблоны подправить.
  4. Упаковать и запихнуть в реестр, чтобы другие тоже могли охуеть от твоего гения: helm package ./my-microservice && helm push my-microservice-1.0.0.tgz oci://my-registry.com/charts.

Вот и вся магия. Сначала кажется, что хуй с горы, но когда разберёшься — пиздец как удобно. Особенно когда приложений больше двух.