Обработка согласованности данных в модулях в GKE
У меня есть данные в github, хранящиеся в формате JSON. Мои модули клонируют этот репозиторий и используют их, и всякий раз, когда производится обновление этих данных, запускается git hook, и я ожидаю, что мои модули будут обновляться с использованием последних данных (предоставляя git pull). Я выставил этот сервис обновлений через балансировщик нагрузки и настроил его в githook.
Однако, когда срабатывает git hook, только один из модулей получает запрос и выполняет git pull. Есть ли способ уведомить все мои модули в этой службе, чтобы обновить их локальное хранилище?
Поэтому, чтобы добиться этого, я искал какое-то общее хранилище, которое можно смонтировать во всех контейнерах, запущенных в кластере Kubernetes. например.Google Cloud File Store, эквивалентный AWS EFS. Поэтому, когда в Github появляется новый коммит, балансировщик нагрузки будет запрашивать один из контейнеров для обновления хранилища файлов. Поскольку это одно и то же хранилище файлов, которое смонтировано во всех контейнерах, все они будут обслуживать самые последние данные.
Но, 1. Cloud File Store все еще находится в бета-версии, а не в GA.
Как решить эту проблему в среде kuberentes?
2 ответа
Если вы запрашиваете способ настройки общего тома в kubernetes с несколькими модулями для чтения, вы можете настроить модуль NFS, как описано в этом официальном примере.
Я использую это для моей установки Дженкинса в Куберне, и это хорошо работает.
Есть два способа: 1. каждый модуль (с помощью задания cron) пытается извлечь данные из центрального хранилища, скажем, раз в минуту, и обновление становится рабочим каталогом, когда доступны обновления. 2. центральный сервер загружает обновления для модулей индивидуально (балансировка нагрузки здесь не подходит).
Вы также можете подумать о реализации этого с помощью Deployments. Как уже упоминалось в другом ответе,
NFS может быть полезен для вашей цели обмена.