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
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