Как установить Docker Swarm на Rocky Linux

Docker Swarm — это система оркестрации контейнеров, построенная на базе Docker Engine. Она позволяет создавать и развертывать кластер узлов Docker с несколькими серверами. Docker Swarm упрощает развертывание контейнерных приложений в виде сервиса. Обеспечивает простой и удобный способ управления и оркестрации контейнеров.

Docker Swarm обеспечивает высокий уровень доступности приложений. В Docker Swarm вы можете запускать одно приложение или службу на нескольких узлах, которые называются «рабочими узлами». Есть также узел под названием «Swarm Manager», который является центральным управлением и оркестрацией Docker Swarm.

В этом руководстве вы узнаете, как настроить Docker Swarm с помощью серверов Rocky Linux. Вы установите Docker на каждый сервер, настроите firewalld, инициализируете Swarm Manager, добавите узлы и, наконец, узнаете об основных способах использования Docker Swarm для развертывания контейнерных приложений.

Необходимые условия

Для выполнения этого руководства вам понадобятся как минимум три сервера Rocky Linux и пользователь без прав root с правами sudo/администратора.

Для этой демонстрации мы будем использовать три сервера Rocky Linux со следующими характеристиками:

Hostname            IP Address        Used as
---------------------------------------------------
swarm-manager1     192.168.5.100     Swarm Manager
worker1            192.168.5.120     Node
worker2            192.168.5.121     Node

После выполнения всех этих требований вы готовы приступить к развертыванию Docker Swarm.

Установка Docker

Чтобы настроить Docker Swarm, необходимо установить Docker Engine на каждой машине/сервере. Для дистрибутива Rocky Linux вы можете установить Docker через официальный репозиторий Docker.

Теперь вы установите Docker Engine на каждый из ваших серверов Rocky Linux.

Добавьте репозиторий Docker для системы Rocky Linux с помощью команды dnf, приведенной ниже.

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

После добавления репозитория запустите приведенную ниже команду dnf, чтобы проверить список репозиториев и обновить все пакеты.

sudo dnf repo list
sudo dnf update

Если репозиторий Docker добавлен, вы увидите следующий вывод:

add repo docker

Затем установите Docker с помощью команды dnf, приведенной ниже. Когда появится запрос на подтверждение установки, введите y и нажмите ENTER чтобы продолжить.

sudo dnf install docker-ce docker-ce-cli containerd.io

install docker

После установки Docker запустите и включите службу ‘docker‘ с помощью команды systemctl, приведенной ниже. Служба ‘docker‘ должна работать и будет автоматически запускаться при загрузке системы.

sudo systemctl enable docker
sudo systemctl start docker

Наконец, проверьте работу службы ‘docker‘ с помощью приведенной ниже команды, чтобы убедиться, что служба работает.

sudo systemctl status docker

Если служба «docker» запущена, вы должны получить результат, как показано ниже.

проверка службы docker

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

sudo usermod -aG docker user

Настройка Firewalld

Для производственной среды необходимо включить брандмауэр на каждом сервере. В системе Rocky Linux по умолчанию брандмауэр firewalld включен. Поэтому вам нужно только добавить несколько портов TCP и UDP для развертывания Docker Swarm.

Ниже приведены некоторые порты TCP и UDP, которые необходимо открыть на каждом сервере для развертывания Docker Swarm и обеспечения его правильной работы:

  • TCP-порт 2377 для связи по управлению кластером — это необходимо, если у вас есть несколько Swarm Managers.
  • TCP- и UDP-порт 7946 для связи между узлами — для всех узлов в среде Swarm.
  • UDP-порт 4789 для трафика наложенной сети

Добавьте порты Docker Swarm в firewalld с помощью команды firewall-cmd, приведенной ниже.

sudo firewall-cmd --add-port=2377/tcp --permanent
sudo firewall-cmd --add-port=7946/tcp --permanent
sudo firewall-cmd --add-port=7946/udp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent

Затем перезагрузите правила firewalld и проверьте список портов в firewalld с помощью команды, приведенной ниже.

sudo firewall-cmd --reload
sudo firewall-cmd --list-port

Вы должны увидеть, что некоторые порты TCP и UDP для развертывания Docker Swarm добавлены в firewalld.

Перезагрузите firewalld

