Рубрики
Uncategorized

Все, что вам нужно знать о Docker Swarm

Введение Docker — это бесплатная и открытая структура для строительства, доставки и запуска приложения … Tagged с Docker, DevOps, Linux, Swarm.

Вступление

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

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

Docker Swarm

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

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

Docker Swarm Architecture

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

Узел

Узел — это экземпляр двигателя Docker, который является частью роя. Это также можно рассматривать как сервер Docker. Один или несколько узлов может работать на одном физическом устройстве или облачном сервере. Но в разработке эти узлы роя кластер могут распространяться на несколько машин на облаке. Существует два типа узлов, узел менеджера и узел работника.

  • Менеджер На приведенном выше изображении мы видим менеджера роя, который отвечает за управление тем, что делает работник Docker. Он поддерживает отслеживание всех своих работников. Docker Manager знает, над какой работой работает работник, какую задачу она была выделена, как задания распространяются на все работы, и работает ли работник. API Docker Manager используется для создания нового сервиса и организации его. Назначает задачи работникам, использующим IP -адреса работника.

  • Рабочий Docker Manager обладает полной энергией над работником Docker. Рабочий Docker принимает и выполняет задачи/инструкции, которые Docker Manager делегирован в нем. Работник Docker — это клиент -агент, который информирует менеджера о состоянии узла, который он работал через API REST по протоколу HTTP.

Сервисы

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

  • Балансировка нагрузки, чтобы выявить ресурсы, которые вы хотите сделать извне на рой, Swarm Manager использует балансировку входной нагрузки. Swarm Manager может автоматически добавить опубликованный порт в службу автоматически или вручную настроить его. Если вы не упоминаете порт, Swarm Manager назначает порт между 30000 и 32767 операции.

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

Рой функции

Посмотрев на то, что такое рой Docker, и связанная с ним терминология, давайте посмотрим, каковы различные функции, которые режим Swarm предлагает на двигателе Docker

  • Используйте CLI Docker Engine, чтобы создать рой двигателей Docker, где вы можете развернуть прикладные службы. Вам не нужно дополнительное программное обеспечение для оркестровки для создания или управления роем.
  • Двигатель Docker управляет некоторой специализацией во время выполнения, а не управляя различием между ролями узлов во время развертывания. Двигатель Docker может использоваться для развертывания как менеджера, так и рабочих узлов. Это означает, что рой может быть создан только на изображении диска.
  • Docker Engine использует декларативный подход к определению оптимального состояния различных ресурсов вашего стека приложений. Например, веб-фронт-сервер с службами очереди сообщений и базой данных бэкэнд может быть описан как приложение.
  • Вы должны объявить количество задач, которые будут выполняться с каждой службой. Когда менеджер Swarm масштабируется вверх или вниз (это означает, что мы увеличиваем или уменьшаем количество услуг или контейнеров), он автоматически адаптируется для сохранения желаемой среды, добавляя или удаляя задачи.
  • Узел Swarm Manager непрерывно проверяет статус кластера и примиряет любые несоответствия между текущим состоянием и целевым состоянием. Например, вы настраиваете услугу из 10 реплик контейнеров на 5 рабочих, а две из реплики на одном из аварий работников. Затем менеджер создает еще две реплики и назначает их работнику, который работает и работает.
  • Можно указать сетевое наложение для ваших услуг. Когда приложение инициализируется или изменяется, диспетчер Swarm немедленно назначает адреса контейнерам в сети наложения. Порты могут быть показаны внешнему балансированию нагрузки для утилит. Внутренне вы должны решить, как контейнеры обслуживания могут быть распределены между узлами.

Теперь, давайте вступим в какой -то практический, мы собираемся создать кластер, добавить два рабочих узла, а затем развернуть услуги в этот рой. Предварительные условия:

  1. Три машины Linux, которые могут общаться по сети
  2. Докер установил на всех трех из них.

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

При создании экземпляров EC2 добавьте следующие правила в группе безопасности следующим образом: должны быть доступны следующие порты. В некоторых системах эти порты открыты по умолчанию.

  • Порт TCP 2377 для коммуникаций управления кластерами
  • TCP и UDP -порт 7946 для связи между узлами
  • UDP -порт 4789 для сетевого трафика наложения

При создании машины менеджера добавьте эти правила. Затем, создавая рабочие узлы, используйте ту же группу безопасности, созданную для машины Manager.

