KubernetesMiddleSystem design

Helm vs Kustomize — что выбираешь и почему?

Helm — package manager с templates, values и release lifecycle. Kustomize — declarative overlay/patch без templating, встроенный в kubectl. Выбор зависит от packaging, reuse и сложности вариантов окружений.

Суть

Helm и Kustomize решают похожую боль — управление Kubernetes manifests, но философия разная. Helm генерирует YAML из chart templates и values, хранит release state и хорошо подходит для распространения приложений как пакетов. Kustomize берет обычный YAML и применяет overlays, patches, image transforms и generators без template language. Поэтому Helm сильнее для packaged third-party apps, а Kustomize часто проще для собственных manifests с несколькими окружениями.

Как работает

Helm chart содержит templates, values.yaml, Chart.yaml и может иметь dependencies. Команда helm install/upgrade создает release и хранит историю, rollback и hooks. Минус — templates могут стать сложной программой внутри YAML. Kustomize использует kustomization.yaml: bases/resources, patches, configMapGenerator, secretGenerator, images, labels. kubectl apply -k умеет применять kustomization напрямую. Минус — для сложной параметризации patches могут стать громоздкими. В GitOps часто встречается гибрид: Helm chart как source, Kustomize overlay сверху.

Пример

кода

helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx -n ingress --create-namespace
kubectl apply -k overlays/prod
kubectl kustomize overlays/prod

Подводные камни

  • Выбирать Helm только потому, что он популярнее. Для простых внутренних манифестов Kustomize может быть прозрачнее.
  • Превращать Helm templates в нечитаемую логику. Это ухудшает review и diff.
  • Хранить секреты в values.yaml без отдельной secret strategy.

Что отличает сильный ответ

Хороший ответ не должен быть религиозным. Для third-party chart обычно Helm. Для base плюс dev/stage/prod overlays — Kustomize. Для платформы важно, как инструмент интегрируется с GitOps, policy, diff, secret management и ownership команд.

Common mistakes

  • Называть Kustomize package manager
  • Не знать helm release lifecycle
  • Игнорировать GitOps diff и секреты

What the interviewer is testing

  • Сравнивает подходы
  • Приводит use cases
  • Понимает trade-offs

Sources

Related topics