Если вы контейнеризировали свой рабочий процесс разработки, вы согласитесь, что Docker — один из лучших вариантов для контроля версий. Однако Docker Swarm — это одна из функций Docker, используемая для организации сложных приложений.
Поначалу рабочий механизм Docker Swarm может быть трудно взломать. Но не беспокойтесь, мы разберем это в этой статье. Так что же такое Docker Swarm? Зачем это использовать? И как это работает?
Что такое Docker Swarm и как он работает?
Docker Swarm относится к группе узлов (компьютеров) Docker, объединенных в сеть в виде кластера для выполнения определенных задач. Каждый узел Docker в этом кластере является узлом, также называемым рабочим узлом.
Чтобы обеспечить эффективное распределение задач, вам нужен управляющий узел. В идеале инициализация режима Docker Swarm начинается с узла-менеджера, а последующие узлы становятся рабочими.
Как оператор, вам нужно только взаимодействовать с управляющим узлом, который передает инструкции рабочим. Рабочие узлы неизменно получают распределение задач от управляющего узла и соответственно выполняют их.
Однако узел менеджера также может участвовать в выполнении задачи (в качестве работника) или напрямую управлять лицом. Вы можете предотвратить планирование задач в диспетчере, переключив его состояние с активный к осушать. Но ваше решение назначить эту двойную функцию может зависеть от нескольких факторов. По сути, вы хотите убедиться, что у него достаточно ресурсов для обработки нескольких ролей, прежде чем делать это.
Узлы выходят из строя. Таким образом, управляющий узел активно отслеживает состояние каждого рабочего узла и активирует отказоустойчивый механизм для перепланирования задачи с отказавшего узла на другой.
Но что, если узел менеджера также выйдет из строя? Интересно, что рой продолжает работать. Единственная ловушка заключается в том, что вы больше не сможете общаться с управляющим узлом для управления кластером.
Обычный отказоустойчивый подход для предотвращения этого — назначить роль менеджера многим узлам (Docker рекомендует не более семи на кластер). Затем вы можете выбрать из них основной узел менеджера. В случае сбоя основного менеджера его роль берет на себя один из резервных менеджеров.
Однако вам не нужно беспокоиться о переключении ролей между узлами или об обслуживании состояния в кластере. Об этом позаботится алгоритм консенсуса плота (отказоустойчивый метод), встроенный в Docker SwarmKit.
Зачем использовать Docker Swarm?
Docker Swarm удобен для развертывания сложных приложений с высокими перспективами масштабирования. Одним из основных вариантов его использования является децентрализация микросервисов. Затем каждый микросервис использует аналогичный контейнер с контейнерами на других рабочих узлах.
Еще одна причина использования Docker Swarm заключается в том, что несколько хостов одновременно выполняют задачи в кластере. Это отличается от Docker Compose, который позволяет запускать несколько контейнеров только на одном движке Docker.
Этот масштабируемый атрибут Docker Swarm позволяет приложениям быть постоянно доступными с нулевой задержкой. Это даже одна из причин, по которой вы хотите выберите Docker среди других инструментов виртуализации.
И что еще? В отличие от отдельных контейнеров Docker, где контейнер останавливается при сбое, Docker Swarm автоматически перераспределяет задачи между доступными рабочими узлами при сбое одного из них.
Docker Swarm также сохраняет резервную копию каждого состояния. Таким образом, вы всегда можете вернуть новые конфигурации роя в состояние прежних. Скажем, узел менеджера в предыдущем рое выходит из строя; вы можете запустить новый кластер с большим количеством управляющих узлов и вернуть его, чтобы адаптировать конфигурацию предыдущего.
Также важно отметить, что взаимодействие между узлом менеджера и рабочими узлами является безопасным.
Докер имеет много альтернатив, и один из ближайших — Kubernetes. Однако Docker Swarm прост в использовании и более автоматизирован. Например, хотя в некоторых других инструментах оркестровки, таких как Kubernetes, может потребоваться балансировка нагрузки вручную, Docker Swarm поддерживает автоматическую балансировку нагрузки, что упрощает жизнь DevOps.
Архитектура Docker Swarm
Архитектура Docker Swarm вращается вокруг сервисов, узлов и задач. Тем не менее, каждый из них играет свою роль в успешной работе стека.
Услуги
Служба Docker Swarm подробно описывает конфигурацию образа Docker, который запускает все контейнеры в рое. Он включает информацию о задачах в кластере. Например, услуга может описывать Настройка докеризованного SQL-сервера.
Когда вы запускаете службу, она заставляет узел менеджера синхронизироваться с его конфигурациями. Затем узел-менеджер запускает остальные рабочие узлы в соответствии с заданными параметрами службы.
Сервисы в Docker Swarm могут быть глобальными или реплицируемыми.
Разница между ними заключается в том, что если глобальные службы определяют только одну задачу для всех узлов в кластере, то реплицированные службы определяют количество задач на узел.
Узлы
Узел в Docker Swarm — это экземпляр всей среды выполнения Docker, также известный как механизм Docker. Узлы Swarm могут быть физическими или виртуальными машинами. Думайте об этом как о сети компьютеров, на которых запущены похожие процессы (контейнеры).
Однако обычно узлы охватывают несколько компьютеров и серверов, на которых работает механизм Docker в реальных приложениях. И, как упоминалось ранее, узел может быть либо управляющим, либо рабочим узлом, в зависимости от роли.
Узел-менеджер прослушивает сердцебиение роя и управляет рабочими узлами, которые выполняют задачи, назначенные им узлом-менеджером. Как указывалось ранее, в рое может быть более одного управляющего узла. Но в идеале постарайтесь ограничить число до семи, так как добавление слишком большого количества управляющих узлов может снизить производительность роя.
Задачи
Задача определяет работу, назначенную каждому узлу в Docker Swarm. В фоновом режиме планирование задач в Docker Swarm запускается, когда оркестратор создает задачи и передает их планировщику, который создает экземпляр контейнера для каждой задачи.
Затем узел менеджера использует планировщик для назначения и переназначения задач узлам в соответствии с требованиями и указанными в службе Docker.
Докер Рой против. Docker Compose: в чем отличия?
Люди часто используют Docker Compose и Docker Swarm как синонимы. Хотя оба предполагают запуск нескольких контейнеров, они разные.
В то время как Docker Compose позволяет запускать несколько контейнеров на одном хосте, Docker Swarm распределяет их по нескольким механизмам Docker в кластере.
Вы используете Docker Compose, когда вам нужно развернуть отдельные контейнеры для каждой службы в вашем приложении. Таким образом, когда один компонент выходит из строя, он не мешает другим. Однако при сбое хост-компьютера происходит сбой всего приложения.
Однако Docker Swarm помогает запускать множество контейнеров на кластерных узлах. Таким образом, каждый компонент вашего приложения находится на нескольких узлах. И когда один узел, обрабатывающий компонент приложения, выходит из строя, рой выделяет свою задачу другому узлу в кластере и перепланирует запущенные задачи, предотвращая простои.
Следовательно, хотя у вас могут быть простои в Docker Compose, Docker Swarm гарантирует, что ваше приложение продолжит работу с помощью серверов резервного копирования (рабочих узлов). Однако Docker 1.13 поддерживает развертывание Docker Compose в режиме Swarm с использованием развертывание стека докеров команда.
Docker Swarm помогает развертывать сложные приложения
Контейнеризация превзошла виртуальные машины в разработке программного обеспечения для непрерывной интеграции и непрерывной доставки (CI/CD). Таким образом, понимание тонкостей механизма Docker Swarm является плюсом, если вы хотите стать бесценным экспертом DevOps.
Вы, вероятно, знаете, как раскрутить контейнер Docker или даже запустить Docker Compose для нескольких контейнеров на одном хосте. Но Docker Swarm удобнее для развертывания приложений со сложной архитектурой. Он разбивает процессы на блоки, улучшает доступ во время выполнения и снижает или даже устраняет вероятность простоя.