Назад | Перейти на главную страницу

Запустите обновление базы данных dotnet для непубличного ресурса kuberentes из конвейера gitlab-ci

Контекст

В кластере kubernetes у меня работает pod postrgreSQL, доступный для кластера через службу ClusterIP. Я использую встроенное разрешение DNS для доступа к нему из другого модуля (.NET Core) в том же пространстве имен.

Мои развертывания выполняются через gitlab-ci.

Я бы хотел запустить dotnet database update для применения миграции БД в качестве задания в конвейере gitlab, а не запускать эту команду из модуля веб-приложения после развертывания, поскольку приложение миграции склонно к сбою, и если это произойдет после развертывания модуля, я получу недоступное веб-приложение. Таким образом, запуск его как задания в конвейере предотвратит развертывание модуля и сохранит работоспособность «безопасной» версии.

Что не работает

Модуль postgres не доступен за пределами кластера, поэтому конвейер gitlab не может достичь его (что еще хуже, файл приложения .net ожидает, что разрешение DNS k8s будет работать, поэтому URL-адрес сервера - juste "postgres")

Мои варианты

Вопрос

Есть ли какой-либо 4-й вариант, который - был бы интегрирован в конвейер gitlab, чтобы неудачная миграция препятствовала применению развертываний - Быстро (не ждать, пока IP-адрес будет атрибутом, и избегать любой задержки более чем на несколько секунд перед командой можно запустить) - Повторяемость / надежность (например, в случае NodePort, что, если IP-адрес не может быть назначен?) - Проста в реализации, понимании и поддержке