Команда из 8 человек. 12 почти одинаковых файлов. Каждое изменение копируется вручную.

Команда из 8 человек. 12 почти одинаковых файлов. Каждое изменение копируется вручную.

Рано или поздно кто-то забудет. Конечно, это случилось.


Команда копипастила конфигурационные файлы Kubernetes между dev/staging/prod. Изменили количество реплик в dev. Обновили staging. Забыли про prod.

Прод упал.


Проблема: Ручная копипаста не масштабируется. Человеческая ошибка неизбежна.

Решение: Автоматизация. Но есть три разных инструмента, и выбор не очевиден.

Короткая версия:

  • Ручное копирование = рано или поздно сломается
  • Helm = мощно, но сложно для простых задач
  • Kustomize = просто, но не для всего подходит
  • Гибрид = что используют зрелые команды

Результат после перехода: ошибки деплоя -80%, время развёртывания вдвое быстрее.


⚙️ Технические детали:

Три подхода:

Чистые манифесты = копипаста YAML-файлов на окружение. Просто вначале, кошмар в масштабе. Каждое изменение умножается на количество окружений.

Helm = пакетный менеджер (как npm для K8s). Есть базовый values.yaml (или дефолты в чарте), потом переопределяешь под окружение:

helm install app -f base-values.yaml -f dev-values.yaml --set image.tag=v1.2.3  

Мощная шаблонизация на Go templates. Отлично для готовых приложений с кучей настроек.

Kustomize = система слоёв. Базовые манифесты + патчи на окружение. Никаких шаблонов - чистые YAML-оверлеи. Что видишь, то деплоишь.

Частые косяки:

  • Чистые манифесты в проде (копипаста неизбежно разъедется)
  • Helm для всего (боль с шаблонами для простых правок)
  • Kustomize для чужого софта (300-строчные патчи = ад)
  • Не знают, что можно миксовать

Что работает:

Чистые манифесты когда:

  • Proof of concept, одно окружение
  • Всё. Серьёзно, в проде так не делайте.

Helm когда:

  • Стороннее ПО (Prometheus, базы, ingress-контроллеры)
  • Сложные приложения с множеством вариаций
  • Переиспользуемые пакеты между командами
  • Нужны откаты/обновления через lifecycle management

Kustomize когда:

  • Свои микросервисы на разных окружениях
  • Простые патчи (реплики, лимиты, домены)
  • GitOps без дебага шаблонов
  • Патчи сторонних манифестов без форков

Гибрид:

Helm для зависимостей (с values-файлами под окружения), Kustomize для своих приложений. Зрелые команды так и работают. ArgoCD поддерживает оба нативно не просто так.

Реальный пример с аудита: переход с копипасты манифестов на Helm (инфра) + Kustomize (приложения). Ошибки деплоя упали на 80%, время пайплайна сократилось вдвое.


У вас как? Только Helm, только Kustomize или микс? Или что-то еще?