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. Если вас это интересует, то подумайте о том, чтобы подписаться на меня.