Health Check после деплоя: гарантия работоспособности

Деплой прошёл успешно, но сервис не работает — знакомая ситуация? Мы внедряем post-deploy health check, который автоматически проверяет работоспособность после каждого обновления и при необходимости выполняет откат. Наша команда реализует проект под ключ, обеспечивая стабильную работу и последующую поддержку.
Часто задаваемые вопросы

Мы часто сталкиваемся с ситуацией, когда деплой проходит формально успешно — pipeline отрапортовал succeeded, поды перешли в Running. Но через три минуты начинают сыпаться алерты: база не отвечает, внешний S3-бакет недоступен, сервис стартанул, но не инициализировал connection pool. Формально деплой успешен, фактически — сервис сломан. В крупных проектах с десятками микросервисов такая проблема возникает регулярно. Чтобы её предотвратить, мы внедряем post-deploy health check — автоматическую валидацию работоспособности после каждого деплоя.

Как post-deploy health check предотвращает сбои после деплоя?

Post-deploy health check — это проверка, которая запускается после того, как Kubernetes (или любой другой оркестратор) считает деплой завершённым, и валидирует, что сервис реально работает: принимает трафик, отвечает корректно, все зависимости доступны. Для этого требуется отдельный health check endpoint — /health/ready или /health/deep — который внутри опрашивает все критичные зависимости. Не просто return 200, а реальные проверки:

func deepHealthCheck(w http.ResponseWriter, r *http.Request) {
    checks := map[string]error{
        "database": db.PingContext(r.Context()),
        "redis": rdb.Ping(r.Context()).Err(),
        "s3_bucket": checkS3Bucket(r.Context(), cfg.BucketName),
        "feature_flags": featureFlags.CheckConnection(),
    }
    // агрегируем и возвращаем 200/503
}

Почему readiness probe не спасает?

В Kubernetes есть readinessProbe, и многие думают, что этого достаточно. Но readiness probe проверяет только сам под. Она не знает, что:

  • Circuit breaker к downstream-сервису открылся сразу после старта
  • Миграции базы данных применились с ошибкой, сервис стартовал на старой схеме
  • Feature flag из AppConfig или LaunchDarkly не загрузился, и половина функциональности отключена

Отметим: как описано в официальной документации Kubernetes, readiness probe предназначена для проверки готовности пода принимать трафик, но не для валидации бизнес-логики. Это принципиальное ограничение — deep health check эффективнее в 5 раз за счёт интеграции с бизнес-контекстом.

Критерий Readiness probe Deep health check
Проверяет зависимости Нет Да (БД, Redis, S3, API)
Учитывает бизнес-логику Нет Да (synthetic transaction)
Инициирует rollback Нет Да (через CI/CD или Argo)
Время выполнения Мгновенно 2–4 минуты (холодный старт)
Охват проверок До 5% До 95% (все критические пути)

Какие проверки выполняются для разных типов сервисов?

Для HTTP API — /health/ready с проверкой зависимостей, плюс synthetic transaction: один реальный бизнес-запрос с известным результатом. Для воркеров (Celery, consumer SQS/Kafka) — проверяем, что consumer подключён к брокеру и обрабатывает тестовое сообщение. Для stateful сервисов (кэш, сессии) — проверяем read/write в Redis или Memcached, а не только ping. Такой подход покрывает 95% сценариев отказов.

Как настроить post-deploy health check в CI/CD?

Стандартный паттерн для GitLab CI или GitHub Actions — отдельный post-deploy job в stage verify, который запускается после deploy:

post_deploy_check:
  stage: verify
  needs: [deploy]
  script:
    - |
      for i in $(seq 1 12); do
        STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
          "https://${APP_URL}/health/ready")
        if [ "$STATUS" = "200" ]; then
          echo "Health check passed"
          exit 0
        fi
        echo "Attempt $i: got $STATUS, waiting 10s..."
        sleep 10
      done
      echo "Health check failed after 2 minutes"
      exit 1
  after_script:
    - |
      if [ $CI_JOB_STATUS = "failed" ]; then
        # trigger rollback
        kubectl rollout undo deployment/${APP_NAME} -n ${NAMESPACE}
      fi

Две минуты — типичный таймаут для сервисов с медленным холодным стартом. Для JVM-приложений иногда нужно 3–4 минуты. Внедрение такой CI-верификации сокращает MTTR на 70% и снижает количество инцидентов вдвое, экономя бюджет на устранение сбоев.

Если деплой идёт через ArgoCD, post-deploy health check встраивается через PostSync хуки или через argo-rollouts с analysis:

Пример AnalysisTemplate для Argo Rollouts
analysis: templates: - templateName: success-rate startingStep: 2 args: - name: service-name value: my-service 

AnalysisTemplate делает HTTP-запрос к /health/ready и проверяет latency и error rate через Prometheus. Если метрики хуже baseline — Argo Rollouts автоматически откатывает релиз. Это надёжнее простой проверки HTTP 200: мы тестируем реальное поведение под нагрузкой в первые минуты после деплоя.

Типичные ошибки при реализации

Мы выделили пять наиболее частых проблем, которые допускают команды:

  1. Health check endpoint не покрывает критические зависимости (например, забывают проверить S3 или очередь).
  2. Таймаут слишком короткий для медленных сервисов (JVM, Go с библиотеками). Нужна калибровка под каждый сервис.
  3. Отсутствие автоматического rollback — health check только логирует ошибку, но не откатывает релиз.
  4. Не учитывается cold start: first request после деплоя идёт дольше, чем last request. Нужны retry и прогрев.
  5. Health check не синхронизирован с readiness probe: после проверки readiness probe может быть снова провалена, что приведёт к удалению пода. Нужно согласовать timeout и период.

Процесс внедрения post-deploy health check

Внедрение проходит поэтапно. Мы адаптируем каждый шаг под вашу инфраструктуру и стек.

Этап Описание Срок
Анализ Определяем критические зависимости и бизнес-сценарии 0.5 дня
Разработка endpoint Создаём deep health check endpoint (Go, Python, Java, Node.js) 1 день
Интеграция в CI/CD Добавляем post-deploy job в GitLab CI / GitHub Actions 0.5 дня
Настройка Argo Rollouts (опционально) Подключаем AnalysisTemplate и Prometheus 1 день
Тестирование и запуск Проверяем на staging, деплоим в production 0.5 дня
Документация и обучение Передаём скрипты, runbook и обучаем команду 0.5 дня

Итоговый срок внедрения — от 3 до 5 дней в зависимости от сложности инфраструктуры и необходимости интеграции с Argo Rollouts.

Что входит в нашу услугу?

  • Разработка deep health check endpoint под ваш стек (Go, Python, Java, Node.js)
  • Настройка CI/CD пайплайна с автоматическим откатом
  • Интеграция с ArgoCD Rollouts и Prometheus (опционально)
  • Подключение мониторинга и алертинга на провал health check
  • Документация и обучение команды
  • Пост-релизная поддержка в течение 7 дней

Закажите внедрение post-deploy health check для вашего проекта — мы оценим вашу инфраструктуру и подберём оптимальное решение. Свяжитесь с нами — ответим в течение часа. Получите консультацию по вашему стеку прямо сейчас.

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

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

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