Как установить Docker Swarm в Ubuntu 20.04

Как установить 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 как ниже: