Как установить Docker Swarm в Ubuntu 20.04
Docker swarm — это инструмент, используемый для создания кластера хостов докеров. С помощью docker swarm мы можем создать высокодоступный и высокопроизводительный кластер, в котором приложения распределяются между хостами. Docker swarm состоит из диспетчера и рабочих узлов, а операции выполняются из диспетчера. В этом руководстве мы рассмотрим, как настроить кластер Docker Swarm в Ubuntu 20.04.
Шаг 1: Подготовьте свои узлы.
В моей настройке у меня есть один управляющий узел и два рабочих узла. На каждом хосте настройте файл hosts, чтобы он включал все остальные узлы.
sudo vim /etc/hosts
Сохраните файл. Убедитесь, что вы можете пинговать все хосты с каждого хоста, используя имя хоста, а не IP-адрес.
192.168.1.10 manager
192.168.1.11 worker-01
192.168.1.12 worker-02
Шаг 2. Установите Docker CE в Ubuntu 20.04
Мы собираемся установить Docker CE на хосты. Чтобы установить Docker CE в Ubuntu 20.04, выполните следующие действия:
Установите пакеты зависимостей с помощью следующей команды
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Добавьте ключ докера и репозиторий докеров на свои хосты с помощью следующих команд:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Пакеты обновлений
sudo apt-get update
Убедитесь, что вы собираетесь установить из официального репозитория Docker вместо репозитория Ubuntu по умолчанию.
$ apt-cache policy docker-ce
docker-ce:
Installed: (none)
Candidate: 5:19.03.13~3-0~ubuntu-focal
Version table:
5:19.03.13~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.12~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.11~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.10~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.9~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
Установите Docker CE в Ubuntu 20.04
sudo apt install docker-ce
После установки должен быть запущен демон Docker. Подтвердите статус, выполнив следующую команду:
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-10-17 16:28:08 EAT; 57s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 2807 (dockerd)
Tasks: 8
Memory: 37.5M
CGroup: /system.slice/docker.service
└─2807 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Добавьте своего пользователя в группу Docker, чтобы не вводить sudo каждый раз, когда вы запускаете команды Docker.
sudo usermod -aG docker ${USER}
Шаг 3. Создайте кластер Docker Swarm
Чтобы настроить Swarm-кластер, нам сначала нужно инициализировать режим Docker Swarm на управляющем узле, а затем добавить рабочие узлы в кластер. Выполните приведенную ниже команду, чтобы инициализировать узел Docker Swarm в диспетчере.
$ sudo docker swarm init --advertise-addr 192.168.1.10
Swarm initialized: current node (fsuaqqpihi2eabmmq8gldzhpv) is now a manager.
To add a worker to this swarm, run the following command:
sudo docker swarm join --token SWMTKN-1-018kvdektwa74z8fajb5c1u6jyz6qfk4ood8u4qotw7go9jj0p-cfpnh7omy86xcgoh45vau2kaj 192.168.1.10:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Теперь мы собираемся добавить узлы worker-01 и worker-02 в «менеджер» кластера, используя «токен соединения» из узла «менеджер» кластера. Запустите команду, напечатанную в выходных данных команды init.
$ sudo docker swarm join --token SWMTKN-1-13xo81gxpb3ttjh5e335pfrmz9fbnliikgfys7u8l4r8k4m575-2gsjwjs3y1i4kgeua2yu840hw 192.168.1.10:2377
This node joined a swarm as a worker.
Убедитесь, что рабочие узлы успешно добавлены в кластер, выполнив следующую команду в диспетчере:
$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
etx5xc5guzftmsqx4naqwvump worker-02 Ready Active 19.03.13
xop4jvrkywz4ldsgwqmfacssc * manager Ready Active Leader 19.03.13
bghrkp7ll1b9lb0ikv8x51gzy worker-01 Ready Active 19.03.13
Шаг 4: Разверните приложение в кластере
Давайте создадим сервисный веб-сервер Nginx для работы на http-порту 80 по умолчанию, а затем предоставим его порту 8080 на хосте.
$ sudo docker service create --name web-server --publish 8080:80 nginx:1.13-alpine
pq5txw0p9c1qcjrrl2lw3mh5p
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
Подтвердите созданную службу, выполнив следующую команду:
$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
pq5txw0p9c1q web-server replicated 1/1 nginx:1.13-alpine *:8080->80/tcp
Шаг 5: Реплики и масштабирование службы.
Мы собираемся сделать 3 реплики службы веб-сервера, чтобы она была доступна для менеджера и двух рабочих узлов.
$sudo docker service scale web-server=3
web-server scaled to 3
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged
Подтвердите созданные реплики службы
$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
pq5txw0p9c1q web-server replicated 3/3 nginx:1.13-alpine *:8080->80/tcp
Получите доступ к службе из своего браузера, используя IP-адреса всех узлов: http://192.168.1.10:8080 , http: // 192.168.1.11 : 8080 и http://192.168.1.12:8080, и вы должны получить страницу приветствия nginx как ниже: