Назначьте конкретный путь к поду, даже если он воссоздан

Я запускаю определенное программное обеспечение в OpenShift, которое состоит из двух модулей. Программное обеспечение имеет лицензионное ограничение, которое позволяет использовать только два экземпляра. В дополнение к этому два модуля должны быть основаны на одном и том же изображении, потому что это внутреннее правило дизайна, которому я должен следовать.

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

  1. /данные/общие
  2. /данные/экземпляр1
  3. /данные/экземпляр2

Как я могу убедиться, что определенный файл конфигурации, который я помещаю в pod1, всегда настроен на использование /data/instance1, а pod2 всегда настроен на использование /data/instance2 даже, если один из двух модулей удаляется и снова удаляется? Я уже пытался сделать это на основе имени хоста, но поскольку оно регулярно меняется и не следует воспроизводимой логике (например, softwarename-tzyjkd), этот подход не удался.

В идеале я бы получил доступ к своего рода «счетчику экземпляров», предоставляемому openshift.

От обычного образа к контейнеру и поду


person Marged    schedule 25.10.2016    source источник


Ответы (1)


Посмотрите на создание отдельных конфигураций развертывания для каждого экземпляра и задайте переданные переменные среды, чтобы обозначить путь по-разному для каждого. Пусть приложение использует переменную среды, чтобы узнать, какой путь использовать.

Если нужно сбалансировать трафик между обоими инстансами, то настройте маршрут, чтобы направлять трафик на оба инстанса в нужном соотношении.

Например:

oc new-build getwarped/s2i-httpd-server~https://github.com/getwarped/httpd-parked-domain.git --name mysite

oc new-app mysite --name mysite1 --env DATA=instance1

oc new-app mysite --name mysite2 --env DATA=instance2

oc expose svc/mysite1 --name mysite

oc set route-backends mysite mysite1=50 mysite2=50

Это оставит вас с:

$ oc get all -o name
buildconfig/mysite
build/mysite-1
imagestream/mysite
imagestream/s2i-httpd-server
deploymentconfig/mysite1
deploymentconfig/mysite2
replicationcontroller/mysite1-1
replicationcontroller/mysite2-1
route/mysite
service/mysite1
service/mysite2
pod/mysite-1-build
pod/mysite1-1-64c6a
pod/mysite2-1-v3lf4

$ oc get routes
NAME      HOST/PORT                      PATH      SERVICES                    PORT       TERMINATION
mysite    mysite-book.127.0.0.1.xip.io             mysite1(50%),mysite2(50%)   8080-tcp

Кстати, если ваше программное обеспечение даже не запустится, если оно думает, что что-то уже использует лицензию, вы захотите изменить стратегию развертывания с Rolling на Recreate. Это будет означать, что существующий экземпляр будет отключен перед запуском нового экземпляра. Потому что, хотя у вас их два, вы всегда можете настроить соотношение маршрутизации трафика к другому перед перезапуском одного. Таким образом, у вас не будет сбоя запросов, когда экземпляр будет выполнен. Вы можете перебалансировать трафик после перезапуска одного или переключить весь трафик на него и перезапустить другой.

person Graham Dumpleton    schedule 25.10.2016