Управление кластером Swarm
Введение
Docker Swarm — это инструмент управления кластером Docker. Он превращает пул хостов Docker в единый виртуальный хост Docker. Docker Swarm предоставляет стандартный Docker API, поэтому любой инструмент, который уже взаимодействует с демоном Docker, может легко масштабироваться на несколько хостов с помощью Swarm.
Поддерживаемые инструменты включают, помимо прочего, следующие:
- Dokku
- Docker Compose
- Docker Machine
- Jenkins
Принцип
Как показано на рисунке ниже, кластер Swarm состоит из узлов-менеджеров и рабочих узлов.
- менеджер Swarm: отвечает за общее управление кластером, включая конфигурацию кластера, управление сервисами и все другие работы, связанные с кластером.
- рабочий узел: т. е. доступный узел на диаграмме, в основном отвечает за запуск соответствующих сервисов для выполнения задач.
Использование
Во всех следующих примерах для демонстрации используются Docker Machine и VirtualBox; убедитесь, что на вашем хосте установлен VirtualBox.
1. Создайте узел-менеджер кластера Swarm (manager)
Создайте машины Docker:
$ docker-machine create -d virtualbox swarm-manager
Инициализируйте кластер Swarm; машина, которая выполняет инициализацию, является узлом-менеджером кластера.
$ docker-machine ssh swarm-manager $ docker swarm init --advertise-addr 192.168.99.107 #这里的 IP 为创建机器时分配的 ip.
Приведённый выше вывод подтверждает, что инициализация прошла успешно. Вам нужно скопировать следующую строку; она понадобится при добавлении рабочих узлов:
docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
2. Создайте рабочий узел кластера Swarm (worker)
Здесь создайте сразу две машины: swarm-worker1 и swarm-worker2.
Подключитесь к обеим машинам по отдельности и укажите добавление их в кластер, созданный на предыдущем шаге. Скопированное на предыдущем шаге содержимое будет использовано здесь.
Приведённые выше выходные данные указывают на то, что добавление прошло успешно.
На рисунке выше, поскольку скопированное на предыдущем шаге содержимое довольно длинное, оно будет автоматически усечено. Фактически команда, выполненная на рисунке, выглядит следующим образом:
docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-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. Масштабирование сервисов кластера
Мы масштабируем вышеуказанный сервис 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 больше не принимает новые задачи, а нагрузочная способность кластера несколько снизилась.
Узел можно снова активировать с помощью следующей команды:
docker@swarm-manager:~$ docker node update --availability active swarm-worker1Другие расширения

















