Docker Swarm: что это такое и когда использовать - Компьюти
Logo КОМПЬЮТИ

Docker Swarm: что это такое и когда использовать

Время на прочтение: 2 мин.

Docker Swarm — встроенный режим кластеризации Docker Engine. Он позволяет объединять несколько Docker-узлов и управлять контейнерными сервисами как кластером.

Swarm предназначен для задач, когда одного Docker-сервера становится недостаточно и требуется распределенное выполнение сервисов.

Что такое Swarm

Swarm состоит из узлов двух основных типов:

  • manager;
  • worker.

Manager отвечает за управление кластером и состоянием сервисов.

Worker выполняет задачи, назначенные кластером.

Архитектура

Упрощенно:

             Manager
            /       \
        Worker     Worker
          |          |
       Service    Service

В production рекомендуется использовать несколько manager-узлов для отказоустойчивости управления кластером.

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

На первом сервере:

docker swarm init

Docker выдаст команду, которую можно использовать для подключения worker-узлов.

Проверить:

docker node ls

Добавление worker

На другом сервере выполняется команда docker swarm join, которую предоставляет manager после docker swarm init.

После подключения:

docker node ls

покажет узлы кластера.

Docker service

Вместо обычного docker run в Swarm используется понятие service.

Например:

docker service create \
  --name web \
  --publish 80:80 \
  nginx

Проверить:

docker service ls

Масштабирование

Можно запустить несколько реплик:

docker service scale web=3

Проверить:

docker service ps web

Swarm распределит задачи между подходящими узлами.

Rolling update

Swarm позволяет обновлять сервис постепенно.

Например:

docker service update \
  --image nginx:alpine \
  web

Это может быть удобнее, чем вручную останавливать все контейнеры.

Swarm и Docker Compose

Compose и Swarm связаны, но не являются одним и тем же инструментом.

Compose удобен для описания многоконтейнерного приложения, в том числе на одном сервере.

Swarm добавляет кластерное управление.

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

Overlay networks

Для связи сервисов между несколькими Docker-узлами используются overlay networks.

Пример:

docker network create \
  --driver overlay \
  app-network

После этого сервисы могут взаимодействовать через распределенную сеть.

Swarm secrets

Swarm предоставляет механизм secrets для чувствительной информации.

Например:

printf "secret-value" | docker secret create db_password -

Список:

docker secret ls

Секреты можно подключать к сервисам.

Swarm configs

Для конфигурационных файлов используются configs.

Это позволяет отделять код контейнера от конфигурации.

Backup Swarm

Для восстановления Swarm особенно важно сохранить состояние manager-узлов.

Docker указывает каталог:

/var/lib/docker/swarm/

как место хранения swarm state. При backup также нужно учитывать unlock key, если включена auto-lock.

Когда Swarm подходит

Swarm может быть интересен, если:

  • команда уже использует Docker;
  • требуется относительно простой кластер;
  • нужна встроенная оркестрация;
  • не хочется вводить более сложную платформу;
  • количество сервисов умеренное.

Когда Swarm может быть избыточен

Для одного VPS обычно достаточно:

Docker + Compose

Если инфраструктура большая и требуется широкий набор функций оркестрации, могут рассматриваться Kubernetes и другие платформы.

Swarm vs Compose

ВозможностьComposeSwarm
Один серверОтличноМожно
Несколько серверовОграниченноДа
МасштабированиеДа, локальноДа
ОркестрацияОграниченнаяДа
Overlay networkВ специальных сценарияхДа
SecretsДа в определенных сценарияхВстроенный Swarm secrets
СложностьНизкаяВыше

Типичные ошибки

Использовать Swarm без необходимости

Для небольшого сайта он может только усложнить инфраструктуру.

Нет quorum manager-узлов

Потеря большинства manager-узлов может повлиять на управление кластером.

Нет backup

Состояние Swarm необходимо резервировать.

Не продумано хранение данных

Stateless-сервисы масштабировать проще, чем базы данных с локальными volumes.

Итог

Docker Swarm — способ превратить несколько Docker Engine в управляемый кластер.

Для небольшого проекта часто достаточно Docker Compose. Swarm имеет смысл рассматривать, когда появляется потребность в кластеризации, репликах, распределении сервисов и rolling updates.

Читайте также:


Читайте также:

Приглашаем поучаствовать в обсуждении статьи:

Комментариев 0