6.1 Основные концепции Docker Swarm
Docker Swarm — это встроенная система оркестрации контейнеров, предоставляемая Docker. Она позволяет создавать, управлять и масштабировать кластер из Docker-хостов, превращая их в единый логический хост, на котором можно запускать контейнеры. Swarm автоматически распределяет задачи между узлами, обеспечивая удобство и отказоустойчивость. В этой лекции мы рассмотрим ключевые компоненты и базовые команды для управления Docker Swarm.
Основные концепции Docker Swarm:
- Кластер (Swarm): группа Docker-хостов, объединенных в единый логический кластер.
- Менеджеры (Managers): узлы, управляющие кластером и распределяющие задачи между рабочими узлами.
- Рабочие узлы (Workers): узлы, которые выполняют задачи и запускают контейнеры.
- Сервисы (Services): логическое представление приложений, описывающее, какие задачи нужно выполнять и сколько экземпляров контейнеров запустить.
- Задачи (Tasks): единичные контейнеры, являющиеся экземплярами сервисов.
Архитектура Docker Swarm:
Docker Swarm использует архитектуру на основе менеджеров и рабочих узлов. Менеджеры управляют состоянием кластера, а рабочие узлы выполняют задачи.
Менеджеры:
- Управляют состоянием кластера и его конфигурацией.
- Распределяют задачи между рабочими узлами.
- Обеспечивают отказоустойчивость и высокую доступность (при наличии нескольких менеджеров).
Рабочие узлы:
- Выполняют задачи, назначенные менеджерами.
- Запускают контейнеры в соответствии с заданиями.
Основные команды Docker Swarm:
-
docker swarm init: инициализация нового кластера Swarm. -
docker swarm join: присоединение узла к существующему кластеру. -
docker node ls: просмотр списка узлов в кластере. -
docker service create: создание нового сервиса. -
docker service ls: просмотр запущенных сервисов. -
docker service scale: масштабирование сервиса до определенного количества экземпляров. -
docker service rm: удаление сервиса из кластера.
Использование Docker Swarm позволяет упростить управление приложениями в распределенных системах, обеспечивая отказоустойчивость, масштабируемость и удобство развертывания.
6.2 Создание кластера Docker Swarm
Создание и управление кластером Docker Swarm
Шаг 1: Инициализация кластера
На первом хосте (менеджере) выполните команду:
docker swarm init --advertise-addr <MANAGER_IPl>
Эта команда инициализирует новый кластер Swarm, сделает текущий узел менеджером и выведет команду для присоединения рабочих узлов.
Шаг 2: Присоединение рабочих узлов
На других хостах выполните команду, выведенную при выполнении docker swarm init, чтобы присоединить их к кластеру:
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
Где:
<SWARM_TOKEN>: токен для подключения к кластеру (выдается командойdocker swarm init).<MANAGER_IP>: IP-адрес узла-менеджера.
Шаг 3: Просмотр узлов
Для просмотра всех узлов в кластере используйте команду:
docker node ls
Эта команда покажет список всех узлов, включая их роли, состояния и доступность.
Пример вывода команды docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
qwertyuiop12345 manager-node Ready Active Leader
asdfghjkl67890 worker-node1 Ready Active
zxcvbnm09876 worker-node2 Ready Active
Объяснение колонок:
- ID: Уникальный идентификатор узла.
- HOSTNAME: Имя хоста, на котором запущен узел.
- STATUS: Текущий статус узла (например, Ready).
- AVAILABILITY: Доступность узла (например, Active).
- MANAGER STATUS: Показывает, является ли узел менеджером (например, Leader, Reachable) или рабочим узлом (пусто).
Теперь кластер Docker Swarm настроен, и вы можете создавать и масштабировать приложения.
6.3 Управление Docker Swarm
Управление сервисами в Docker Swarm
1. Создание сервиса
Создайте сервис, который будет запущен с заданным количеством реплик:
docker service create --name my_web --replicas 3 -p 8080:80 nginx
В этом примере создается сервис my_web, который запускает 3 экземпляра Nginx. Контейнеры публикуют порт 80 на порт 8080 хоста.
2. Просмотр сервисов
Для просмотра всех запущенных сервисов в кластере используйте команду:
docker service ls
Пример вывода команды docker service ls
ID NAME MODE REPLICAS IMAGE
ab12345 my_web replicated 3/3 nginx:latest
3. Масштабирование сервиса
Для изменения количества экземпляров (реплик) сервиса используйте команду docker service scale:
docker service scale my_web=5
Теперь сервис my_web будет иметь 5 экземпляров.
4. Обновление сервиса
Для обновления образа сервиса на новую версию используйте команду docker service update:
docker service update --image nginx:latest my_web
Обеспечение высокой доступности
Docker Swarm поддерживает высокую доступность за счет:
- Распределения задач между узлами в кластере для автоматического восстановления контейнеров при сбоях.
- Поддержки нескольких менеджеров: Рекомендуется нечетное количество менеджеров (например, 3 или 5) для избежания проблем с кворумом.
- Использования реплик: Настройте несколько реплик для каждого сервиса, чтобы повысить отказоустойчивость.
Понятие кворума
Кворум представляет собой большинство узлов, которые должны согласиться с определенным действием (например, записью данных или выбором лидера), чтобы оно считалось действительным. Например, в кластере из 5 узлов кворумом будет 3 узла.
Полезный совет! Убедитесь, что менеджеры размещены на разных физических или облачных серверах, чтобы минимизировать риск одновременных сбоев.
6.4 Пример конфигурации Docker Compose для Docker Swarm
Docker Compose можно использовать с Docker Swarm для упрощения управления многоконтейнерными приложениями.
Пример файла docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080-8090:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
networks:
- my_overlay_network
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: example
deploy:
replicas: 1
restart_policy:
condition: on-failure
networks:
- my_overlay_network
networks:
my_overlay_network:
driver: overlay
Запуск стека Docker Compose в Swarm
Для развертывания стека в Docker Swarm используйте команду:
docker stack deploy -c docker-compose.yml mystack
Просмотр стека
Просмотр развернутых стеков:
docker stack ls
Просмотр сервисов в стеке
docker stack services mystack
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