JavaRush /Курси /Модуль 2: Fullstack /Вступ до Docker Swarm

Вступ до Docker Swarm

Модуль 2: Fullstack
Рівень 15 , Лекція 5
Відкрита

6.1 Основні концепти Docker Swarm

Docker Swarm — це вбудована система оркестрації контейнерів, яку надає Docker. Вона дозволяє створювати, управляти і масштабувати кластер із Docker-хостів, перетворюючи їх в єдиний логічний хост, на якому можна запускати контейнери. Swarm автоматично розподіляє задачі між вузлами, забезпечуючи зручність і відмовостійкість. У цій лекції ми розглянемо ключові компоненти і базові команди для управління Docker Swarm.

Основні концепти Docker Swarm:

  1. Кластер (Swarm): група Docker-хостів, об'єднаних в єдиний логічний кластер.
  2. Менеджери (Managers): вузли, які управляють кластером і розподіляють задачі між робочими вузлами.
  3. Робочі вузли (Workers): вузли, що виконують задачі і запускають контейнери.
  4. Сервіси (Services): логічне представлення застосунків, що описує, які задачі потрібно виконати і скільки екземплярів контейнерів запустити.
  5. Задачі (Tasks): одиничні контейнери, які є екземплярами сервісів.

Архітектура Docker Swarm:

Docker Swarm використовує архітектуру на основі менеджерів і робочих вузлів. Менеджери управляють станом кластеру, а робочі вузли виконують задачі.

Менеджери:

  • Управляють станом кластеру і його конфігурацією.
  • Розподіляють задачі між робочими вузлами.
  • Забезпечують відмовостійкість і високу доступність (при наявності кількох менеджерів).

Робочі вузли:

  • Виконують задачі, призначені менеджерами.
  • Запускають контейнери відповідно до завдань.

Основні команди Docker Swarm:

  1. docker swarm init: ініціалізація нового кластера Swarm.
  2. docker swarm join: приєднання вузла до існуючого кластеру.
  3. docker node ls: перегляд списку вузлів у кластері.
  4. docker service create: створення нового сервісу.
  5. docker service ls: перегляд запущених сервісів.
  6. docker service scale: масштабування сервісу до визначеної кількості екземплярів.
  7. docker service rm: видалення сервісу з кластеру.

Використання Docker Swarm дозволяє спростити управління застосунками в розподілених системах, забезпечуючи відмовостійкість, масштабованість і зручність розгортання.

6.2 Створення кластера Docker Swarm

Створення та управління кластером Docker Swarm

Крок 1: Ініціалізація кластера

На першому хості (менеджері) виконай команду:

Terminal

docker swarm init --advertise-addr <MANAGER_IPl>

Ця команда ініціалізує новий кластер Swarm, зробить поточний вузол менеджером і виведе команду для приєднання робочих вузлів.

Крок 2: Приєднання робочих вузлів

На інших хостах виконай команду, яка виводиться при виконанні docker swarm init, щоб приєднати їх до кластера:

Terminal

docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377

Де:

  • <SWARM_TOKEN>: токен для підключення до кластера (видається командою docker swarm init).
  • <MANAGER_IP>: IP-адреса вузла-менеджера.

Крок 3: Перегляд вузлів

Для перегляду всіх вузлів в кластері скористайся командою:

Terminal

docker node ls

Ця команда покаже список усіх вузлів, включно з їхніми ролями, станами і доступністю.

Приклад виводу команди docker node ls

Terminal

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. Створення сервісу

Створіть сервіс, який буде запущений із заданою кількістю реплік:

Terminal

docker service create --name my_web --replicas 3 -p 8080:80 nginx

У цьому прикладі створюється сервіс my_web, який запускає 3 екземпляри Nginx. Контейнери публікують порт 80 на порт 8080 хоста.

2. Перегляд сервісів

Для перегляду всіх запущених сервісів у кластері використовуйте команду:

Terminal

docker service ls

Приклад виводу команди docker service ls

Terminal

ID                     NAME         MODE           REPLICAS     IMAGE
ab12345               my_web       replicated     3/3          nginx:latest

3. Масштабування сервісу

Для зміни кількості екземплярів (реплік) сервісу використовуйте команду docker service scale:

Terminal

docker service scale my_web=5

Тепер сервіс my_web матиме 5 екземплярів.

4. Оновлення сервісу

Для оновлення образу сервісу до нової версії використовуйте команду docker service update:

Terminal

docker service update --image nginx:latest my_web

Забезпечення високої доступності

Docker Swarm підтримує високу доступність завдяки:

  1. Розподілу задач між вузлами у кластері для автоматичного відновлення контейнерів у разі збоїв.
  2. Підтримки кількох менеджерів: Рекомендується непарна кількість менеджерів (наприклад, 3 або 5), щоб уникнути проблем із кворумом.
  3. Використання реплік: Налаштуйте кілька реплік для кожного сервісу, щоб підвищити відмовостійкість.

Поняття кворуму

Кворум представляє собою більшість вузлів, які мають погодитися з певною дією (наприклад, записом даних або вибором лідера), щоб вона вважалася дійсною. Наприклад, у кластері з 5 вузлів кворумом буде 3 вузли.

Корисна порада! Переконайтеся, що менеджери розміщені на різних фізичних або хмарних серверах, щоб мінімізувати ризик одночасних збоїв.

6.4 Приклад конфігурації Docker Compose для Docker Swarm

Docker Compose можна використовувати з Docker Swarm, щоб спростити керування багатоконтейнерними застосунками.

Приклад файлу docker-compose.yml

Yaml

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 використовуйте команду:

Terminal

docker stack deploy -c docker-compose.yml mystack

Перегляд стеку

Перегляд розгорнутих стеків:

Terminal

docker stack ls

Перегляд сервісів у стеку

Terminal

docker stack services mystack
Коментарі (1)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Марк Рівень 49
11 травня 2025
Оновлення сервісу в Swarm - опис не повний, підказки не інформативні. Команди та ключі які потрібні для розвʼязання задачі відсутні у поточній лекції.