Что такое Kustomize?

«Что такое Kustomize?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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), нет зависимостей в виде внешних чартов или шаблонных движков. Это делает его предсказуемым и простым для аудита.