Ответ
Kustomize — это декларативный инструмент для настройки и управления Kubernetes-манифестами, встроенный в kubectl (начиная с версии 1.14). Его философия — не шаблонизировать YAML, а применять к базовым (base) манифестам серию наложений (overlays) для разных окружений (dev, staging, prod).
Основная концепция: У вас есть каталог с базовыми манифестами (base/) и каталоги-наследники (overlays/dev/, overlays/prod/), каждый со своим файлом kustomization.yaml. Этот файл описывает, как модифицировать базовые ресурсы.
Пример структуры проекта:
my-app/
├── base/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml # Указывает resources: [deployment.yaml, service.yaml]
└── overlays/
├── dev/
│ ├── kustomization.yaml # Указывает bases: [../../base] и patches, например, replicas: 1
│ └── configmap-patch.yaml
└── prod/
├── kustomization.yaml # Указывает bases: [../../base], replicas: 3, добавляет HPA
└── ingress.yaml
Что можно делать в kustomization.yaml:
resources: Включать другие манифесты.patchesStrategicMerge/patchesJson6902: Применять патчи для изменения конкретных полей (например, количества реплик, образа контейнера).images: Глобально заменять теги образов контейнеров.configMapGenerator/secretGenerator: Динамически генерировать ConfigMaps и Secrets из файлов или литералов.namespace: Устанавливать namespace для всех ресурсов.
Пример kustomization.yaml для overlays/prod:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
namespace: production
replicas:
- name: my-app-deployment
count: 5
images:
- name: my-registry/app
newTag: v2.1.0-prod
patchesStrategicMerge:
- hpa-patch.yaml
configMapGenerator:
- name: app-config
files:
- config/prod.properties
Применение конфигурации:
# Просмотр сгенерированных манифестов
kubectl kustomize overlays/prod/
# Непосредственное применение
kubectl apply -k overlays/prod/
Плюсы для DevOps: Kustomize идеально вписывается в GitOps-практики (например, с ArgoCD). Конфигурации хранятся в Git, изменения прозрачны (просто diff YAML), нет зависимостей в виде внешних чартов или шаблонных движков. Это делает его предсказуемым и простым для аудита.