В кластере kubernetes у меня работает pod postrgreSQL, доступный для кластера через службу ClusterIP. Я использую встроенное разрешение DNS для доступа к нему из другого модуля (.NET Core) в том же пространстве имен.
Мои развертывания выполняются через gitlab-ci.
Я бы хотел запустить dotnet database update
для применения миграции БД в качестве задания в конвейере gitlab, а не запускать эту команду из модуля веб-приложения после развертывания, поскольку приложение миграции склонно к сбою, и если это произойдет после развертывания модуля, я получу недоступное веб-приложение. Таким образом, запуск его как задания в конвейере предотвратит развертывание модуля и сохранит работоспособность «безопасной» версии.
Модуль postgres не доступен за пределами кластера, поэтому конвейер gitlab не может достичь его (что еще хуже, файл приложения .net ожидает, что разрешение DNS k8s будет работать, поэтому URL-адрес сервера - juste "postgres")
kubectl port-forward service/postgres 5432:5432
команда, и это то, что я делаю в localhost. Проблема в том, что он «блокирует» командную строку до тех пор, пока не будет отправлен сигнал выхода, поэтому мой dotnet
Команда не может быть запущена, пока порты связаны. Несмотря на обширные исследования Я не нашел способа отсоединить эту команду от k8s и также не нашли способа сделать это в gitlab-ci.Есть ли какой-либо 4-й вариант, который - был бы интегрирован в конвейер gitlab, чтобы неудачная миграция препятствовала применению развертываний - Быстро (не ждать, пока IP-адрес будет атрибутом, и избегать любой задержки более чем на несколько секунд перед командой можно запустить) - Повторяемость / надежность (например, в случае NodePort, что, если IP-адрес не может быть назначен?) - Проста в реализации, понимании и поддержке