Что такое Helm Charts и как их используют в Kubernetes?

Ответ

Helm Charts — это пакетный менеджер для Kubernetes, который упрощает развертывание, управление и обновление приложений.

Зачем использовать Helm Charts:

  • Шаблонизация: Позволяет определять Kubernetes-ресурсы с использованием Go-шаблонов, делая конфигурации гибкими и переиспользуемыми.
  • Управление версиями: Обеспечивает версионирование приложений и их конфигураций, упрощая откаты и обновления.
  • Переиспользование: Позволяет создавать стандартные, легко развертываемые пакеты приложений.
  • Упрощение CI/CD: Интегрируется с системами непрерывной интеграции/доставки для автоматического развертывания.

Основные компоненты и операции:

  • Chart: Коллекция файлов, описывающих набор ресурсов Kubernetes для одного приложения или сервиса.
  • Templates: Файлы с Go-шаблонами (.yaml), которые генерируют манифесты Kubernetes.
  • Values: Файл values.yaml содержит конфигурационные параметры, которые передаются в шаблоны.
  • Release: Развернутый экземпляр чарта в кластере Kubernetes.
  • Зависимости: Управляются через секцию dependencies в Chart.yaml (для Helm 3+).

Пример структуры Chart:

my-chart/
  Chart.yaml          # Метаданные чарта
  values.yaml         # Значения по умолчанию
  templates/          # Шаблоны Kubernetes-манифестов
    deployment.yaml
    service.yaml
    _helpers.tpl      # Вспомогательные шаблоны

Пример установки и обновления:

# Установка чарта с пользовательскими значениями
helm install my-app ./my-chart --values custom-values.yaml

# Обновление существующего релиза
helm upgrade my-app ./my-chart --set replicaCount=3

# Откат к предыдущей версии релиза
helm rollback my-app 1

Helm активно используется в CI/CD пайплайнах (например, с GitLab CI, ArgoCD) для автоматизации развертывания приложений в Kubernetes.

Ответ 18+ 🔞

А, вот эта штука, про которую все говорят, а потом оказывается, что она нихуя не работает как надо! Ну, ладно, шучу. Helm Charts — это, по сути, такой пакетный менеджер, как apt или yum, только для твоей кубернетесовой помойки. Он нужен, чтобы не копипастить одни и те же ямлы, меняя в них только имя приложения, а то ведь с ума сойти можно.

Ну и нахуй он вообще нужен, спросишь ты?

  • Шаблонизация: Вместо того чтобы плодить сотни почти одинаковых файлов, ты пишешь один шаблон, а Helm, как хитрая жопа, подставляет в него нужные значения. Хочешь назвать приложение my-super-app? Пожалуйста. Хочешь pizdets-production? И такое можно. Всё через переменные.
  • Управление версиями: Сделал обнову, всё накрылось медным тазом? Не беда — откатился на предыдущую версию одной командой. Красота, а не жизнь.
  • Переиспользование: Написал один раз чарт для какого-нибудь nginx — и потом тыкаешь его куда угодно, меняя только порт или образ. Лень — двигатель прогресса, ёпта.
  • Для CI/CD: Чтобы твои пайплайны в GitLab или эта ArgoCD могли автоматически всё это добро раскатывать без твоего участия. В идеале, конечно. На практике всё равно придётся что-то чинить.

Из чего эта мартышлюшка состоит:

  • Chart: Это папка, в которой лежит вся хуйня, нужная для разворачивания одного приложения. По сути, архив с манифестами и настройками.
  • Templates: А вот тут и живут те самые шаблоны. Файлы с расширением .yaml, но напичканные странными конструкциями вроде {{ .Values.appName }}. Выглядит страшновато, но привыкнешь.
  • Values: Сердце и душа! Файлик values.yaml. В нём ты объявляешь: «Так, слушай сюда, у меня реплик будет две, образ вот этот, а порт — 8080». А в шаблонах эти значения и подставляются.
  • Release: Это когда ты уже въебал свой чарт в кластер. Каждый такой заезд — это релиз. У него есть имя и история.
  • Зависимости: Если твоё приложение не может жить без какой-нибудь постгресс-базы, ты можешь указать это в Chart.yaml, и Helm сам подтянет нужный чарт. Удобно, но иногда зависимости начинают вести себя как пидары шерстяные.

Выглядит это хозяйство примерно так:

my-chart/
  Chart.yaml          # Тут название, версия и прочая муть о самом чарте
  values.yaml         # Дефолтные настройки. То, что все меняют.
  templates/          # Самое интересное. Шаблоны.
    deployment.yaml   # Шаблон для деплоямента
    service.yaml      # Шаблон для сервиса
    _helpers.tpl      # Всякие вспомогательные функции, чтобы не повторяться

Ну и как этим пользоваться, спросит пытливый ум?

# Чтобы воткнуть своё творение в кластер. Указываешь имя релиза, путь к чарту и свои кастомные значения.
helm install my-app ./my-chart --values custom-values.yaml

# Обновить уже запущенное приложение. Например, увеличить количество реплик.
helm upgrade my-app ./my-chart --set replicaCount=3

# Всё поломалось? Откатывайся на стабильную версию, не стесняйся.
helm rollback my-app 1

Вот так вот, блядь. В CI/CD это всё встраивается, чтобы при пуше в мастер у тебя само всё деплоилось. Правда, иногда само оно деплоится так, что потом пол-ночи ищешь, почему сервис не видит поды. Но это уже совсем другая история, про волнение ебать и терпения ноль.