Зависание развертывания унаследованного приложения, которое я не контролирую на k8s, для которого требуется список IP-адресов в командной строке, причем эти IP-адреса являются модулями в развертывании B, например ::
./legacy_app -s 10.1.0.1 10.1.0.2 10.2.0.2
- вызовРазвертывание этого приложения A
(IP-адреса собираются путем запроса конечной точки .../pods
API k8s во время запуска модуля)
Когда изменяется развертывание B (масштабируется / уменьшается, перезапуск модуля,и т. д.), список IP-адресов изменяется, и мне нужно перезапустить стручки в развертывании A, чтобы повторно запросить у API правильный список IP-адресов.
Как мне этого добиться, в идеале используя стандартные примитивы k8s?
Что я пробовал до сих пор:
- приложение, которое вызывает
watch
наразвертывание B и при обнаружении события MODIFIED
обновляет метку при развертывании A, вызывая перезапуск. Это своего рода работает, но требует, чтобы наблюдатель сделал паузу на несколько секунд, прежде чем перезапустить развертывание A - без паузы список IP-адресов часто не обновляется к моменту перезапуска развертывания A, что приводит к неполному списку. Однако чем дольше он приостанавливается, тем больше данных я теряю. Это добавляет немного больше операционной сложности, чем мне нравится.
Что я собираюсь попробовать дальше:
замена pid 1 при развертывании A на цикл мониторинга, который (повторно) запускает старое приложение сновый список IP-адресов, когда список меняется.
Могу ли я обновить configMap или метку при развертывании модулей, содержащих список IP-адресов, и каким-то образом использовать это, чтобы сигнализировать о необходимости перезагрузки?
Есть ли лучший способ? Зайдя в k8s, я ожидал, что будут какие-то ловушки / часы, на которые я мог бы подписаться, и запустим команду типа «перезапустить все модули в развертывании», но эта функция, похоже, не существует.
Я явно новичок в k8s, любой вклад очень ценится.
k8s 1.14 на AWS EKS