Docker
Режим рокировки докеров
Поиск…
Вступление
Рой - это ряд двигателей докеров (или узлов ), которые развертывают службы в совокупности. Рой используется для распространения обработки на многих физических, виртуальных или облачных машинах.
Синтаксис
Инициализировать рой : старинный старинный рой [ОПЦИИ]
Присоединиться к рою как к узлу и / или к менеджеру : присоединиться к докерам [OPTIONS] HOST: PORT
Создайте новый сервис : docker service создайте [ОПЦИИ] ИЗОБРАЖЕНИЕ [КОМАНДА] [ARG ...]
Отобразите подробную информацию об одной или нескольких услугах : осмотр службы докеров [ОПЦИИ] СЕРВИС [СЕРВИС ...]
Список услуг : docker service ls [ОПЦИИ]
Удалите одну или несколько служб : docker service rm SERVICE [SERVICE ...]
Масштабировать один или несколько реплицированных сервисов : шкала обслуживания докеров SERVICE = REPLICAS [SERVICE = REPLICAS ...]
Перечислите задачи одной или нескольких служб : docker service ps [ОПЦИИ] СЕРВИС [СЕРВИС ...]
Обновление службы : обновление службы докеров [ОПЦИИ] СЕРВИС
замечания
Режим 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