Рейтинг:0

Запуск PHP-приложения с поддержкой плагинов

флаг cn

У меня есть приложение PHP, которое отлично работает в Kubernetes, за исключением одного сценария. «Проблема» в том, что приложение можно расширить с помощью плагина. В этом случае мы просто добавляем плагин в контейнер, пересобираем контейнер и снова его развертываем. При следующем входе в систему Администратору необходимо подтвердить установку плагина. Все идет нормально. Но! Наша проблема в том, что мы больше не можем удалять эти плагины, потому что плагины создают (зависящие от плагина) таблицы и записи в разных таблицах в базе данных.

В процессе деинсталляции плагин удаляет таблицы и так далее. Но так как наше приложение находится в подах, то файлы в файловой системе остаются активными. Таким образом, после перезагрузки страницы приложение находит новый плагин и устанавливает его снова.

По сути, после удаления одного плагина нам нужно пересобрать контейнер без плагина и развернуть его снова. Затем мы можем удалить следующий плагин, пересобрать контейнер и так далее... но это не решение.

Поэтому мы думаем, что должен быть другой путь.Лучшим решением было бы установить его в томе, потому что в этом случае все модули используют один и тот же том, и мы можем разделить их между модулями php-fpm и модулями веб-сервера. Таким образом, мы можем масштабировать их независимо друг от друга. Но в этом случае вопрос в том, есть ли что-то вроде контейнера установки, который запускается при каждом развертывании. Поэтому всякий раз, когда мы обновляем наше развертывание, контейнер запускается один раз и удаляет старые плагины / устанавливает новые плагины / устанавливает обновления нашего приложения. В этом сценарии нашим модулям требуется только ReadOnlyMany (ROX), и только один модуль (настройка) нуждается в разрешениях на запись.

Я знаю, что есть init-контейнеры, но насколько мне известно, они запускаются каждый раз, когда запускается новый модуль. У кого-нибудь есть какие-либо предложения, как решить эту проблему или сталкивался с подобными проблемами?

Klamber avatar
флаг ru
Поскольку приложение PHP не будет записывать в этот том, вам необходимо делегировать его поду, у которого есть доступ для записи. Я бы использовал какой-то процессор фоновых заданий, работающий в привилегированном модуле / задании. Приложение обнаруживает обновление/удаление плагина -> помещает действие в очередь заданий и опрашивает изменения статуса или сообщения об ошибках. Рабочий модуль проверяет очередь заданий и выполняет необходимые действия, обновляет статус или устанавливает ответное сообщение об ошибке. Есть много способов реализовать фоновые задания, но я не знаю, какова ваша структура приложения.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.