Настройка Rolling Update деплоя для веб-приложения

Обновление веб-приложения на продакшене часто оборачивается простоями и ошибками для пользователей. Мы настраиваем Rolling Update в Kubernetes, чтобы выкатка проходила без остановки сервиса. Наша команда реализует проект под ключ — от конфигурации health check до последующей поддержки, обеспечивая стабильную работу вашего приложения.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Настройка Rolling Update деплоя для веб-приложения
Сложный
~3-5 дней
Часто задаваемые вопросы

При обновлении веб-приложения на продакшене пользователи часто теряют доступ или получают ошибки 503. Представьте: выкатили новую версию, а половина запросов упала с таймаутом — база не успела переключиться. Стандартный подход «остановить → заменить → запустить» не подходит для сервисов с требованиями SLA 99.9%. Мы настраиваем Rolling Update — стратегию, исключающую простой при минимальных затратах ресурсов. Наш опыт — 10+ лет в DevOps, внедрение rolling update для fintech и e-commerce с миллионной аудиторией.

Почему Rolling Update — лучший выбор для zero-downtime деплоя?

Rolling Update заменяет инстансы постепенно: сначала обновляется 1–2 пода, проверяется их здоровье, затем следующие. В отличие от Blue-Green, не требует двойных ресурсов, а в сравнении с Recreate — не останавливает все поды одновременно. Это даёт баланс между затратами и отказоустойчивостью. Rolling Update в 2 раза быстрее Blue-Green по времени развёртывания, а при правильной конфигурации downtime отсутствует полностью.

Параметр Rolling Update Blue-Green Recreate
Дополнительные ресурсы 0 2× 0
Downtime Нет Нет Есть
Время деплоя Среднее Быстрое Быстрое
Сложность настройки Средняя Высокая Низкая
Риск несовместимости Выше Ниже Ниже

Rolling Update даёт наилучшее соотношение цены и надёжности для большинства продакшен-систем. Подтверждение — Rolling release в Wikipedia, где rolling update рекомендуется как default-стратегия.

Как настроить Rolling Update в Kubernetes?

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 6
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 2
      maxUnavailable: 1
  minReadySeconds: 30
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: registry.example.com/myapp:v1.1.0
          readinessProbe:
            httpGet:
              path: /health/ready
              port: 8080
            initialDelaySeconds: 10
            periodSeconds: 5
            failureThreshold: 3
          livenessProbe:
            httpGet:
              path: /health/live
              port: 8080
            initialDelaySeconds: 30
            periodSeconds: 10
          terminationGracePeriodSeconds: 60
kubectl set image deployment/myapp myapp=registry.example.com/myapp:v1.2.0
kubectl rollout status deployment/myapp
kubectl rollout history deployment/myapp
kubectl rollout undo deployment/myapp
kubectl rollout undo deployment/myapp --to-revision=3

Что такое graceful shutdown и зачем он нужен?

Корректное завершение процессов — критично для zero-downtime. При получении SIGTERM приложение должно завершить активные запросы, закрыть соединения и освободить ресурсы. Если приложение не успевает завершиться за терминационный период, Kubernetes принудительно убивает его, что приводит к потере запросов.

// Node.js/Express — корректное завершение при SIGTERM
process.on('SIGTERM', async () => {
  console.log('SIGTERM received, shutting down gracefully');
  server.close(() => {
    console.log('HTTP server closed');
  });
  await new Promise(resolve => setTimeout(resolve, 30_000));
  await db.destroy();
  process.exit(0);
});

Как проверить готовность приложения?

Readiness-проба должна проверять зависимые сервисы: БД, кеш, очередь. Пример на Laravel:

// Laravel — health check routes
Route::get('/health/live', function () {
    return response()->json(['status' => 'ok']);
});

Route::get('/health/ready', function () {
    try {
        DB::connection()->getPdo();
        Cache::store()->get('health-check');
    } catch (\Exception $e) {
        return response()->json(['status' => 'not ready', 'error' => $e->getMessage()], 503);
    }
    return response()->json(['status' => 'ready']);
});

Как обеспечить совместимость базы данных при Rolling Update?

При сосуществовании двух версий схема БД должна быть совместима с обеими. Жёсткое правило — миграции запускаются до деплоя нового кода и только backward-compatible. Запрещено сразу переименовывать или удалять колонки, менять типы данных без промежуточных шагов.

Рекомендуется трёхэтапный деплой: сначала добавить новую колонку (nullable) или новую таблицу. Затем заполнить новые поля, переключить код на их использование. И только в третьей итерации удалить старые колонки или таблицы. Такой подход исключает ошибки совместимости при одновременной работе двух версий.

Типичные проблемы при настройке Rolling Update

Одна из частых ошибок — слишком маленький maxSurge или maxUnavailable, что затягивает деплой. Например, если maxSurge=1, а реплик 10, то обновление займёт 10 раундов. Правильно выбирать эти параметры исходя из общего числа реплик и допустимой скорости развёртывания. Другая проблема — некорректные readiness-пробы: они должны проверять реальную готовность приложения, а не просто возвращать 200. Если проба не включает проверку БД, новый под может начать принимать трафик до того, как база инициализирована, что приведёт к ошибкам 500. Также часто забывают настроить terminationGracePeriodSeconds: если приложение не успевает завершиться до принудительного SIGKILL, активные запросы теряются. Рекомендуется устанавливать значение не менее 30 секунд.

Что входит в настройку Rolling Update?

  • Анализ текущей инфраструктуры и архитектуры приложения
  • Конфигурация Kubernetes Deployment или Docker Swarm service
  • Написание корректных readiness- и liveness-проб
  • Доработка graceful shutdown (SIGTERM, завершение запросов)
  • Разработка стратегии backward-compatible миграций
  • Тестирование на staging-окружении с нагрузкой
  • Документация настроек и регламентов
  • Обучение команды работе с Rolling Update

Процесс работы

  1. Аналитика: изучаем текущий стэк, инфраструктуру, процессы деплоя
  2. Проектирование: выбираем параметры Rolling Update, health checks
  3. Реализация: настраиваем оркестратор, пишем пробы, graceful shutdown
  4. Тестирование: проверяем на staging с нагрузочным тестированием
  5. Деплой: катим на production, мониторим первые 24 часа

Сроки реализации

Этап Длительность
Базовая настройка Rolling Update (Kubernetes + health checks) 2–3 дня
Docker Swarm rolling update 1–2 дня
Разработка backward-compatible миграций 1–2 дня
Полный цикл с обучением 3–5 дней

Свяжитесь с нами для консультации — оценим ваш проект за 2 дня. Закажите настройку Rolling Update у профессионалов. Получите готовое решение с гарантией нулевого downtime и полной совместимости.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060