Docker Swarm для оркестровки контейнеров

Все о Docker Swarm и о том, как он управляет и управляет всеми контейнерами в кластере.


Что такое Docker Swarm?

Docker Swarm – это режим работы с кластером Docker Engines, отсюда и название Swarm. Кластер хостов Docker работает в режиме роя, состоящем из менеджеров и рабочих. Экземпляры механизма докера, которые участвуют в рое, называются узлами.

Развертывание Swarm производственного уровня состоит из докеров, распределенных по нескольким серверам..

Зачем это использовать? – Контейнерная оркестровка

Когда вы работаете в производственной среде, на сотнях докер-контейнеров будет работать несколько приложений. Управление всеми этими контейнерами может быть большой болью для всех инженеров DevOps; Вот где Docker Swarm поможет вам. С легкостью управляет и управляет кластером, в котором работают несколько док-контейнеров..

Ниже приведены некоторые из его особенностей:

  • Высокая доступность – стремится предложить время простоя или простои.
  • Балансировка нагрузки – автоматически распределяет ресурсы и запросы на другие узлы в кластере, если какой-либо узел отказывает.
  • Децентрализованный – несколько узлов менеджера работают в производственной среде; следовательно, кластер никогда не зависит от одного управляющего узла.
  • Масштабируемость – с помощью одной команды docker swarm вы можете легко увеличивать или уменьшать контейнеры в кластере.

Контейнеры для оркестровки Docker

Теперь, когда вы знакомы с основами Docker Swarm, давайте рассмотрим пример его реализации..

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

менеджер1: 192.168.56.104

работник1: 192.168.56.105

работник2: 192.168.56.102

Чтобы инициализировать режим роя в докере, выполните команду ниже на узле менеджера. Флаг –advertise-addr используется для рекламы самого себя на узлах, которые могут присоединиться к кластеру..

[Электронная почта защищена]: ~ $ docker swarm init –advertise-addr 192.168.56.104

Рой инициализирован: текущий узел (lssbyfzuiuh3sye1on63eyixf) теперь является менеджером.

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

docker swarm join – token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

Чтобы добавить менеджера в этот рой, запустите ‘docker swarm join-token manager’ и следуйте инструкциям.

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

Запуск токена на узле worker1.

[Электронная почта защищена]: ~ $ docker swarm join –token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

Этот узел присоединился к рой как рабочий.

Запуск токена на узле worker2.

[Электронная почта защищена]: ~ $ docker swarm join –token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

Этот узел присоединился к рой как рабочий.

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

[Электронная почта защищена]: ~ $ docker node ls

ID HOSTNAME СТАТУС НАЛИЧИЕ МЕНЕДЖЕРА СТАТУС ДВИГАТЕЛЬ ВЕРСИЯ

lssbyfzuiuh3sye1on63eyixf * manager1 Ready Active Leader 18.09.6

utdr3dnngqf1oy1spupy1qlhu worker1 Готов Актив 18.09.6

xs6jqp95lw4cml1i1npygt3cg worker2 Готов Активен 18.09.6

Давайте создадим образ докера geekflare_mongodb, который мы использовали в Учебном пособии по Dockerfile.

Докер build -t geekflare_mongodb .

Запустите контейнер образа Docker MongoDB, создав службу роя. 27017 – номер порта, на котором выставлен MongoDB.

[Электронная почта защищена]: ~ $ docker service create –name "Монго-Container" -p 27017: 27017 geekflare_mongodb

image geekflare_mongodb: последняя не может быть доступна в реестре для записи своего дайджеста. Каждый узел будет обращаться к geekflare_mongodb: последний независимо, возможно, приводя к тому, что разные узлы работают с разными версиями образа..

kok58xa4zi05psh3uy6s5x9e6

общий прогресс: 1 из 1 задач

1/1: работает

проверить: сервис конвергирован

Проверьте, запущена ли служба роя Docker. MODE replicated означает, что контейнер был реплицирован на все узлы кластера, а REPLICAS 1/1 означает, что в настоящий момент работает только одна служба роя.

[Электронная почта защищена]: ~ $ docker service ls

ID ИМЯ РЕЖИМ РЕПЛИКИ ИЗОБРАЖЕНИЯ ПОРТЫ

kok58xa4zi05 Монго-контейнер реплицированный 1/1 geekflare_mongodb: последний *: 27017->27017 / TCP

Давайте проверим, на каком узле в кластере работает этот единственный сервис. Он работает на узле manager1.

[Электронная почта защищена]: ~ $ docker service ps Mongo-Container

ID ИМЯ ИЗОБРАЖЕНИЕ УЗЕЛ ЖЕЛАЕМЫЕ ГОСУДАРСТВЕННЫЕ ТЕКУЩИЕ СОСТОЯНИЯ ОШИБКИ

jgqjo92rbq23 Mongo-Container.1 geekflare_mongodb: последний менеджер1 Работает Работает около минуты назад

Запустите команду docker ps, чтобы получить более подробную информацию о контейнере, в котором работает этот сервис Swarm..

[Электронная почта защищена]: ~ $ docker ps

