@bubaley

Как правильно масштабировать Django с Kubernetes?

Здравствуйте

Немного текущей реализации и возможностях.
Сейчас у нас есть Django + DRF проект завернутый в Docker и docker-compose.
Контейнеры в docker-compose:
- Само приложение
- Redis
- DB
- Celery
- Flower
- PgBouncer
Проект push-ится в github, по ssh (руками) на сервере происходит pull и сборка проекта (все архитектура на одной виртуалке).
Мне такой формат не очень нравится (нет конвейерной разработки, надо подключаться на сервер, нет масштабирования, downtime).

Знаю, что могу вынести DB и pgbouncer на отдельные сервера, сделать еще один контур приложения и настроить балансировщик. Но тогда мне все равно надо будет руками собирать проект, что так себе.

Хочу такой вариант пропустить и сразу перейти к kubernetis (про него знаю в общих чертах)

Подскажите как правильно организовать такой процесс, в какие вещи стоит углубиться (я так понимаю, все контейнеры должны быть в dockerhub, нужны github actions и тд). Но хочется услышать это от людей, который с этим сталкиваются постоянно, заранее спасибо
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
@deliro
Хочу такой вариант пропустить и сразу перейти к kubernetis

"You think you do, but you don't"

Знаю, что могу вынести DB и pgbouncer на отдельные сервера

Чтобы увеличить RTT?

Для поддержки кубика нужна целая выделенная команда, которая, помимо кубика, ещё настроит и будет поддерживать ёлку (ELK), какой-нибудь vault, графану, прометей, консул, докер реджистри, s3 (типа minio или seaweedfs, ведь контейнеры теперь stateless и хранить на них ничего нельзя) и кучу других сложных штук. Если у тебя нет сотни разработчиков в компании, то не нужно играть в гугл.

Во-первых, какая у тебя нагрузка? Сколько тысяч запросов в секунду приходит и отмасштабировал ли ты вертикально и упёрся уже в потолок? gunicorn оптимально настроен? сколько процессов/потоков, какой тип воркеров? json парсишь и сериализуешь orjson'ом? Приложение профилировал?
Во-вторых, 12 factor
В-третьих, у базы есть реплики? read запросы раскидал на реплики? а редис? Действительно ли нужен zero downtime (это исходит из вопроса про нагрузку)

Если тебе хочется просто поиграть, то поставь локально кубик, поиграй, погрусти и удали. Не нужно это тащить в прод, если нет на это необходимости. А если ты даже название kubernetes не можешь правильно написать, то он тебе не нужен.

P.S. DRF — медленное нетипизированное говно, выкинь его
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vitaly_il1
DevOps Consulting
Тут есть два не связанных вопроса:
1) как сделать CI/CD
2) на какой платформе (VM, Docker compose, Nomad, K8S, какой-нибудь cloud app server) оптимально поднимать сервис

Насчет первого - с помощью Github Actions легко сделать CI/CD ничего не меняя в архитектуре.

Насчет второго - зависит от многих данных - от skills разработчиков до ожидаемой нагрузки, требований в производительности и надежности, и до кол-ва денег.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы