Рано или поздно кто-то забудет. Конечно, это случилось.
Команда копипастила конфигурационные файлы 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 или микс? Или что-то еще?
