Kustomize: работа с overlays, bases, patches. | Блог slurm.io
2026-02-19 17:05 Diff

DevOps-инженерам и разработчикам, работающим с Kubernetes, рано или поздно приходится сталкиваться с задачей управления конфигурациями. Чем масштабнее проект — тем важнее иметь инструмент, который поможет поддерживать порядок в манифестах. Именно для этого появился Kustomize — простой, но мощный способ кастомизировать Kubernetes-ресурсы без шаблонов и копипасты.

Работать с Kubernetes YAML-файлами вручную — всё равно что собирать мебель без инструкции. А если у вас не одна среда, а три (dev, stage, prod)? Всё усложняется. Kustomize предлагает оптимальное решение: вы создаёте базовые конфигурации (bases), а затем поверх них накладываете оверлеи (overlays) — изменения под конкретные окружения.

Система работает напрямую с YAML, без сторонних DSL или шаблонных языков, вроде Helm. Это делает Kustomize удобным для понимания, а его структуру — предсказуемой. С ним не нужно изобретать велосипеды: всё решается на уровне простых файлов и каталогов.

Kustomize легко встраивается в стандартный DevOps-процесс. Можно запускать kustomize build или kubectl kustomize, чтобы собрать итоговые манифесты. Он совместим с GitOps-подходом, хорошо дружит с Argo CD, Flux и другими CI/CD-инструментами.

Сегодня Kustomize входит в состав kubectl, что делает его доступным из коробки. Поэтому если вы ищете способ организовать конфигурации без боли и хардкода — это ваш шанс.

Дальше расскажем, как всё устроено под капотом: что такое базы, оверлеи и патчи, как их настроить и использовать на практике.

Проверьте свои знания по Kubernetes - пройдите тест!

Kustomize — это инструмент для декларативной кастомизации Kubernetes-манифестов. Он позволяет не редактировать исходные YAML-файлы, а наслаивать поверх них изменения с помощью патчей и параметров, организованных в структуру директорий. Его главная цель — упростить управление конфигурациями без шаблонов и повторения кода.

Kustomize работает по принципу баз и оверлеев. У вас есть базовая конфигурация, которая описывает универсальные настройки, и есть оверлеи — надстройки для разных окружений. Вместо того чтобы копировать файлы, вы описываете различия, и инструмент собирает итоговый манифест. Это снижает дублирование, улучшает читаемость и масштабируемость.

Пример базового kustomization.yaml:

resources:
- deployment.yaml
- service.yaml

А вот пример простого оверлея:

bases:

- ../../base
patchesStrategicMerge:
- patch-deployment.yaml
namePrefix: dev-

Именно это и делает kustomize build мощным. Вы запускаете команду, и получаете итоговые манифесты с нужными вам изменениями:

kustomize build overlays/dev

Или через kubectl:

kubectl kustomize overlays/dev | kubectl apply -f -

В отличие от Helm, где используется шаблонизация, Kustomize не требует шаблонов. Все изменения происходят в виде декларативных YAML-файлов. Это повышает прозрачность и снижает риск ошибок при обновлениях.

Под капотом Kustomize работает с различными типами патчей:

Strategic merge patch — удобен для модификации ресурсов, таких как Deployment.
JSON6902 patch — пригодится, если вам нужно точно изменить структуру.

Replacement transformers — для переиспользования значений между файлами.
Kustomize также поддерживает генерацию ConfigMap и Secret на лету:
configMapGenerator:

- name: app-config
literals:
- ENV=production

Эта гибкость делает инструмент полезным как на этапе разработки, так и в CI/CD пайплайнах. Его легко подключить к GitOps-решениям — например, Argo CD умеет «читать» kustomize-директории без дополнительной настройки.