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

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

Docker Swarm: обзор

Docker Swarm — это инструмент оркестровки, такой как Kubernetes, он используется для распределения рабочей нагрузки контейнеров на несколько узлов. Docker Swarm следует подходу Manager/Worker для достижения этой цели.

Узел менеджера в Swarm отвечает за обслуживание рабочих узлов, а также за увеличение или уменьшение масштаба рабочих узлов. Рекомендуется иметь несколько узлов-менеджеров в вашем Swarm, однако только одному менеджеру разрешено работать с рабочими узлами.

Поскольку Docker Swarm работает с несколькими разными узлами, вы не можете работать с ним с помощью Docker Desktop, вы можете либо инициализировать его в GCP или AWS, либо вы также можете использовать Docker Playground для доступа к нему. В этом уроке я буду использовать Docker Playground для создания экземпляров Swarm.

Инициализация Docker Swarm

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

$ docker swarm init --advertise-addr 192.168.0.7 --listen-addr 192.168.0.7

Выполнение приведенной выше команды приведет к следующему выводу:

Swarm initialized: current node (ybu9t9kosfbaxota19g28674k) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-13odsn16y9u0d835w3dnma13iphl0h3w38viyzv77dut7p44m5-4ic2nhq4iruo2kwwnt3trsflq 192.168.0.8:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

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

Команда --advertise-addr — это IP-адрес, который должен использовать другой узел для подключения к этому менеджеру, а --listen-addr — это IP-адрес, который должен прослушивать текущий менеджер.

Чтобы убедиться, что узел создан, вы можете запустить команду docker node ls, которая выдаст следующий вывод:

ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ybu9t9kosfbaxota19g28674k *   node1      Ready     Active         Leader           20.10.17

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

Добавьте рабочие узлы в Swarm

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

docker swarm join-token worker

Приведенная выше команда выводит следующий вывод:

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-13odsn16y9u0d835w3dnma13iphl0h3w38viyzv77dut7p44m5-4ic2nhq4iruo2kwwnt3trsflq 192.168.0.8:2377

Выходные данные возвращают команду, которую следует запустить, чтобы создать рабочий узел в этом Swarm. Теперь, чтобы создать новый рабочий узел, вам сначала нужно создать новый экземпляр в Docker Playground. Вы можете сделать это, нажав кнопку «Добавить новый экземпляр» на левой панели, как показано на изображении ниже.

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

$ docker swarm join --token SWMTKN-1-13odsn16y9u0d835w3dnma13iphl0h3w38viyzv77dut7p44m5-4ic2nhq4iruo2kwwnt3trsflq 192.168.0.8:2377

После выполнения вышеуказанной команды Docker возвращает сообщение с подтверждением, говорящее This node joined as a worker .

Теперь запустите команду docker node ls, чтобы просмотреть все созданные узлы. Выполнение этой команды должно привести к следующему выводу:

ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ybu9t9kosfbaxota19g28674k *   node1      Ready     Active         Leader           20.10.17
yuggya9ggqo4hwnx2mpwbpo5i     node2      Ready     Active                          20.10.17

Теперь повторите описанный выше процесс создания нового экземпляра и добавления его в Swarm в качестве рабочего еще раз. После этого вывод команды docker node ls должен вернуть следующее.

ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ybu9t9kosfbaxota19g28674k *   node1      Ready     Active         Leader           20.10.17
yuggya9ggqo4hwnx2mpwbpo5i     node2      Ready     Active                          20.10.17
kyqu4liznocghzv3ctrvihfq3     node3      Ready     Active                          20.10.17              

Добавление узлов менеджера

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

docker swarm join-token manager

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

To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-13odsn16y9u0d835w3dnma13iphl0h3w38viyzv77dut7p44m5-6zio6dbxe1c5yufw4zf9kzfi0 192.168.0.8:2377

Теперь скопируйте приведенную выше команду и создайте двух новых менеджеров. После этого ваш вывод docker node ls должен выглядеть следующим образом:

ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ybu9t9kosfbaxota19g28674k *   node1      Ready     Active         Leader           20.10.17
yuggya9ggqo4hwnx2mpwbpo5i     node2      Ready     Active                          20.10.17
kyqu4liznocghzv3ctrvihfq3     node3      Ready     Active                          20.10.17
vui946751xkbbjlhcq7f7s44l     node4      Ready     Active         Reachable        20.10.17
g3vfag2nptvskqx15c4s6bm31     node5      Ready     Active         Reachable        20.10.17

Заключение

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

В следующих блогах я намерен поделиться своими знаниями о более продвинутых вещах о DevOps, Python и Django. Если вас это интересует, то подумайте о том, чтобы подписаться на меня.