English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Управление кластером Swarm

Введение

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 уже установлено на вашем хосте.

1. Создание узла управления свarms (manager)

Создание машины 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

2. Создание узла рабочей свarms (worker)

Здесь сразу создаются две машины, swarm-worker1 и swarm-worker2.

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

Вывод данных выше означает, что добавление прошло успешно.

В上图, из-за того, что содержимое, скопированное на предыдущем шаге, очень длинное, оно автоматически会被 обрезано. На самом деле, команда, которая выполняется в графе, такая:

docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

3. Проверка информации о кластере

Войдите в управляющий узел и выполните: docker info, чтобы увидеть информацию о текущем кластере.

$ docker info

Через красный кружок можно узнать, что в текущем运行的 кластере есть три узла, один из которых является управляющим узлом.

4. Деплой услуги в кластер

ВниманиеЛюбые операции, связанные с управлением кластером, выполняются на управляющем узле.

В следующем примере мы создадим сервис с именем helloworld на одном рабочем узле, и это будет случайным образом назначено одному рабочему узлу:

docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com

5. Проверка состояния развертывания услуги

Проверьте, на каком узле запущена услуга helloworld, можно увидеть, что в настоящее время это swarm-worker1 узел:

docker@swarm-manager:~$ docker service ps helloworld

Проверьте конкретную информацию о развертывании helloworld:

docker@swarm-manager:~$ docker service inspect --pretty helloworld

6. Расширение сервисов кластера

Мы расширяем aforementioned helloworld сервис до двух узлов.

docker@swarm-manager:~$ docker service scale helloworld=2

Мы видим, что сервис был расширен с одного узла до двух узлов.

7. Удаление услуги

docker@swarm-manager:~$ docker service rm helloworld

Проверьте, было ли удалено:

8. Плавный апгрейд услуги

В следующем примере мы расскажем, как обновить 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, что означает успешное обновление услуги.

9、Остановить узел для приема новых задач

Просмотреть все узлы:

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