
Привет, Хабр! ?
Если вы когда-либо сталкивались с вызовами управления множественными и сложными Kubernetes конфигурациями, то Kustomize — это то, что может очень круто упростить вашу жизнь.
Чем больше масштаб работы Kubernetes, тем более витиеватыми становятся конфигурации. И здесь очень помогает Kustomize, он позволяет "конфигурировать конфигурации", управлять сложностью и делать процесс более понятным.
База
Ресурсы
Ресурсы – это YAML-файлы, которые описывают объекты Kubernetes, такие как Deployments, Services, ConfigMaps и т.д. Они составляют основную часть для работы kustomize.
Ресурсы обычно организованы в файловой структуре проекта. В целом их можно разделить на папки и подпапки, организуя структуру таким образом, чтобы она соответствовала каким либо потребностям
Например, может быть папка base
, содержащая базовые конфигурации для всех сред, и папки overlays
, в которых находятся специфические настройки для dev, staging и prod сред.
Каждый ресурс определяется в отдельном YAML файле. Эти файлы содержат все необходимые настройки объекта.
Допустим, есть файл deployment.yaml
, который описывает Deployment приложения. В этом файле определяются такие параметры, как количество реплик, образ контейнера, порты и прочие настройки, специфичные для деплоймента.
Чтобы работать с этими ресурсами в Kustomize, нужен kustomization.yaml
файл. В этом файле указывается какие ресурсы должны быть загружены и как они должны быть модифицирован генераторов:
ConfigMapGenerator и SecretGenerator - два наиболее часто используемых генератора. Позволяют создавать ConfigMaps и Secrets из файлов, директорий или литералов.
Custom Generators также позволяет создавать собственные генераторы, что открывает двери для еще большей гибкости и адаптивности. Вы можете написать сценарий или программу, которая генерирует нужные ресурсы на основе ваших уникальных требований.
Для использования генератора, нужно указать его в файле kustomization.yaml
. Тут определеятся тип генератора и его входные данные. Kustomize затем автоматически обработает эти инструкции и сгенерирует соответствующие ресурсы.
Работа с Kustomize
Для нужен kubectl
, Kustomize работает в тандеме с kubectl
.
Способы установки:
Через kubectl (начиная с версии 1.14): если у вас установлен Kubernetes 1.14 или выше, у вас уже есть Kustomize! Он встроен прямо в
kubectl
.Через Homebrew (для macOS): если вы используете ОС мака, просто запустите
brew install kustomize
.Можно также скачать бинарный файл Kustomize с GitHub. Для этого перейдите на релизы Kustomize, выберите нужную версию и скачайте соответствующий вашей ОС файл.
Создание базовой структуры
Создаем директорию для конфигураций: например, mkdir ~/kustomize/base
.
В папке base
создаются базовые YAML-файлы для Kubernetes, например, deployment.yaml
и service.yaml
. Файлики будут описывать приложение и сервисы, которые оно использует.
deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app-image
ports:
- containerPort: 80
Пример service.yaml
:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
В той же папке base
создаем файл kustomization.yaml
. Здесь указываем какие ресурсы будут использоваться, а также добавляем ссылки на YAML-файлы, например:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
# ConfigMap
configMapGenerator:
- name: my-app-config
files:
- configs/config.properties
# секреты из литераллов
secretGenerator:
- name: my-app-secret
literals:
- password=supersecret
patchesStrategicMerge:
- patch.yaml
commonLabels:
app: my-app
Можно запустить kustomize build ~/kustomize/base
для просмотра сгенерированной конфигурации. Если все выглядит ок, можно применить эту конфигурацию в Kubernetes, используя kubectl apply -k ~/kustomize/base
.
Overlays
Overlays позволяют модифицировать и дополнять базовую конфигурацию для разных сред
Структура директорий
base
: Здесь хранится основная конфигурация.
overlays
: В этой директории находятся поддиректории для каждой среды (например, dev
, staging
, production
).
Создание Overlays
В каждой поддиректории среды (dev
, staging
, production
) создается свой собственный файл kustomization.yaml
. В каждом kustomization.yaml
указываются пути к ресурсам в base
и добавляются специфические для среды изменения или ресурсы.
Пример overlays/dev/kustomization.yaml
:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patchesStrategicMerge:
- dev_patch.yaml
Чтобы применить конфигурацию для определенной среды, можно юзать команду kubectl apply -k overlays/dev/
, тут для dev среды.
Patches в Kustomize
Patches позволяют изменять или дополнять ресурсы, определенные в base
или overlays
.
Создаем файлы с патчами для каждой среды, например, dev_patch.yaml
, staging_patch.yaml
. В этих файлах определяются изменения, которые нужно внести в ресурсы.
Пример dev_patch.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
С Kustomize можно легко адаптировать конфигурацию приложения под разные окружения.
Про практические инструменты Kubernetes подробно рассказывают эксперты из OTUS в рамках онлайн-курсов. Например, уже скоро пройдут бесплатные уроки про архитектуру решений на основе Kubernetes и Service mesh. Регистрация доступна всем желающим.