⚙️
Как с помощью Kustomize упростить управление конфигурациямиKustomize — это инструмент для работы с Kubernetes-конфигурациями, который позволяет адаптировать и комбинировать файлы YAML без их дублирования.
Представьте себе, что вам нужно развернуть одно и то же приложение в нескольких средах: разработка, тестирование, продакшн. При этом настройки для каждой среды будут отличаться. С Kustomize вы можете сделать это с минимальными усилиями.
Структура проекта:
my-app/
│
├── base/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml
│
└── overlays/
├── dev/
│ ├── kustomization.yaml
│ ├── deployment-patch.yaml
│ └── service-patch.yaml
└── prod/
├── kustomization.yaml
├── deployment-patch.yaml
└── service-patch.yaml
base/: хранит общие для всех окружений файлы конфигураций — это основа, от которой будут наследоваться все остальные окружения.
overlays/: здесь лежат изменения для каждой среды (например, для разработки и продакшн), такие как количество реплик или версия образа.
Пример базовой конфигурации для деплоя:apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:v1
ports:
- containerPort: 8080
Здесь у нас базовый деплоймент с двумя репликами и образом Docker my-app:v1. Это конфигурация, которая будет использована во всех окружениях, пока мы не внесем в нее изменения.
Конфигурация для окружения разработкиВ папке overlays/dev мы создаем патчи, которые изменяют конфигурацию для разработки. Для разработки нужно:
• Использовать тестовую БД
• Использовать самый последний образ контейнера
• Включить дебаг логгирование
• Поиграться с количеством реплик
Пример патча для деплоя:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3 # Увеличиваем количество реплик для разработки
template:
spec:
containers:
- name: my-app
image: my-app:latest # Используем последний образ для разработки
Также в папке
overlays/dev создаем файл
kustomization.yaml:
bases:
- ../../base
patchesStrategicMerge:
- deployment-patch.yaml
- service-patch.yaml
Этот файл говорит Kustomize, что конфигурация для окружения dev будет базироваться на файлах из папки base, но с изменениями, определенными в патче.
Пример патча для прода:apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2 # В продакшн — только 2 реплики
template:
spec:
containers:
- name: my-app
image: my-app:v1.2.3 # Стабильная версия для продакшн
Теперь, благодаря Kustomize, вы можете использовать одни и те же манифесты, но с разными настройками для каждой среды.
Как применить конфигурации:
После того как мы создали все необходимые файлы, применить конфигурацию можно с помощью команды
kustomize build. Например, для разработки:
kustomize build overlays/dev | kubectl apply -f -
Для прода:
kustomize build overlays/prod | kubectl apply -f -
Эти команды соберут все ресурсы, применят соответствующие патчи для окружения и передадут их в Kubernetes.
🐸Библиотека devops'a #буст