Kubernetes • 20 мая 2025 • 10 мин чтения

Основы Kustomize: overlays, bases, patches

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

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-директории без дополнительной настройки.

Получите бесплатный гайд по Kubernetes!
Знаете ли вы как работают requests/limits изнутри? Переходите в Telegram-бота и забирайте файл.

Kustomize Overlays

Оверлеи (overlays) — сердце архитектуры Kustomize. Именно они позволяют кастомизировать конфигурации под конкретные окружения: dev, stage, prod и т.д. Без необходимости дублировать YAML-файлы или создавать отдельные манифесты на каждый случай.

Структура проекта обычно выглядит так:

├── base
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml
└── overlays
├── dev
│ ├── patch-deployment.yaml
│ └── kustomization.yaml
└── prod
├── patch-deployment.yaml
└── kustomization.yaml

Base — это общее: ресурсы, одинаковые для всех окружений.
Overlays — изменения для конкретного окружения.

Пример kustomization.yaml в оверлее:

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

Оверлей может менять:

  • количество реплик,
  • переменные окружения,
  • метки (labels),
  • префиксы имён.

Пример патча:

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
template:
spec:
containers:
- name: app
image: my-image:dev

Важно: имя ресурса должно точно совпадать с базой. Иначе патч не применится.
Чтобы собрать итоговую конфигурацию для dev-среды:

kustomize build overlays/dev

Или:

kubectl kustomize overlays/dev | kubectl apply -f -

Если вы работаете с CI/CD, оверлеи особенно полезны. Вы можете держать все манифесты в одном репозитории, а при сборке передавать нужный путь к окружению. Например, в Argo CD вы просто укажете path: overlays/prod.

Также можно использовать configMapGenerator и secretGenerator прямо в оверлеях.

Это удобно для настройки переменных окружения:

configMapGenerator:
- name: env-config
literals:
- LOG_LEVEL=debug

Kustomize автоматически пересоберёт эти значения при каждом запуске build.
Такой подход позволяет DevOps-командам избежать шаблонов и управлять Kubernetes-конфигурациями централизованно, прозрачно и масштабируемо.

На курсе от Слёрм Kubernetes: База за 6 недель вы освоите основы работы с Kubernetes: c системой автоматизации развертывания, масштабирования и управления приложениями в контейнерах.

А для тех, кто уже работал с k8s или прошел Kubernetes: База, на курсе Kubernetes: Мега за 7 недель мы научим глубоким практическим навыкам управления и масштабирования контейнерных приложений с использованием Kubernetes в производственной среде!

Возможности Kustomize

Инструмент для кастомизации инфраструктуры легко адаптируется под разные нужды команды DevOps. Ниже — ключевые возможности, которые делают его особенно ценным.

1. Генерация ConfigMap и Secret

Вместо ручного создания конфигов можно автоматически генерировать их из kustomization.yaml:

configMapGenerator:
- name: app-config
literals:
- MODE=prod
secretGenerator:
- name: db-secret
literals:
- password=s3cr3t

Kustomize закодирует секреты в base64 и создаст ресурсы на лету.

2. Патчи (patches)

Существует несколько способов изменить YAML:
patchesStrategicMerge — самый популярный, подходит для Deployment, Service и других стандартных ресурсов.

patchesJson6902 — более точечный, полезен, если нужно заменить конкретное поле.

replacements — позволяет подставлять значения из одного ресурса в другой.
Пример патча по JSON6902:

patches:
- target:
version: v1
kind: Service
name: my-service
patch: |-
- op: replace
path: /spec/type
value: LoadBalancer

3. Добавление префиксов и меток

Для разграничения окружений можно настроить автоматическое добавление префиксов:

namePrefix: dev-

Или — меток и аннотаций:

commonLabels:
team: backend
commonAnnotations:
contact: devops@company.com

Это упрощает фильтрацию ресурсов в k8s и делает их легче для мониторинга.

4. Переиспользование и модульность

Kustomize поддерживает components — повторно используемые куски конфигурации. Например, логирование, метрики или ingress можно собрать как отдельные компоненты и подключать при необходимости.

Пример:

components:
- ../../components/logging

Это особенно удобно в больших проектах, где часть конфигураций одинакова для нескольких сервисов.

5. Совместимость с CI/CD и GitOps

Kustomize легко внедряется в пайплайны. Его поддерживают:

  • Argo CD (type: kustomize)
  • Flux
  • Jenkins и GitLab CI через kubectl kustomize

Можно задать параметры через environment variables, использовать разные overlay-директории, делать dry-run и тестировать конфигурации без развёртывания.

Суммарно, Kustomize решает сразу несколько задач:

  • снижает дублирование YAML-файлов,
  • повышает читаемость и повторное использование,
  • легко масштабируется под рост проекта,
  • совместим с экосистемой kubernetes и k8s deployment практиками.
Делимся с вами файлом с подробным разбором долгоживущих подключений в к8s.

Внутри - описание особенностей и ограничений, рекомендации по решению проблемы и разбор на практике с фрагментами кода.

Дарим файл по работе с долгоживущими подключениями

Заключение

Kustomize — это не просто альтернатива Helm, а фундаментальный инструмент для тех, кто хочет управлять конфигурациями Kubernetes ясно и гибко. Он делает структуру проекта прозрачной, снижает повторяемость кода и помогает соблюдать best practices в DevOps.

Если вы только начинаете путь в Kubernetes, освоение Kustomize даст прочный фундамент. Если уже работали с k8s — инструмент поможет навести порядок в YAML-хаосе и систематизировать окружения.

Kustomize особенно ценен, когда:

  • нужно адаптировать один и тот же манифест под разные среды (dev/stage/prod),
  • важна декларативность и читаемость конфигураций,
  • требуется интеграция с GitOps и CI/CD пайплайнами.

Его можно запускать отдельно (kustomize build), либо напрямую через kubectl. Он поддерживает патчи, генерацию секретов, добавление меток и префиксов, работу с компонентами. А главное — он уже встроен в kubectl, и вы можете начать прямо сейчас.

🎯 За 6 недель вы освоите основы работы с Kubernetes: с системой автоматизации развертывания, масштабирования и управления в контейнерах - начните сейчас!

Этот материал — только отправная точка. В настоящей работе DevOps-инженера важна практика, системность и готовность адаптироваться. Kustomize — инструмент, с которого удобно начать.

Статью подготовили

Редакция Слёрма
Понравилась статья? Будем рады вашему лайку и репосту — вдруг кому-то тоже пригодится:)
Оцените статью

Читайте также: