Docker Swarm на VPS: простая оркестрация
Kubernetes мощный, но тяжёлый. Docker Swarm даёт кластер, масштабирование и обновления без простоя — на встроенных средствах Docker, за десять минут настройки.
Содержание
Swarm против Kubernetes
['Swarm — родной режим кластеризации Docker. Он объединяет несколько VPS в единый пул, распределяет контейнеры между ними, следит за их живучестью и умеет катить обновления по одной реплике. При этом синтаксис — тот же знакомый compose, а порог входа в разы ниже, чем у Kubernetes.', 'Для небольшого и среднего проекта, которому нужна отказоустойчивость на 2-4 серверах, Swarm — рациональный выбор. Несколько VPS MAATRIX в разных локациях (UK и US) дают географическое разнесение узлов.', 'Ключевые понятия Swarm: manager хранит состояние кластера и принимает решения, worker просто выполняет задачи, service — описание того, что должно работать, а task — конкретный запущенный контейнер этого сервиса. Manager-ноды используют алгоритм консенсуса Raft, поэтому их держат нечётное число: 1, 3 или 5. Три manager переживают падение одного, пять — двух.']Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS под Swarm-кластерИнициализация кластера
['На первом сервере (будущий manager) инициализируем Swarm, указав его внешний IP:', 'docker swarm init --advertise-addr 203.0.113.10', 'Команда выведет токен и готовую строку для подключения воркеров. На остальных VPS выполняем её:', 'docker swarm join --token SWMTKN-1-xxxx 203.0.113.10:2377', 'Проверяем состав кластера с manager-ноды:', 'docker node ls', 'Для кластера нужно открыть между узлами порты 2377 (управление), 7946 (обмен состоянием) и 4789 (overlay-сеть).']
Деплой сервиса и масштабирование
['Запускаем сервис с тремя репликами — Swarm сам разложит их по нодам:', 'docker service create --name web --replicas 3 -p 80:80 nginx:alpine\ndocker service ls\ndocker service ps web', 'Масштабирование на лету — одна команда:', 'docker service scale web=6', 'Если нода отвалится, Swarm перезапустит её реплики на живых узлах. Это и есть отказоустойчивость из коробки.', 'Важная фишка — встроенный балансировщик (routing mesh). Порт 80 сервиса доступен на любой ноде кластера, даже если конкретная реплика запущена на другой. Запрос попадает на любой узел и автоматически перенаправляется к живому контейнеру. Это снимает необходимость во внешнем балансировщике для простых случаев: достаточно направить DNS на любой из узлов.', 'Ограничить размещение можно метками и constraints — например, гонять базу только на нодах с быстрым диском:', "docker service create --name db \\\n --constraint 'node.labels.disk==nvme' \\\n --replicas 1 postgres:16-alpine"]
Стеки через docker stack deploy
['Тот же compose-файл (с секцией deploy) разворачивается в кластер одной командой. Пример с rolling-обновлением:', 'services:\n web:\n image: nginx:alpine\n ports:\n - "80:80"\n deploy:\n replicas: 4\n update_config:\n parallelism: 1\n delay: 10s\n restart_policy:\n condition: on-failure', 'docker stack deploy -c stack.yml myapp\ndocker stack services myapp', 'При docker service update --image nginx:1.27 myapp_web Swarm обновит реплики по одной с паузой в 10 секунд — пользователи не заметят простоя.']
Секреты и частые ошибки
['Пароли храните в Swarm secrets, а не в переменных окружения — они шифруются и монтируются в контейнер как файл:', 'echo "s3cret" | docker secret create db_pass -\ndocker service update --secret-add db_pass web', '- Закрытые порты между нодами — самая частая проблема: узлы не видят друг друга. Откройте 2377/7946/4789 в фаерволе только для IP кластера
- Один manager — при его падении кластер теряет управление. Для продакшена держите 3 manager-ноды
- Локальные тома — они привязаны к ноде; для общих данных нужен внешний том или NFS
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS под Swarm-кластерЧастые вопросы
Сколько нужно серверов для Swarm?
Технически хватит одного узла, но смысл появляется от двух-трёх VPS. Для отказоустойчивого управления держат 3 manager-ноды.
Swarm ещё поддерживается?
Да, режим Swarm встроен в Docker и активно работает. Для проектов, которым не нужна вся сложность Kubernetes, это живой и рабочий инструмент.
Как объединить серверы из разных локаций?
Узлы общаются по внешним IP и overlay-сети. VPS MAATRIX в UK и US можно свести в один кластер, открыв нужные порты.