Запуск контейнера nginx в модуле kubernetes, в котором запущено приложение python с использованием gunicorn - PullRequest
0 голосов
/ 16 октября 2018

У меня есть контейнер, который запускает чат-бота с использованием python, выставил порт 5000, где работает бот.Теперь, когда я развертываю этот контейнер в kubernetes, у меня возникает несколько вопросов

  • Нужно ли запускать контейнер nginx в модуле, где работает мой контейнер приложения?Если да, зачем мне это нужно?так как kubernetes выполняет балансировку нагрузки
  • Если я запускаю контейнер nginx на порту 80, нужно ли мне запускать контейнер приложения также на 80 или (могу ли я использовать другой порт, например 5000)
  • какую рольGunicorn играет здесь?

Я немного сбит с толку, потому что большинство примеров, которые я вижу в Интернете, у всех в значительной степени содержат контейнер nginx в своих модулях вместе с контейнерами приложения

1 Ответ

0 голосов
/ 16 октября 2018

Как вы упомянули, Kubernetes может самостоятельно управлять балансировкой нагрузки, поэтому ответ на ваш первый вопрос - нет, вам не нужно запускать nginx, особенно в модуле, где находится ваше приложение.Обычно службы и модули имеют IP-адреса, которые маршрутизируются сетью кластера, и весь трафик, который заканчивается на пограничном маршрутизаторе, будет отброшен.Таким образом, в Kubernetes существует набор правил, которые позволяют входящим соединениям обращаться к службам кластера.Мы называем это Ingress :

Объект API, который управляет внешним доступом к службам в кластере, обычно HTTP.

Запутанная часть заключается в том, чтоСам по себе вход не делает много.Вам нужно будет создать Ingress controller , который является демоном, развернутым как Pod.Его работа заключается в том, чтобы читать информацию о входном ресурсе и обрабатывать ее соответствующим образом.Фактически любая система, способная к обратному проксированию, может быть входным контроллером.Подробнее о контроллере Ingress и Ingress вы можете прочитать в практическом подходе в этой статье .Кроме того, я не знаю о вашей среде, поэтому, пожалуйста, помните, что вы должны использовать тип LoadBalancer , если вы находитесь в облаке, и набирать NodePort , если вы находитесь в «голой» среде.

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

О портах и ​​способах предоставления сервисов вы должны проверить источники в документации о том, как работает модель Kubernetes по сравнению с моделью контейнеров.Вы можете найти поучительную статью здесь .

К сожалению, у меня нет опыта работы с Gunicorn, поэтому я не смогу рассказать вам, какую роль он играет здесь.Надеюсь это поможет.

...