После установки движка Docker на каждом сервере и настройки Firewalld вы можете настроить развертывание Docker Swarm, инициализировав первый узел в качестве «менеджера Swarm».

Инициализация Swarm Manager

Swarm Manager — это мозг вашей среды Docker Swarm. Для крупных развертываний вы можете добавить несколько серверов в качестве Swarm Manager, что обеспечит высокую доступность и отказоустойчивость вашего Swarm Manager.

Swarm Manager — это менеджер кластера для Docker Swarm, он управляет состоянием развертываний ваших приложений и интегрирован с Docker Engine. Swarm Manager предоставляет декларативную модель обслуживания и масштабирование обслуживания, желаемое состояние обслуживания, а также обеспечивает последовательные обновления.

В этом примере мы инициализируем сервер «swarm-manager1» с IP-адресом «192.168.5.100» в качестве Swarm Manager.

Запустите следующую команду «docker swarm init» на сервере «swarm-manager1», чтобы начать инициализацию Swarm Manager в вашей среде развертывания.

В этом примере Swarm Manager работает по IP-адресу «192.168.5.100», а сетью по умолчанию для служб в Docker Swarm будет «10.10.0.0/16».

docker swarm init --advertise-addr 192.168.5.100 --default-addr-pool 10.10.0.0/16

Теперь, когда Swarm Manager инициализирован, вы должны увидеть вывод, похожий на следующий скриншот. Кроме того, вы можете увидеть инструкцию о том, что вам необходимо добавить рабочие узлы в развертывание Docker Swarm, включая сгенерированный токен, который вы должны использовать.

initialize swarm

Затем выполните следующую команду docker, чтобы убедиться, что режим Swarm активирован и включен.

docker info

Вы увидите, что режим Swarm является «активным», а сетевой IP-адрес для служб — «10.10.0.0/16», что соответствует конфигурации во время процесса инициализации. Кроме того, вы можете увидеть, что в настоящее время в Docker Swarm доступен только один узел «1».

проверьте информацию о Swarm

Проверьте список доступных узлов в Docker Swarm с помощью команды «docker node» ниже. Вы увидите, что в развертывании Docker Swarm есть только один узел.

docker node ls

check nodes

Добавление рабочих узлов в Swarm

В Docker Swarm рабочий узел имеет ту же концепцию, что и в других системах оркестрации контейнеров, где контейнеры выполняются и работают. Docker Engine должен быть установлен на каждом рабочем узле, а также рабочий узел может быть повышен до «Swarm Manager».

В то же время Swarm Manager также может использоваться в качестве рабочего узла, что означает, что ваше приложение также может работать на Swarm Manager.

Запустите следующую команду:docker swarm join», чтобы добавить серверы «worker1» и «worker2» к Docker Swarm. Также не забудьте заменить токен на сгенерированный токен в вашей среде.

docker swarm join \
--token SWMTKN-1-4qxedy87gygenejrw06hlqpuwfm6erulccfj1jhnmsn0kehbnb-2ld4g3zo36bzu8d8ss4115rhq 192.168.5.100:2377

Когда вы получите сообщение вывода, например «Этот узел присоединился к рою в качестве рабочего», это означает, что рабочий узел добавлен.

Вы можете увидеть аналогичный вывод, когда «worker1» и «worker2» присоединяются к Docker Swarm.

join node2

Затем снова перейдите в Swarm Manager и выполните приведенную ниже команду docker, чтобы проверить список узлов в вашем Docker Swarm.

docker node ls

Вы должны увидеть три узла в вашей среде Docker Swarm. В этом примере ‘swarm-manager1» используется в качестве Swarm Manager, а оба сервера «worker1» и «worker2» используются в качестве рабочих узлов.

проверка узлов

Кроме того, вы также можете проверить список узлов с помощью приведенной ниже команды docker.

docker info

На сервере Swarm Manager вы можете увидеть вывод на следующем скриншоте. Имеется 1 менеджер и 3 узла (swarm-manager также используется в качестве рабочего узла).

проверка состояния swarm

Но на серверах «worker1» и «worker2» вы увидите следующий вывод. Вы можете увидеть IP-адрес Swarm Manager с портом TCP по умолчанию 2377.

проверка состояния узла

