У меня есть миграции баз данных, которые я хотел бы запустить до развертывания новой версии моего приложения в кластере Kubernetes. Я хочу, чтобы эти миграции выполнялись автоматически в рамках конвейера непрерывной доставки. Миграция будет инкапсулирована как изображение контейнера. Какой лучший механизм для достижения этого?
Требования к решению:
- сможет определить, не удалось ли выполнить миграцию, чтобы впоследствии мы не пытались развернуть новую версию приложения в кластере.
- отказаться, если сбой миграции - не продолжать его повторять.
- иметь доступ к журналам для диагностики неудачных миграций.
Я предположил, что функциональность Jobs в Kubernetes сделает это легко, но, похоже, есть несколько проблем:
- Kubernetes будет повторно повторно запускать контейнеры, чьи процессы завершаются с ненулевым кодом выхода, даже если задание имеет
restartPolicy
ofnever
. - Блокировка при ожидании результата задания в очереди, похоже, требует ручных скриптов
Было бы лучше использовать "голые стручки"? Если да, то как это может работать?