Как сеть и балансировщик нагрузки работают в режиме Docker Swarm?

Я новичок в докерах и контейнерах. Я просматривал учебники по докеру и наткнулся на эту информацию. https://docs.docker.com/get-started/part3/#docker-composeyml

   networks:
     - webnet
networks:
  webnet:

Что такое вебнет? В документе говорится

Укажите веб-контейнерам совместно использовать порт 80 через сеть с балансировкой нагрузки, называемую веб-сетью. (Внутренне сами контейнеры будут публиковаться на веб-порту 80 на эфемерном порту.)

Итак, по умолчанию оверлейная сеть сбалансирована по нагрузке в кластере докеров? Какой алгоритм балансировки нагрузки используется?

Собственно, мне непонятно, зачем у нас балансировка нагрузки в оверлейной сети.


person SunilS    schedule 20.06.2017    source источник


Ответы (1)


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

Во-первых, документ, который вы используете здесь, использует то, что называется swarm mode из докер.

Что такое swarm mode?

Рой — это кластер движков или узлов Docker, на которых вы развертываете сервисы. Интерфейс командной строки и API Docker Engine включает команды для управления узлами роя (например, добавления или удаления узлов), а также для развертывания и оркестровки сервисов в рое.

Из документации SO:

Рой — это несколько Docker Engine (или узлов), которые совместно развертывают сервисы. Swarm используется для распределения обработки между множеством физических, виртуальных или облачных машин.

Таким образом, в режиме роя у вас есть многоузловой (VMS и/или физический) кластер машин, которые взаимодействуют друг с другом через их docker engine.

Q1. Что такое вебнет?

webnet — это имя оверлейной сети, которая создается при запуске вашего стека.

Оверлейные сети управляют коммуникациями между демонами Docker, участвующими в рое.

В вашем кластере машин создается виртуальная сеть, где каждая служба имеет IP-адрес, сопоставленный с внутренней записью DNS (которая является именем службы), и позволяет докеру направлять входящие пакеты в нужный контейнер повсюду в рое ( кластер).

Вопрос 2. Итак, по умолчанию оверлейная сеть сбалансирована по нагрузке в кластере докеров?

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

Вопрос 3. Какой используется алгоритм балансировки нагрузки?

Из этого SO вопрос, на который ответил мастер роя bmitch;):

Алгоритм в настоящее время является циклическим, и я не видел никаких признаков того, что его можно подключить. Балансировщик нагрузки более высокого уровня позволит отключать узлы роя для обслуживания, но любые липкие сеансы или другие функции маршрутизации будут отменены алгоритмом циклического перебора в режиме роя.

Q4. Собственно мне непонятно, зачем у нас балансировка нагрузки в оверлейной сети

Целью режима/сервисов docker swarm является обеспечение оркестрации реплицированных сервисов, что означает, что мы можем масштабировать контейнеры, развернутые в рое, вверх/вниз.

Еще раз из документов:

Режим роя имеет внутренний компонент DNS, который автоматически назначает каждой службе в рое запись DNS. Диспетчер роя использует внутреннюю балансировку нагрузки для распределения запросов между службами в кластере на основе DNS-имени службы.

Таким образом, вы можете развернуть около 10 точно таких же контейнеров (скажем, nginx с вашим приложением html/js), не имея дело с записями DNS частной сети, конфигурацией портов и т. д. Любой входящий запрос будет автоматически балансироваться по нагрузке на хосты, участвующие в рой.

Надеюсь это поможет!

person François Maturel    schedule 20.06.2017