English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Docker Swarm - это инструмент управления кластерами Docker. Он преобразует пул Docker-хостов в единую виртуальную Docker-хост. Docker Swarm предоставляет стандартный API Docker, и все инструменты, уже komunikiruyuschiysya с Docker-демоном, могут легко расширяться до нескольких хостов с помощью Swarm.
Поддерживаемые инструменты включают, но не ограничиваются, следующими статьями:
Dokku
Docker Compose
Docker Machine
Jenkins
Как показано на рисунке, свarms кластер состоит из узла управления (manager) и рабочих узлов (work node).
swarm manager: отвечает за управление целым кластером, включая конфигурацию кластера, управление сервисами и все работы, связанные с кластером.
work node: это доступные узлы,主要负责运行 соответствующие сервисы для выполнения задач (task).
В этом примере, все примеры описаны с использованием Docker Machine и virtualbox, убедитесь, что virtualbox уже установлено на вашем хосте.
Создание машины docker:
$ docker-machine create -d virtualbox swarm-manager
Инициализация свarms кластера, машина, на которой выполняется инициализация, это узел управления кластера.
$ docker-machine ssh swarm-manager $ docker swarm init --advertise-addr 192.168.99.107 # IP, указанный здесь, это IP, который был выделен при создании машины.
Этот вывод подтверждает, что инициализация прошла успешно. Следующую строку нужно скопировать, так как она потребуется при добавлении узла рабочей свarms:
docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
Здесь сразу создаются две машины, swarm-worker1 и swarm-worker2.
Входите в две машины и добавляйте их в созданную на предыдущем шаге кластер, здесь потребуется содержимое, скопированное на предыдущем шаге.
Вывод данных выше означает, что добавление прошло успешно.
В上图, из-за того, что содержимое, скопированное на предыдущем шаге, очень длинное, оно автоматически会被 обрезано. На самом деле, команда, которая выполняется в графе, такая:
docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
Войдите в управляющий узел и выполните: docker info, чтобы увидеть информацию о текущем кластере.
$ docker info
Через красный кружок можно узнать, что в текущем运行的 кластере есть три узла, один из которых является управляющим узлом.
ВниманиеЛюбые операции, связанные с управлением кластером, выполняются на управляющем узле.
В следующем примере мы создадим сервис с именем helloworld на одном рабочем узле, и это будет случайным образом назначено одному рабочему узлу:
docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com
Проверьте, на каком узле запущена услуга helloworld, можно увидеть, что в настоящее время это swarm-worker1 узел:
docker@swarm-manager:~$ docker service ps helloworld
Проверьте конкретную информацию о развертывании helloworld:
docker@swarm-manager:~$ docker service inspect --pretty helloworld
Мы расширяем aforementioned helloworld сервис до двух узлов.
docker@swarm-manager:~$ docker service scale helloworld=2
Мы видим, что сервис был расширен с одного узла до двух узлов.
docker@swarm-manager:~$ docker service rm helloworld
Проверьте, было ли удалено:
В следующем примере мы расскажем, как обновить redis до более высокой версии.
Создать redis версии 3.0.6.
docker@swarm-manager:~$ docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6
Плавное обновление redis.
docker@swarm-manager:~$ docker service update --image redis:3.0.7 redis
На рисунке можно увидеть, что версия redis уже обновлена с 3.0.6 до 3.0.7, что означает успешное обновление услуги.
Просмотреть все узлы:
docker@swarm-manager:~$ docker node ls
Все узлы в настоящее время являются Active и могут принимать новые задачи.
Остановить узел swarm-worker1:
Внимание:swarm-worker1 состояние изменяется на Drain. Это не повлияет на услуги кластера, swarm-worker1 больше не будет принимать новые задачи, нагрузка кластера несколько уменьшится.
Node может быть reactivated с помощью следующих команд:
docker@swarm-manager:~$ docker node update --availability active swarm-worker1