Масштабируемая инфраструктура на Kubernetes
Развернул платформу в Kubernetes: автоскейлинг под нагрузку, CI/CD пайплайны, zero-downtime деплой. Снизил затраты на хостинг при растущем трафике.

Задача
Платформа доставки еды обслуживала сотни ресторанов. Всё крутилось на двух выделенных серверах: один под приложение, второй под базу данных. В обеденные часы (с 11:00 до 14:00) трафик вырастал в 5-7 раз - сервер приложений не справлялся, запросы начинали падать по таймауту, пользователи видели 502 ошибки. Деплой выглядел так: зайти по SSH, сделать git pull, перезапустить pm2, проверить что ничего не упало - 30-40 минут ручной работы с неизбежным простоем. Откат в случае проблемы - ещё 20 минут. Горизонтальное масштабирование на выделенных серверах было практически невозможно: каждый новый сервер требовал ручной настройки окружения, синхронизации конфигов и балансировки через Nginx.
Решение
Первым шагом контейнеризировал каждый сервис в Docker - написал мультистейдж Dockerfile для минимального размера образа (Node.js приложение ужалось с 1.2 ГБ до 180 МБ). Развернул managed Kubernetes кластер с тремя нодами. Разбил монолит на отдельные деплойменты: API, воркеры фоновых задач, фронтенд (SSR). Для каждого настроил HPA (Horizontal Pod Autoscaler) - при росте CPU выше 70% автоматически поднимаются новые поды, при спаде - убираются. Ingress Controller на Nginx обеспечивает маршрутизацию и SSL-терминацию. CI/CD пайплайн в GitLab: на каждый пуш - линтинг и тесты, на мёрж в main - сборка Docker-образа, push в Container Registry, rolling update в кластере. Весь деплой стал автоматическим и занимает 3-4 минуты от мёржа до продакшена.
Результат
Полный zero-downtime деплой - пользователи не замечают обновлений благодаря rolling update стратегии. В обеденный пик кластер автоматически масштабируется с 3 до 8 подов и сокращается обратно вечером. Затраты на инфраструктуру снизились на 30%: вместо оплаты пиковой мощности 24/7 платим только за реально используемые ресурсы. Время деплоя сократилось с 40 минут ручной работы до 4 минут автоматического пайплайна. Откат на предыдущую версию - одна команда, 30 секунд.
Нужно решить похожую задачу?