У меня есть программа Python, которую я запускаю как работу в кластере Kubernetes каждые 2 часа. У меня также есть веб-сервер, который запускает работу всякий раз, когда пользователь нажимает кнопку на странице.Обеспечение не более одного экземпляра выполнения задания на Kubernetes и запись в Postgresql
Мне нужно убедиться, что в кластере в любой момент времени выполняется только один экземпляр задания.
Учитывая, что я использую Kubernetes для запуска задания и подключения к Postgresql изнутри задания, решение должно каким-то образом использовать эти два. Я немного об этом подумал и пришел к следующему:
- Найти параметр в Кубернете, который установил бы этот предел, попытки запустить второй экземпляр затем потерпят неудачу. Я не смог найти эту настройку.
- Создайте общую блокировку или мьютексы. Недостатком является то, что если сбой работы, я не могу разблокироваться, прежде чем уйти.
- Kubernetes работает etcd, может быть, я могу использовать это
- Создать таблицу «замок» в Postgresql, когда новый экземпляр соединяется, он проверяет, является ли это только один работает. Используйте транзакции так или иначе, чтобы один выигрывал и продолжал, а другие уходили. Я еще не думал об этом, но должен работать.
- Query kubernetes API для ярлыка, который я использую для работы, см., Есть ли какие-то экземпляры. Это может быть не атомарным, поэтому более одного экземпляра может проскользнуть.
Каковы обычные решения этой проблемы с учетом выбора платформы, которую я сделал? Что мне делать, чтобы не изобретать колесо и не иметь что-то надежное?
Спасибо, я попытаюсь сначала использовать подход «k8s не запускается с тем же именем» или, возможно, «postgres lock». – user7610