Программная балансировка нагрузки в кубернетах

У меня есть 10 реплик, на которых запущено одно и то же приложение Java. Я хотел бы пропустить отправку запроса на реплику, которая выполняет полный цикл сборки мусора / остановить мировой цикл (с использованием интерфейса инструмента jvm).

Пример: 5 приложений выполняют полный цикл сборки мусора, 5 завершили цикл ГХ. Следовательно, я хотел бы направить трафик на модули, которые завершили цикл сборки мусора.

псевдокод: 1) Балансировщик нагрузки получает входящий запрос REST для серверной службы. 2) Определите реплики, которые не находятся в полном цикле GC. 3) Используйте циклический перебор, чтобы направить запрос к одной из реплик, найденных на шаге 2.

Может ли кто-нибудь мне помочь, если мы сможем сделать это в кубернетах.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
0
85
1

Ответы 1

У меня есть для вас концепция, но вам нужно добавить что-то в свою программу. Посмотрите на readinessProbe.

readinessProbe: указывает, готов ли контейнер к обслуживанию запросов. Если проверка готовности завершается неудачно, контроллер конечных точек удаляет IP-адрес модуля из конечных точек всех служб, соответствующих этому модулю. Состояние готовности по умолчанию перед начальной задержкой - Failure. Если контейнер не предоставляет зонд готовности, состояние по умолчанию - Success.

Это пример конфигурации, вы также можете использовать TCP-сокет

readinessProbe:
  httpGet:
    path: /healthz
    port: 8181
  initialDelaySeconds: 5
  periodSeconds: 5

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

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