КОНТЕЙНЕР ID ИМИДЖ КОМАНДА СОЗДАННЫЕ СТАТУС ИМЕНА ПОРТОВ

05d77e7b4850 geekflare_mongodb: последние   "/ bin / sh -c usr / bin /…"   2 минуты назад Up 2 минуты 27017 / tcp Mongo-Container.1.jgqjo92rbq23sv01hrufdigtx

Вы можете запустить службу роя в “Глобальный” режим также вместо «реплицируемого» режима по умолчанию. В глобальном режиме выполняется одна задача службы роя на всех узлах кластера..

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

[Электронная почта защищена]: ~ $ docker service rm Mongo-Container

Монго-Container

Запустите службу swarm внутри контейнера Docker в глобальном режиме, используя флаг –mode.

[Электронная почта защищена]: ~ $ docker service create –name "Монго-Container" -p 27017: 27017 – mode global geekflare_mongodb

image geekflare_mongodb: последняя не может быть доступна в реестре для записи своего дайджеста. Каждый узел будет обращаться к geekflare_mongodb: последний независимо, возможно, приводя к тому, что разные узлы работают с разными версиями образа..

mfw8dp0zylffppkllkcjl8391

общий прогресс: 3 из 3 задач

utdr3dnngqf1: работает

lssbyfzuiuh3: работает

xs6jqp95lw4c: работает

проверить: сервис конвергирован

Проверьте, запущена ли служба роя в глобальном режиме. Так как в кластере работают три узла (1 менеджер, 2 работника), поэтому количество реплик равно 3.

[Электронная почта защищена]: ~ $ docker service ls

ID ИМЯ РЕЖИМ РЕПЛИКИ ИЗОБРАЖЕНИЯ ПОРТЫ

mfw8dp0zylff Mongo-Container global 3/3 geekflare_mongodb: последняя *: 27017->27017 / TCP

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

[Электронная почта защищена]: ~ $ docker service ps Mongo-Container

ID ИМЯ ИЗОБРАЖЕНИЕ УЗЕЛ ЖЕЛАЕМЫЕ ГОСУДАРСТВЕННЫЕ ТЕКУЩИЕ СОСТОЯНИЯ ОШИБКИ

zj2blvptkvj6 Mongo-Container.xs6jqp95lw4cml1i1npygt3cg geekflare_mongodb: последний работник2 Бег Бежит около минуты назад

3eaweijbbutf Mongo-Container.utdr3dnngqf1oy1spupy1qlhu geekflare_mongodb: последний работник1 Работает Работает около минуты назад

yejg1o2oyab7 Mongo-Container.lssbyfzuiuh3sye1on63eyixf geekflare_mongodb: последний менеджер1 Бег Бег около минуты назад

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

[Электронная почта защищена]: ~ $ docker service rm Mongo-Container

Монго-Container

Используйте флаг –replicas в команде и укажите количество реплик, которые вы хотите использовать для службы роя. Например, я хочу иметь две копии сервиса Swarm:

[Электронная почта защищена]: ~ $ docker service create –name "Монго-Container" -p 27017: 27017 –replicas = 2 geekflare_mongodb

image geekflare_mongodb: последняя не может быть доступна в реестре для записи своего дайджеста. Каждый узел будет обращаться к geekflare_mongodb: последний независимо, возможно, приводя к тому, что разные узлы работают с разными версиями образа..

4yfl41n7sfak65p6zqwwjq82c

общий прогресс: 2 из 2 задач

1/2: работает

2/2: работает

проверить: сервис конвергирован

Проверьте сервисы роя, в настоящее время работающие. Вы можете видеть, что одна реплика работает на узле manager1, а другая – на узле worker1..

[Электронная почта защищена]: ~ $ docker service ps Mongo-Container

ID ИМЯ ИЗОБРАЖЕНИЕ УЗЕЛ ЖЕЛАЕМЫЕ ГОСУДАРСТВЕННЫЕ ТЕКУЩИЕ СОСТОЯНИЯ ОШИБКИ

xukodj69h79q Mongo-Container.1 geekflare_mongodb: последний работник1 Бег Бег 9 секунд назад

e66zllm0foc8 Mongo-Container.2 geekflare_mongodb: последний менеджер1 Работает Работает 9 секунд назад

Перейдите на узел worker1 и проверьте, работает ли в док-контейнере служба swarm..

[Электронная почта защищена]: ~ $ docker ps

КОНТЕЙНЕР ID ИМИДЖ КОМАНДА СОЗДАННЫЕ СТАТУС ИМЕНА ПОРТОВ

5042b7f161cb geekflare_mongodb: последние   "/ bin / sh -c usr / bin /…"   Около минуты назад вверх около минуты 27017 / tcp Mongo-Container.1.xukodj69h79q3xf0pouwm7bwv

Чтобы остановить этот контейнер, выполните команду ниже.

[Электронная почта защищена]: ~ $ docker stop 5042b7f161cb

5042b7f161cb

Теперь с узла manager1, если вы проверите, на каких узлах запущена служба, вы увидите, что она работает на узле manager1 и worker2. CURRENT STATE узла worker1 – это завершение работы (так как мы остановили контейнер, на котором запущена служба). Но поскольку для этой службы должны работать две реплики, на работнике 2 была запущена другая служба..