На этом вы завершили развертывание Docker Swarm с использованием Rocky Linux. Далее вы развернете приложение/службу в своей среде Swarm.

Управление службами в Docker Swarm

Когда вы развертываете приложение в среде Docker Swarm, это приложение будет называться «службой». Это образ вашего микросервисного приложения, и это может быть HTTP-сервер, сервер базы данных или другие приложения.

Чтобы развернуть службу в Docker Swarm, необходимо указать базовый образ, который будет использоваться, порты, конкретное имя службы, а также количество реплик для службы.

Теперь вы узнаете об основных принципах развертывания служб в Docker Swarm.

В этом примере вы создадите новый сервис «test-httpd» с 1 репликой и откроете порт «8000» на узле Swarm. Изображение, которое вы будете использовать, — «httpd:alpine».

Запустите следующую команду «docker service», чтобы создать новую службу.

docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine

create service

Теперь проверьте службы в Docker Swarm с помощью приведенной ниже команды docker. Вы должны увидеть, что служба «test-httpd» работает и также открывает TCP-порт 8000 с только одной копией.

docker service ls

list service

Затем проверьте подробные сведения о службе «test-httpd» с помощью приведенной ниже команды.

docker service inspect test-httpd
docker service inspect --pretty test-httpd

Ниже вы можете увидеть подробную информацию о службе «test-httpd».

service details

Кроме того, вы можете проверить контейнер, который работает на службе «test-httpd», с помощью команды «docker service», как показано ниже.

docker service ps test-httpd

Вы можете увидеть, что контейнер «test-httpd.1» работает на сервере «swarm-manager1».

check containers

Теперь откройте порт «8000» на всех серверах с помощью следующей команды firewall-cmd.

sudo firewall-cmd --add-port=8000/tcp

После этого проверьте службу «test-httpd» с помощью команды curl, как показано ниже. В этом примере «swarm-manager1» IP-адрес «192.168.5.100».

curl 192.168.5.30:8000
curl -I 192.168.5.30:8000

Вы увидите стандартную страницу index.html службы «test-httpd».

доступ к контейнерам

Масштабирование служб в Docker Swarm

После развертывания службы на Docker Swarm вы узнаете, как масштабировать службы и приложения.

Выполните следующую команду, чтобы масштабировать службу «test-httpd» до 3 реплик. Эта команда создаст еще две службы «test-httpd» на рабочих узлах.

docker service scale test-httpd=3

scale service

Теперь проверьте список запущенных служб с помощью следующей команды. Вы должны увидеть, что еще одна служба «test-httpd» запущена на серверах «worker1» и «worker2».

docker service ps test-httpd

check services

Наконец, проверьте службу с помощью команды curl, как показано ниже, на обоих серверах «worker1» и «worker2». Если служба запущена, вы должны увидеть на экране стандартную страницу index.html.

Проверка службы на worker1.

docker ps
curl worker1:8000

доступ к службе worker1

Проверка службы на worker2.

docker ps
curl worker2:8000

доступ к службе node2

Удаление служб в Docker Swarm

Вы изучили основные принципы развертывания и масштабирования служб в Docker Swarm. Далее вы очистите среду Docker Swarm, удалив службу «test-httpd».

Выполните следующую команду, чтобы удалить службу «test-httpd» из Docker Swarm.

docker service rm test-httpd

После этого проверьте службу «test-httpd» с помощью команды «docker service inspect», приведенной ниже. Вы должны увидеть, что служба удалена.

docker service inspect test-httpd

Кроме того, вы также можете проверить с помощью команды docker ниже, чтобы проверить список запущенных контейнеров и образов в вашем Swarm.

Вы должны увидеть, что контейнер удален, а образ httpd:alpine доступен на всех серверах.

docker ps
docker images

Заключение

В этом руководстве вы развернули Docker Swarm с тремя серверами Rocky Linux. Вы также узнали, как установить Docker Engine на сервере Linux и настроить Firewalld в системе Rocky Linux. И, наконец, вы также узнали, как развернуть базовое приложение в Docker Swarm с помощью команды «docker service».

Теперь вы можете развертывать свои контейнерные приложения со всеми зависимостями в Docker Swarm. Вы также можете добавить дополнительные Swarm Manager, чтобы настроить высокую доступность вашей среды Docker Swarm.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *