Как перезапустить несколько экземпляров приложения Spring Boot для службы Kubernetes

У меня есть развертывание службы весенней загрузки A с балансировкой нагрузки, скажем, в кластере Kubernetes с 3 узлами.

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

Для этого я собрал конфигурационный сервер весенней загрузки, а также реализовал перезапуск Actuator на сервисе A, который при вызове своей конечной точки / restart в локальном развертывании единственного экземпляра обновляется и загружается со свойствами, полученными с конфигурационного сервера.

Пока все хорошо, но ...

Как можно достичь вышеупомянутого, когда служба A развернута в более крупномасштабном развертывании k8s с 3, 30 или 300 экземплярами службы A?

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

Есть ли в springboot-on-k8s стандартный способ вызова каждого экземпляра службы, игнорируя LB?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
840
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не знаю стандартного шаблона для этого.

Каждый из ваших модулей приложения, который соответствует селектору для вашей службы, будет зарегистрирован как конечная точка для этой службы. Если вы запустите kubectl get endpoints, вы должны увидеть все внутренние IP-адреса кластера для модулей, поддерживающих вашу службу.

Вы можете создать некоторую логику для вызова этой конечной точки / обновления для каждой конечной точки службы.

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

Bilal Issa 25.12.2018 10:21

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

switchboard.op 26.12.2018 18:21

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

Bal Chua 26.12.2018 22:29

Я согласен с тобой @BalChua. Использование метки даты - хороший обходной путь, который я использовал и раньше.

switchboard.op 28.12.2018 01:13
Ответ принят как подходящий

На самом деле мы не используем перезапуск исполнительного механизма, вместо этого мы используем стратегию развертывания RollingUpdate. Когда мы хотим «перезапустить» поды, мы запускаем патч kubectl.

kubectl patch deployment web -p  "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}"

Хорошая документация по стратегии обновления.

https://www.google.com/url?sa=t&source=web&rct=j&url=https://medium.com/platformer-blog/enable-rolling-updates-in-kubernetes-with-zero-downtime-31d7ec388c81&ved= 2ahUKEwjIqtbW_bvfAhUKRY8KHas6DEkQjjgwAnoECAkQAQ & usg = AOvVaw3HjD4CUoG4ma3HWxquaYjp & cshid = 1545776336374

Другие вопросы по теме