Если вы писали Helm-чарты, то знаете этот ритуал: на каждый Deployment, Service, ConfigMap — свой файл в templates/, набитый {{ .Values.… }} и {{- if … }}. Для трёх ресурсов терпимо. Для двадцати — это стена копипасты, где легко ошибиться в отступе и тяжело ревьюить.

HULL (Helm Uniform Layer Library) предлагает другой подход: никаких кастомных шаблонов в templates/ — все объекты описываются в values.yaml. Ниже — что это, как устроено и, честно, где у подхода границы.

Это не перевод README, а мой разбор проекта. HULL — open source под лицензией Apache-2.0, автор — vidispine . Первоисточник и документация — в репозитории.

В чём идея

HULL — это библиотечный чарт (Helm library chart): сам по себе он ничего не разворачивает, а подключается как зависимость к вашему чарту и даёт набор шаблонных функций. Ваша роль сводится к декларации объектов в values.yaml под ключом hull.objects, а HULL превращает их в валидные Kubernetes-манифесты.

Практический эффект: в templates/ лежит один статический файл hull.yaml (копируется из HULL как есть и больше не трогается). Всё остальное — данные, а не код шаблонов.

Минимальный пример

Обычный nginx-Deployment на три реплики целиком описывается так:

YAML
hull:
  config:
    general:
      rbac: false
  objects:
    deployment:
      nginx:
        staticName: true
        replicas: 3
        pod:
          containers:
            nginx:
              image:
                repository: nginx
                tag: 1.14.2
              ports:
                http:
                  containerPort: 80
Нажмите, чтобы развернуть и увидеть больше

На выходе — стандартный Deployment с автоматически проставленными Kubernetes-лейблами и метаданными. Обратите внимание: контейнеры и порты — это словари с именами (nginx, http), а не списки. Это важное отличие HULL: именованные ключи вместо массивов — их проще переопределять и мёржить между слоями values.

Что HULL даёт сверх «просто YAML»

Если бы всё сводилось к «перенесли шаблон в values», смысла было бы немного. Реальная ценность — в четырёх вещах.

1. Полный доступ к Kubernetes API. Вы не ограничены подмножеством полей, которое «завёл автор чарта». Любое свойство объекта Kubernetes доступно напрямую — HULL не прячет API за упрощённым интерфейсом.

2. Иерархическое обогащение метаданными. Лейблы и аннотации можно задавать на нескольких уровнях — глобально, на тип объекта, на группу, на конкретный инстанс — и они складываются. Не нужно вручную дублировать общий набор лейблов в каждом ресурсе.

3. Трансформации — Go-шаблоны внутри values. Иногда чистых данных мало и нужна логика. HULL позволяет встраивать шаблонные выражения прямо в значения через префиксы _HT:

Это компромисс: мощь Go-шаблонов остаётся доступной, но живёт в данных, а не в отдельных файлах.

4. Defaults и работа с ConfigMap/Secret. Через _HULL_OBJECT_TYPE_DEFAULT_ можно задать значения по умолчанию для всех объектов одного типа — меньше повторов. ConfigMap и Secret можно описывать инлайн или импортировать из внешних файлов (с автоматическим Base64), а также включать автоматическое хеширование — тогда при изменении конфига поды сами перезапустятся (частая ручная боль в обычных чартах).

Плюс — валидация по JSON Schema: подсказки в IDE и проверка манифестов против Kubernetes API ещё до деплоя.

Установка

HULL подключается как зависимость чарта, и один раз копируется статический hull.yaml в templates/ родительского чарта. Версии HULL привязаны к мажорным релизам Kubernetes (1.36, 1.35, 1.34 и т.д.) — поддерживаются три последних версии. Совместим с Helm 3 (3.1+) и Helm 4.

Честно: где границы подхода

«Уважать читателя» — это в том числе не продавать серебряную пулю. У HULL есть цена:

Когда стоит и когда нет

Стоит попробовать, если:

Скорее не стоит, если:

Итог

HULL — это не «Helm попроще», а другой способ мыслить о чартах: объект Kubernetes как данные, а не как текстовый шаблон. На парке однотипных сервисов это убирает тонну boilerplate и делает метаданные и валидацию единообразными. Но это инструмент с характером — с собственной моделью, которую надо принять целиком. Стоит завести тестовый чарт, собрать на нём пару реальных объектов и решить на практике, ложится ли подход на вашу команду.

Первоисточник, документация и примеры: github.com/vidispine/hull .

Авторские права

Автор: Vasiliy Fakunin

Ссылка: https://notes.melancholic.tech/posts/hull-helm-library/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша