Из вариантов наиболее полный — отдельный контролируемый запуск миграций и readinessProbe приложения. Readiness не допускает трафик до готовности, а миграции не конкурируют при старте каждой реплики.
В Kubernetes приложение иногда стартует раньше PostgreSQL. Какой вариант поставки наиболее безопасен?
Из вариантов наиболее полный — отдельный контролируемый запуск миграций и readinessProbe приложения. Readiness не допускает трафик до готовности, а миграции не конкурируют при старте каждой реплики.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В Kubernetes приложение иногда стартует раньше PostgreSQL. Какой вариант поставки наиболее безопасен?
- Увеличить число реплик сервиса.
- Повторять подключение к базе с ограниченным числом попыток.
- Добавить проверку подключения к PostgreSQL перед готовностью пода.
- Выполнить миграции отдельным контролируемым шагом и использовать readinessProbe приложения.
- Убрать интеграционные тесты из GitLab CI.
- Поставить паузу 30 секунд перед запуском приложения.
Ответ
Из вариантов наиболее полный — отдельный контролируемый запуск миграций и readinessProbe приложения. Readiness не допускает трафик до готовности, а миграции не конкурируют при старте каждой реплики.
Приложению также нужны ограниченные retries с backoff для временной недоступности БД. Проверка только TCP-подключения не доказывает наличие подходящей схемы. Фиксированный sleep ненадёжен, а увеличение реплик не исправляет порядок готовности. Изменения схемы должны быть совместимы с одновременно работающими версиями приложения.