Что мы на нём делаем

Сервис, работающий в Kubernetes, — это не одна сущность, а деплоймент, сервис, ingress, автоскейлер и набор секретов, которые обязаны согласовываться между собой. Helm превращает этот набор в один чарт со значениями, поэтому окружение — это values-файл, а не каталог почти одинаковых манифестов, расходящихся со временем.

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

Где он нужен

Этот сайт выкатывается именно так. В его чарте лежат деплоймент, ingress, горизонтальный автоскейлер, секреты для получения образа и секреты приложения, а CI применяет чарт после сборки и публикации образа контейнера.

Когда мы его рекомендуем

Как только окружений становится больше одного или сервисов больше одного. Именно в этот момент вручную поддерживаемые манифесты начинают расходиться, и никто уже не уверен, какому файлу соответствует какой кластер.

Для одного сервиса в одном окружении обычные манифесты в Git читаются проще, и это на один шаблонизатор для отладки меньше. Шаблоны Helm по-настоящему неудобны — чувствительный к пробелам YAML, порождаемый Go-шаблонами, — так что они должны что-то приносить. Когда деплоймент один, они не приносят.