Поиск…


Вступление

Рой - это ряд двигателей докеров (или узлов ), которые развертывают службы в совокупности. Рой используется для распространения обработки на многих физических, виртуальных или облачных машинах.

Синтаксис

замечания

Режим Swarm реализует следующие функции:

  • Управление кластерами, интегрированное с Docker Engine
  • Децентрализованный дизайн
  • Модель декларативной службы
  • пересчет
  • Требуемое согласование состояния
  • Мульти-хост-сеть
  • Обнаружение службы
  • Балансировки нагрузки
  • Безопасный дизайн по умолчанию
  • Перемещение обновлений

Для получения дополнительной официальной документации Docker относительно посещения Swarm : обзор режима Swarm


Команды командной строки Swarm Mode

Нажмите описание команд для документации

Инициализировать рой

docker swarm init [OPTIONS]

Присоединитесь к рою в качестве узла и / или менеджера

docker swarm join [OPTIONS] HOST:PORT

Создать новую услугу

docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

Отображение подробной информации об одной или нескольких услугах

docker service inspect [OPTIONS] SERVICE [SERVICE...]

Список услуг

docker service ls [OPTIONS]

Удалить одну или несколько служб

docker service rm SERVICE [SERVICE...]

Масштабирование одной или нескольких реплицированных служб

docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]

Перечислите задачи одной или нескольких служб

docker service ps [OPTIONS] SERVICE [SERVICE...]

Обновление службы

docker service update [OPTIONS] SERVICE

Создайте рой на Linux, используя докер-машину и VirtualBox

# Create the nodes
# In a real world scenario we would use at least 3 managers to cover the fail of one manager.
docker-machine create -d virtualbox manager
docker-machine create -d virtualbox worker1

# Create the swarm
# It is possible to define a port for the *advertise-addr* and *listen-addr*, if none is defined the default port 2377 will be used.
docker-machine ssh manager \
    docker swarm init \
    --advertise-addr $(docker-machine ip manager)
    --listen-addr $(docker-machine ip manager)

# Extract the Tokens for joining the Swarm
# There are 2 different Tokens for joining the swarm.
MANAGER_TOKEN=$(docker-machine ssh manager docker swarm join-token manager --quiet)
WORKER_TOKEN=$(docker-machine ssh manager docker swarm join-token worker --quiet)


# Join a worker node with the worker token
docker-machine ssh worker1 \
    docker swarm join \
    --token $WORKER_TOKEN \
    --listen-addr $(docker-machine ip worker1) \
    $(docker-machine ip manager):2377



Узнайте, как токен рабочего и менеджера

При автоматизации подготовки новых узлов к рою вам нужно знать, что означает правильный токен присоединения для роя, а также объявленный адрес менеджера. Вы можете найти это, выполнив следующие команды на любом из существующих узлов менеджера:

# grab the ipaddress:port of the manager (second last line minus the whitespace)
export MANAGER_ADDRESS=$(docker swarm join-token worker | tail -n 2 |  tr -d '[[:space:]]')

# grab the manager and worker token
export MANAGER_TOKEN=$(docker swarm join-token manager -q)
export WORKER_TOKEN=$(docker swarm join-token worker -q)

Опция -q выводит только токен. Без этого варианта вы получите полную команду для регистрации на рой.

Затем на вновь созданных узлах вы можете присоединиться к рою.

docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS

Привет, мир

Обычно вы хотите создать стек служб для создания реплицированного и организованного приложения.

Типичное современное веб-приложение состоит из базы данных, api, frontend и обратного прокси.

Упорство

База данных нуждается в постоянстве, поэтому нам нужна некоторая файловая система, которая разделяется между всеми узлами роя. Это могут быть NAS, сервер NFS, GFS2 или что-то еще. Настройка здесь не входит в сферу применения. В настоящее время Docker не содержит и не управляет упорством в рое. В этом примере предполагается, что на всех узлах установлено /nfs/ shared location.

сеть

Чтобы иметь возможность общаться друг с другом, службы в рое должны находиться в одной сети.

Выберите диапазон IP (здесь 10.0.9.0/24 ) и имя сети ( hello-network ) и выполните команду:

docker network create \
  --driver overlay \
  --subnet 10.0.9.0/24 \
  --opt encrypted \
  hello-network

База данных

Первой нашей услугой является база данных. Давайте используем postgresql в качестве примера. Создайте папку для базы данных в nfs/postgres и запустите ее:

docker service create --replicas 1 --name hello-db \
       --network hello-network -e PGDATA=/var/lib/postgresql/data \
       --mount type=bind,src=/nfs/postgres,dst=/var/lib/postgresql/data \
       kiasaki/alpine-postgres:9.5

Обратите внимание, что мы использовали --network hello-network и --mount .

API

Создание API выходит за рамки этого примера, поэтому давайте притвориться, что у вас есть образ API под username/hello-api .

docker service create --replicas 1 --name hello-api \
       --network hello-network \
       -e NODE_ENV=production -e PORT=80 -e POSTGRESQL_HOST=hello-db \
       username/hello-api

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

Обратный прокси

Давайте создадим службу nginx для обслуживания нашего API во внешний мир. Создайте файлы конфигурации nginx в общей папке и запустите:

docker service create --replicas 1 --name hello-load-balancer \
       --network hello-network \
       --mount type=bind,src=/nfs/nginx/nginx.conf,dst=/etc/nginx/nginx.conf \
       -p 80:80 \
       nginx:1.10-alpine

Обратите внимание, что мы использовали параметр -p для публикации порта. Этот порт будет доступен для любого узла в рое.

Доступность узла

Доступ к режиму роя:

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

Чтобы изменить доступность режима:

#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls

Продвигать или уничтожать узлы рой

Чтобы продвинуть узел или набор узлов, запустите docker node promote с узла менеджера:

docker node promote node-3 node-2

Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.

Чтобы понизить рейтинг узла или набора узлов, выполните docker node demote с узла-менеджера:

docker node demote node-3 node-2

Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.

Оставив Рой

Рабочий узел:

#Run the following on the worker node to leave the swarm.

docker swarm leave
Node left the swarm.

Если узел имеет роль « Менеджер» , вы получите предупреждение о сохранении кворума менеджеров. Вы можете использовать --force для выхода на узел менеджера:

#Manager Node

docker swarm leave --force
Node left the swarm.

Узлы, оставившие рой, по-прежнему будут отображаться на выходе docker node ls .

Чтобы удалить узлы из списка:

docker node rm node-2

node-2


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow