Как настроить Docker Swarm

DockerBeginner
Практиковаться сейчас

Введение

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

Понимание Docker Swarm

Что такое Docker Swarm?

Docker Swarm — это собственный инструмент кластеризации и оркестрации для контейнеров Docker. Он позволяет управлять группой Docker-движков, называемой роем (swarm), и развертывать сервисы в этом рое. В Docker Swarm Docker-движки работают вместе как один виртуальный Docker-хост.

Ключевые понятия Docker Swarm

  1. Узлы (Nodes): Узлы — это отдельные Docker-движки, участвующие в рое. Существует два типа узлов: менеджеры и рабочие узлы.

    • Менеджеры (Managers): Менеджеры отвечают за управление роем, включая планирование задач, поддержание желаемого состояния роя и предоставление точки входа в рой.
    • Рабочие узлы (Workers): Рабочие узлы отвечают за выполнение фактических контейнеров в рое.
  2. Сервисы (Services): Сервисы определяют желаемое состояние вашего приложения. Сервис может быть одним контейнером или группой контейнеров, работающих вместе.

  3. Задачи (Tasks): Задачи — это атомарные единицы планирования в рое. Каждый сервис делится на задачи, которые затем планируются для выполнения на доступных узлах.

  4. Распределение нагрузки (Load Balancing): Docker Swarm предоставляет встроенное распределение нагрузки для сервисов. Узлы-менеджеры автоматически распределяют задачи по рабочим узлам, обеспечивая высокую доступность и масштабируемость.

Преимущества Docker Swarm

  1. Встроенная оркестрация (Native Orchestration): Docker Swarm — это встроенный инструмент оркестрации, что означает, что он интегрирован в Docker-движок и не требует дополнительного программного обеспечения.

  2. Простота (Simplicity): Docker Swarm относительно прост в настройке и управлении, что делает его хорошим выбором для развертываний малого и среднего размера.

  3. Высокая доступность (High Availability): Docker Swarm предоставляет встроенные функции высокой доступности, такие как автоматическое планирование задач и распределение нагрузки.

  4. Масштабируемость (Scalability): Docker Swarm может легко масштабировать количество узлов и контейнеров по мере необходимости.

  5. Безопасность (Security): Docker Swarm использует те же функции безопасности, что и Docker-движок, включая управление доступом на основе ролей и зашифрованное общение.

Теперь, когда у вас есть базовое понимание Docker Swarm, перейдем к следующему разделу: Инициализация Docker Swarm.

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

Подготовка узлов

Прежде чем инициализировать Docker Swarm, вам необходимо подготовить набор Docker-хостов (узлов). Вы можете использовать физические или виртуальные машины, при условии, что на них установлена одна и та же версия Docker.

Инициализация роя

Для инициализации Docker Swarm необходимо назначить один из узлов менеджером. Для этого выполните следующую команду на желаемом узле:

docker swarm init --advertise-addr <MANAGER-IP>

Замените <MANAGER-IP> на IP-адрес узла-менеджера.

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

docker swarm join --token <TOKEN> <MANAGER-IP>:2377

Замените <TOKEN> на токен, полученный из команды docker swarm init, а <MANAGER-IP> — на IP-адрес узла-менеджера.

Проверка роя

Вы можете проверить состояние роя, выполнив следующую команду на узле-менеджере:

docker node ls

Это отобразит список всех узлов в рое, включая их роли (менеджер или рабочий узел) и статус.

Защита роя

По умолчанию общение между узлами в рое шифруется с помощью протокола Raft. Однако вы можете дополнительно защитить свой рой, включив взаимную аутентификацию Transport Layer Security (mTLS).

Для включения mTLS вам необходимо сгенерировать и распространить необходимые сертификаты. Вы можете сделать это, используя команду docker swarm ca на узле-менеджере.

docker swarm ca --rotate

Эта команда сгенерирует новые корневой и промежуточный сертификаты и распространит их на все узлы в рое.

Теперь, когда вы инициализировали свой Docker Swarm, перейдем к следующему разделу: Управление и масштабирование сервисов Swarm.

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

Развертывание сервиса

Для развертывания сервиса в Docker Swarm можно использовать команду docker service create. Например, для развертывания веб-сервера Nginx можно выполнить следующую команду:

docker service create --name nginx -p 80:80 nginx:latest

Это создаст новый сервис под названием "nginx" и развернёт его в рое. Сервис будет экспонировать порт 80 на хосте и перенаправлять его на порт 80 в контейнере.

Масштабирование сервиса

Можно масштабировать количество реплик (задач) для сервиса с помощью команды docker service scale. Например, для масштабирования сервиса "nginx" до 5 реплик можно выполнить:

docker service scale nginx=5

Это создаст 4 дополнительные задачи для сервиса "nginx", и узел-менеджер автоматически распределит их по доступным рабочим узлам.

Обновление сервиса

Можно обновить конфигурацию сервиса с помощью команды docker service update. Например, для обновления сервиса "nginx" на использование другой версии образа можно выполнить:

docker service update --image nginx:1.19 nginx

Это обновит сервис "nginx" на использование образа "nginx:1.19".

Мониторинг сервисов Swarm

Можно отслеживать состояние сервисов вашего роя с помощью команд docker service ls и docker service ps. Команда docker service ls покажет список всех работающих сервисов в рое, а команда docker service ps — состояние каждой задачи внутри сервиса.

## Список всех сервисов
docker service ls

## Список задач для конкретного сервиса
docker service ps nginx

Остановка узлов

Если вам нужно выполнить техническое обслуживание на узле, вы можете "остановить" его, что заставит менеджер перепланировать любые задачи, выполняющиеся на этом узле, на другие доступные узлы. Это можно сделать с помощью команды docker node update:

docker node update --availability drain <NODE-ID>

Замените <NODE-ID> на идентификатор узла, который вы хотите остановить.

Это основные принципы управления и масштабирования сервисов Docker Swarm. С этими знаниями вы сможете развертывать, масштабировать и обслуживать свои приложения, работающие в Docker Swarm.

Резюме

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