Вот как вы достигаете высокой доступности с помощью Docker Swarm.

[Электронная почта защищена]: ~ $ docker service ps Mongo-Container

ID ИМЯ ИЗОБРАЖЕНИЕ УЗЕЛ ЖЕЛАЕМЫЕ ГОСУДАРСТВЕННЫЕ ТЕКУЩИЕ СОСТОЯНИЯ ОШИБКИ

cd2rlv90umej Mongo-Container.1 geekflare_mongodb: последний работник2 Бег Бег 30 секунд назад

xukodj69h79q \ _ Mongo-Container.1 geekflare_mongodb: последний рабочий1 Сбой завершения работы 38 секунд назад    "задача: ненулевой выход (137)"

e66zllm0foc8 Mongo-Container.2 geekflare_mongodb: последний менеджер1 Бег Бег 3 минуты назад

Очень легко увеличивать или уменьшать док-контейнеры. Команда ниже увеличит контейнер монго до 5.

[Электронная почта защищена]: ~ $ docker service scale Mongo-Container = 5

Монго-Контейнер масштабируется до 5

общий прогресс: 5 из 5 задач

1/5: работает

2/5: работает

3/5: работает

4/5: работает

5/5: работает

проверить: сервис конвергирован

Проверьте, сколько реплик контейнера mongo запущено сейчас, должно быть 5.

[Электронная почта защищена]: ~ $ docker service ls

ID ИМЯ РЕЖИМ РЕПЛИКИ ИЗОБРАЖЕНИЯ ПОРТЫ

Монго-Контейнер 4yfl41n7sfak, реплицированный 5/5 geekflare_mongodb: последний *: 27017->27017 / TCP

Проверьте, где эти 5 реплик работают в кластере. 1 реплика работает на узле manager1 и 2 реплики на обоих рабочих узлах каждый.

[Электронная почта защищена]: ~ $ docker service ps Mongo-Container

ID ИМЯ ИЗОБРАЖЕНИЕ УЗЕЛ ЖЕЛАЕМЫЕ ГОСУДАРСТВЕННЫЕ ТЕКУЩИЕ СОСТОЯНИЯ ОШИБКИ

cd2rlv90umej Mongo-Container.1 geekflare_mongodb: последний работник2 Бег Бег 2 минуты назад

xukodj69h79q \ _ Mongo-Container.1 geekflare_mongodb: последний рабочий1 Сбой завершения работы 2 минуты назад     "задача: ненулевой выход (137)"

e66zllm0foc8 Mongo-Container.2 geekflare_mongodb: последний менеджер1 Бег Бег 5 минут назад

qmp0gqr6ilxi Mongo-Container.3 geekflare_mongodb: последний работник2 Бег Бег 47 секунд назад

9ddrf4tsvnu2 Mongo-Container.4 geekflare_mongodb: последний работник1 Бег Бег 46 секунд назад

e9dhoud30nlk Mongo-Container.5 geekflare_mongodb: последний работник1 Бег Бег 44 секунды назад

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

[Электронная почта защищена]: ~ $ docker обновление узла – сток менеджера1

Manager1

Проверьте доступность узла управления.

[Электронная почта защищена]: ~ $ docker node ls

ID HOSTNAME СТАТУС НАЛИЧИЕ МЕНЕДЖЕРА СТАТУС ДВИГАТЕЛЬ ВЕРСИЯ

lssbyfzuiuh3sye1on63eyixf * manager1 Ready Drain Leader 18.09.6

utdr3dnngqf1oy1spupy1qlhu worker1 Готов Актив 18.09.6

xs6jqp95lw4cml1i1npygt3cg worker2 Готов Активен 18.09.6

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

[Электронная почта защищена]: ~ $ docker service ps Mongo-Container

ID ИМЯ ИЗОБРАЖЕНИЕ УЗЕЛ ЖЕЛАЕМЫЕ ГОСУДАРСТВЕННЫЕ ТЕКУЩИЕ СОСТОЯНИЯ ОШИБКИ

cd2rlv90umej Mongo-Container.1 geekflare_mongodb: последний работник2 Бег Бег 5 минут назад

xukodj69h79q \ _ Mongo-Container.1 geekflare_mongodb: последний рабочий1 Сбой завершения работы 5 минут назад      "задача: ненулевой выход (137)"

qo405dheuutj Mongo-Container.2 geekflare_mongodb: последний работник1 Бег Бег 41 секунда назад

e66zllm0foc8 \ _ Mongo-Container.2 geekflare_mongodb: последний менеджер1 Завершение работы Завершение работы 44 секунды назад

qmp0gqr6ilxi Mongo-Container.3 geekflare_mongodb: последний работник2 Бег Бег 3 минуты назад

9ddrf4tsvnu2 Mongo-Container.4 geekflare_mongodb: последний работник1 Бег Бег 3 минуты назад

e9dhoud30nlk Mongo-Container.5 geekflare_mongodb: последний работник1 Бег Бег 3 минуты назад

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

TAGS:

  • докер

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map