Что такое режим Docker Swarm и когда его использовать? — CloudSavvy ИТ

Иллюстрация с логотипом Docker

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

Эта функция поставляется в комплекте с Docker и включает все необходимое для развертывания приложений на узлах. Swarm Mode имеет декларативную модель масштабирования, в которой вы указываете количество необходимых реплик. Менеджер роя принимает меры, чтобы сопоставить фактическое количество реплик вашему запросу, создавая и уничтожая контейнеры по мере необходимости.

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

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

Создание собственного роя

Прежде чем продолжить, убедитесь, что у вас установлен Docker. Вам понадобится полный пакет Docker CE на каждой машине, которую вы хотите добавить в рой.

Назначьте одного из ваших хостов менеджером роя. Этот узел будет управлять кластером, отправляя запросы планирования контейнера другим узлам. Запустите docker swarm init на диспетчере, чтобы запустить процесс настройки кластера:

docker swarm init —advertise-addr 192.168.0.1

Замените IP-адрес реальным IP-адресом вашего управляющего узла. Команда выдаст команду docker swarm join, которую вы должны запустить на своих вторичных узлах. Затем они присоединятся к рой и получат право размещать контейнеры.

После добавления узлов запустите информацию о докере в диспетчере, чтобы проверить состояние кластера. Раздел Swarm выходных данных команды должен быть указан как «активный». Убедитесь, что количество «узлов» соответствует количеству добавленных вами узлов.

Вы можете получить более подробную информацию об узле, запустив docker node ls. Это показывает уникальный идентификатор каждого узла, его имя хоста и его текущий статус. Узлы, которые показывают доступность «активен» со статусом «готов», исправны и готовы поддерживать ваши рабочие нагрузки. В столбце «Статус менеджера» указаны узлы, которые также действуют как менеджеры роя. «Лидер» — это узел, несущий полную ответственность за кластер.

Развертывание контейнера

Когда ваши узлы будут готовы, вы можете развернуть контейнер в свой рой. В режиме Swarm для описания развертывания контейнеров используется понятие «службы». Каждая конфигурация службы ссылается на образ Docker и количество реплик для создания из этого образа.

docker service create —replicas 3 —name apache httpd: latest

Эта команда создает службу с использованием образа httpd: latest для веб-сервера Apache. Будут созданы три независимые реплики, обеспечивающие устойчивость к завершению работы контейнера и сбоям узлов. Реплики контейнеров на языке Docker Swarm называются «задачами».

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

Услуги масштабирования

Вы можете масштабировать сервисы в любое время с помощью команды docker service scale:

масштаб службы докеров apache = 5

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

Услуги также можно масштабировать с помощью обновления службы докеров:

обновление службы докеров apache —replicas = 5

При использовании этого варианта вы можете откатить изменение с помощью специальной команды:

откат службы докеров apache

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

Постоянные обновления

Режим Swarm поддерживает скользящие обновления, при которых экземпляры контейнеров масштабируются постепенно. Вы можете указать задержку между развертыванием обновленной службы на каждом узле в рое. Это дает вам время действовать в обратном направлении, если обнаруживаются проблемы. Вы можете быстро выполнить откат, так как не все узлы получат новую услугу.

Добавьте флаг —update-delay в команду масштабирования службы Docker, чтобы активировать непрерывные обновления. Задержка задается как комбинация часов h, минут m и секунд s. Менеджер роя обновит каждый экземпляр контейнера индивидуально. Вы можете настроить количество задач, обновляемых за одну операцию, с помощью флага —update-parallelism.

Вот как масштабировать службу до 10 реплик, обновляя три контейнера за раз с пятиминутной задержкой между каждым пакетом:

масштаб службы докеров —name apache —replicas = 10 —update-delay 5m —update-parallelism 3

Управляющие услуги

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

  • docker service inspect — проверка технических данных названной службы.
  • журналы службы docker — просмотр выходных данных журнала, связанных с именованной службой.
  • docker service ls — список всех запущенных служб.
  • docker service ps — отображение отдельных экземпляров контейнера, инкапсулированных определенной службой.
  • docker service rm — удалить службу со всеми ее репликами. Запрос на подтверждение отсутствует.

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

Параметры службы включают переменные среды, команды проверки работоспособности, настройки DNS, метки и условия перезапуска. Запущенные экземпляры контейнеров обычно не уничтожаются при обновлении службы докеров, если вы не меняете настройки, требующие восстановления для вступления в силу.

Открытие сетевых портов

Сетевые порты контейнеров отображаются с флагом —publish для создания службы докеров и обновления службы докеров. Это позволяет указать порт целевого контейнера и общедоступный порт для его предоставления.

docker service create —name apache —replicas 5 —publish published = 8080, target = 80 nginx: latest

Теперь вы можете подключиться к порту 8080 на любой ваших рабочих узлов для доступа к экземпляру службы NGINX. Это работает, даже если узел, к которому вы подключаетесь, на самом деле не выполняет одну из задач службы. Вы просто взаимодействуете с роем, а он заботится о сетевой маршрутизации. Этот подход называется «сеткой маршрутизации».

Альтернативный вариант позволяет публиковать порты контейнеров на отдельных узлах, где выполняются задачи. Добавьте mode = host к флагу —published, чтобы включить это. Служба будет доступна только на узлах, на которых она размещена. Это полезно в тех случаях, когда вы хотите подключиться к определенному экземпляру службы. Сетка маршрутизации рандомизирует экземпляр, к которому вы подключаетесь, независимо от узла, который вы используете для подключения.

Docker Swarm также поддерживает оверлейные сети. Они похожи на обычные сети Docker. Присоединение сервиса к сети позволяет его контейнерам связываться с любыми другими сервисами в сети.

docker service create —name service1 —network demo-network my-image: последняя служба docker create —name service2 —network demo-network my-image: latest

Задачи, созданные service1 и service2, смогут связываться друг с другом через оверлейную сеть. Сеть по умолчанию, называемая входящей, предоставляет стандартные функции сетки маршрутизации, описанные выше.

Вывод

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

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

Режим Docker Swarm выгодно отличается от альтернативных платформ оркестровки, таких как Kubernetes. Начать работу с ним проще, поскольку он интегрирован с Docker и требует меньшего количества концепций. Часто проще установить и поддерживать на самоуправляемом оборудовании, хотя предварительно упакованные решения Kubernetes, такие как MicroK8s, подорвали фактор удобства Swarm. Даже в этом случае режим Swarm остается жизнеспособным оркестратором для автономных рабочих нагрузок, особенно если вы ищете ориентированное на разработчика решение на основе интерфейса командной строки, которое менее требовательно к операционным группам.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.