Далее, SSH во всех машинах и установите Docker-двигатель. Используйте следующие команды, чтобы установить Docker-двигатель на всех трех машинах.

  • Обновите и добавьте пакеты индекса установки APT, чтобы APT мог использовать хранилище HTTPS.
$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  • Добавьте официальный ключ GPG от Docker:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 
  • Используйте следующую команду для настройки стабильного репозитория
$ echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • Установите Docker Engine
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

Повторите это для всех трех машин.

Вы можете создать рой после того, как выполните все шаги настройки. Убедитесь, что хост -машины запускают Docker Engine Daemon. Откройте терминал и SSH на компьютере, где должен быть выполнен узел менеджера.

Запустите следующую команду, чтобы создать новый рой:

$ docker swarm init --advertise-addr 

У нас есть машина менеджера с IP 172.31.80.181, поэтому команда:

$ docker swarm init --advertise-addr 172.31.80.181

Флаг-Advertise-ADDR настраивает узел менеджера как 172.31.80.181, чтобы опубликовать свой адрес. Другие узлы роя должны иметь доступ к IP -адресу менеджера. Вывод состоит из команд для прикрепления новых узлов к рому. Узлы будут входить в качестве менеджеров или работников в соответствии с стоимостью флага.

Чтобы увидеть текущее состояние, вы можете использовать информацию Docker:

$ sudo docker info

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

Для просмотра информации об узлах Используйте команду

$ docker node ls

* Рядом с идентификатором представляет, что это узел, к которому мы сейчас подключены. Режим Swarm Docker двигатель автоматически назвал узлы HostName Машины.

Добавление рабочих узлов

Пришло время добавить рабочие узлы в рой, созданный выше. SSH в машине, где вы хотите запустить своего работника. Теперь мы должны запустить вывод Docker Swarm Init в качестве команды в этом рабочем терминале:

$ docker swarm join --token SWMTKN-1-05ikz9ituzi3uhn1dq1r68bywhfzczg260b9zkhigj9bubomwb-a003dujcz7zu93rlb48wd0o87 172.31.80.181:2377 

Вы можете выполнить следующую команду в узле менеджера, чтобы получить команду JOUN JOUN, если ваша команда недоступна:

$ docker swarm join-token worker

Сделайте то же самое с другим работником. SSH в другую машину и запустите команду JOIN.

Чтобы просмотреть рабочие узлы, откройте терминал и SSH в машине, которая запускает узл менеджера, и выполнить команду Docker Node LS:

$ docker node ls

Узлы менеджера в рой определяются менеджером столбцов. Worker1 и Worker2 идентифицируются как рабочие узлы пустым состоянием в этом столбце.

Развернуть услуги на рой

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

Откройте терминал в узел менеджера после SSH и запустите следующую команду:

$ docker service create --replicas 1 --name helloworld alpine ping docker.com

Давайте разбим вышеупомянутую команду:

  • Docker Service Create: чтобы создать сервис
  • -Replicas: Этот флаг указывает на желаемое состояние 1-го экземпляра.
  • -Пе-имени: используется для названия службы
  • Alpine Ping Docker.com: Это указывает на то, что службы будут запускать Alpine Linux, а основная команда для запуска внутри экземпляра или службы — Ping Docker.com

Чтобы увидеть список запуска служб. Запустите команду ниже:

$ docker service ls

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

Вывод

В этой статье мы начали с описания Docker, затем обсудили необходимость в нескольких хостах Docker. Затем мы описали, что такое Docker Swarm, его применение и его работа через архитектуру Docker Swarm, мы также рассмотрели, разные терминологии Docker Swarm, такие как менеджерный узел и узел работника. После того, как мы тщательно поняли рой Docker, мы заявили, что он внедрил его или запустил услуги в кластере роя. Мы начали с создания 3 Linux -хоста в AWS в качестве экземпляров EC2 вместе с конфигурацией группы безопасности (добавив правила TCP и UDP). Мы посмотрели, как создать или инициализировать рой кластер через узел менеджера, затем добавили пару рабочих узлов в один и тот же кластер. В заключение мы добавили сервис, работающий на Alpine Linux, чтобы запустить команду Ping. Также это моя первая статья о Dev.to, и она действительно любила писать ее.

понравился пост?

Оригинал: «https://dev.to/afif_ahmed/everything-you-need-to-know-about-docker-swarm-3dck»