Все про Docker Swarm і про те, як він управляє та оркеструє всі контейнери в кластері.
Contents
Що таке Докер Рой?
Докерський рій – це режим роботи з кластером Docker Engine, звідси і назва Swarm. Скупчення докерських хостів працює в режимі рій, що складається з менеджерів і працівників. Екземпляри докер-двигуна, які беруть участь у рій, називаються вузлами.
Розгортання рій рівня виробництва складається з докерних вузлів, рознесених на декілька серверів.
Навіщо його використовувати? – Оркестровка контейнерів
Коли ви працюєте у виробничому середовищі, 100-ти докер-контейнерів будуть працювати в ньому кілька додатків. Керування всіма цими контейнерами може бути великим болем для всіх інженерів DevOps; саме тут вам допомагає Докер Рой. Він з легкістю управляє та оркеструє кластер із керуванням кількох докерних контейнерів.
Нижче наведено деякі його особливості:
- Висока доступність – має на меті не вимагати простоїв або відключень.
- Балансування навантаження – автоматично розподіляти ресурси та запити на інші вузли кластера, якщо будь-який вузол виходить з ладу.
- Децентралізована – кілька вузлів менеджера, що працюють у виробничому середовищі; отже, кластер ніколи не залежить від одного вузла менеджера.
- Масштабованість – за допомогою однієї команди roarm rocker ви можете легко масштабувати або зменшувати розміри контейнерів у кластері.
Оркестрові докер-контейнери
Тепер, коли ви знаєте основи Docker Swarm, давайте розглянемо приклад його реалізації.
У цьому прикладі у мене є три машини, що працюють у кластері із наведеними нижче деталями:
менеджер1: 192.168.56.104
робітник1: 192.168.56.105
робітник2: 192.168.56.102
Щоб ініціалізувати режим рій у докер, запустіть команду нижче на вузлі менеджера. Прапор –advertise-addr використовується для реклами самих вузлів, які можуть приєднатися до кластеру.
[захищено електронною поштою]: ~ $ docker рій init – рекламувати-addr 192.168.56.104
Рой ініціалізований: поточний вузол (lssbyfzuiuh3sye1on63eyixf) тепер менеджер.
Щоб додати робітника до цього рою, запустіть таку команду:
докер рой приєднатись –команда SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377
Щоб додати менеджера до цього рою, запустіть “менеджер докерів ройового з’єднання докерів” та дотримуйтесь інструкцій.
Наведена вище команда генерує маркер, який будуть використовуватися іншими вузлами для приєднання до цього кластеру. Скопіюйте команду за допомогою генерованого маркера та запустіть її на робочих вузлах.
Запуск маркера на вузлі Working1.
[захищено електронною поштою]: ~ $ докер приєднатися до рою –виступає SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377
Цей вузол приєднався до рою як робітник.
Запуск маркера на вузлі Working2.
[захищено електронною поштою]$
Цей вузол приєднався до рою як робітник.
Тепер на вузлі менеджера ви можете перевірити, які вузли працюють у кластері.
[захищено електронною поштою]: ~ $ docker вузол ls
ID HOSTNAME STATUS ВПРАВЛІННЯ ДОСТУПНОСТІМ ДЕРЖАВНИЙ ВЕРСІЯ
lssbyfzuiuh3sye1on63eyixf * менеджер1 Готовий активний керівник 18.09.6
utdr3dnngqf1oy1spupy1qlhu робітник1 Ready Active 18.09.6
xs6jqp95lw4cml1i1npygt3cg працівник2 Ready Active 18.09.6
Давайте побудуємо зображення докера geekflare_mongodb, яке ми використовували в навчальному посібнику Dockerfile.
docker build -t geekflare_mongodb .
Запустіть контейнер із зображенням докера MongoDB, створивши службу рій. 27017 – номер порту, на якому виставлено MongoDB.
[захищено електронною поштою]: ~ $ docker service create –name "Монго-контейнер" -p 27017: 27017 geekflare_mongodb
image geekflare_mongodb: до реєстру не вдалося отримати доступ до останнього, щоб записати його дайджест. Кожен вузол матиме доступ до geekflare_mongodb: останній незалежно, можливо, ведучи до різних вузлів, що працюють з різними версіями зображення.
kok58xa4zi05psh3uy6s5x9e6
загальний хід: 1 з 1 завдань
1/1: біг
перевірити: Служба конвертована
Перевірте, чи розпочалась служба рою докерів. Реплікація MODE означає, що контейнер був тиражований на всіх вузлах кластера, а REPLICAS 1/1 означає, що наразі працює лише одна служба рою.
[захищено електронною поштою]: ~ $ docker service ls
ІД НАЗВАННЯ РЕЖИМ ЗАМОВЛЕННЯ ІЗОБРАЖЕНИХ ПОРТ
kok58xa4zi05 Mongo-Container копіюється 1/1 geekflare_mongodb: останнє *: 27017->27017 / тс
Перевіримо, на якому вузлі в кластері працює ця єдина служба. Він працює на вузлі manager1.
[захищено електронною поштою]: ~ $ docker service ps Mongo-Container
ІД ІМЕЦЬ ІМЕЦІЙНИЙ ПІД ЧИСТОЧНИЙ ДЕРЖАВНИЙ СУЧАСНИЙ ДЕРЖАВНА ПОМИЛКА
jgqjo92rbq23 Mongo-Container.1 geekflare_mongodb: останній менеджер1 Біг Біг близько хвилини тому
Запустіть команду docker ps, щоб отримати детальнішу інформацію про контейнер, в якому працює ця служба рою.
[захищено електронною поштою]: ~ $ docker ps
ІМЕНТ ІНФОРМАЦІЇ КОНТАЙНЕРУ КОМАНДА СТВОРЕННЯ ІМЕНІВ СТАТУСНОГО ПОРТУ
05d77e7b4850 geekflare_mongodb: останнє "/ bin / sh -c usr / bin /…" 2 хвилини тому вгору 2 хвилини 27017 / tcp Mongo-Container.1.jgqjo92rbq23sv01hrufdigtx
Ви можете запустити службу рою в “Глобальний” також замість типового “тиражуваного” режиму. Глобальний режим виконує одне завдання служби рій на всіх вузлах кластера.
Перш ніж запустити службу в глобальному режимі, дозвольте мені видалити існуючий запущений контейнер.
[захищено електронною поштою]: ~ $ docker service rm Mongo-Container
Монго-контейнер
Запустіть службу рій всередині контейнера докера в глобальному режимі, використовуючи прапор –моделя.
[захищено електронною поштою]: ~ $ docker service create –name "Монго-контейнер" -p 27017: 27017 –модуйте глобальний geekflare_mongodb
image geekflare_mongodb: до реєстру не вдалося отримати доступ до останнього, щоб записати його дайджест. Кожен вузол матиме доступ до geekflare_mongodb: останній незалежно, можливо, ведучи до різних вузлів, що працюють з різними версіями зображення.
mfw8dp0zylffppkllkcjl8391
загальний хід: 3 з 3 завдань
utdr3dnngqf1: працює
lssbyfzuiuh3: біг
xs6jqp95lw4c: працює
перевірити: Служба конвертована
Перевірте, чи почалася служба рою в глобальному режимі. Оскільки в кластері працює три вузли (1 менеджер, 2 працівники), тому кількість реплік становить 3.
[захищено електронною поштою]: ~ $ docker service ls
ІД НАЗВАННЯ РЕЖИМ ЗАМОВЛЕННЯ ІЗОБРАЖЕНИХ ПОРТ
mfw8dp0zylff Mongo-Container global 3/3 geekflare_mongodb: останнє *: 27017->27017 / тс
Зараз три сервіси працюють через 3 вузли, перевірте це, виконавши команду нижче.
[захищено електронною поштою]: ~ $ docker service ps Mongo-Container
ІД ІМЕЦЬ ІМЕЦІЙНИЙ ПІД ЧИСТОЧНИЙ ДЕРЖАВНИЙ СУЧАСНИЙ ДЕРЖАВНА ПОМИЛКА
zj2blvptkvj6 Mongo-Container.xs6jqp95lw4cml1i1npygt3cg geekflare_mongodb: останній робітник2 Біг Біг близько хвилини тому
3eaweijbbutf Mongo-Container.utdr3dnngqf1oy1spupy1qlhu geekflare_mongodb: останній робітник1 Біг Біг близько хвилини тому
yejg1o2oyab7 Mongo-Container.lssbyfzuiuh3sye1on63eyixf geekflare_mongodb: останній менеджер1 Біг Біг працює близько хвилини тому
Далі дозвольте мені показати, як можна визначити кількість реплік. Перед цим я вийму поточний контейнер, який працює.
[захищено електронною поштою]: ~ $ docker service rm Mongo-Container
Монго-контейнер
У команді використовуйте прапор -replicas і вкажіть кількість реплік, які ви хочете отримати в службі рой. Наприклад, я хочу мати дві репліки служби рій:
[захищено електронною поштою]: ~ $ docker service create –name "Монго-контейнер" -p 27017: 27017 –replicas = 2 geekflare_mongodb
image geekflare_mongodb: до реєстру не вдалося отримати доступ до останнього, щоб записати його дайджест. Кожен вузол матиме доступ до geekflare_mongodb: останній незалежно, можливо, ведучи до різних вузлів, що працюють з різними версіями зображення.
4yfl41n7sfak65p6zqwwjq82c
загальний хід: 2 з 2 завдань
1/2: біг
2/2: біг
перевірити: Служба конвертована
Перевірте поточні послуги рою. Ви можете бачити, що одна репліка працює у вузлі manager1, а інша – у вузлі Working1.
[захищено електронною поштою]: ~ $ docker service ps Mongo-Container
ІД ІМЕЦЬ ІМЕЦІЙНИЙ ПІД ЧИСТОЧНИЙ ДЕРЖАВНИЙ СУЧАСНИЙ ДЕРЖАВНА ПОМИЛКА
xukodj69h79q Mongo-Container.1 geekflare_mongodb: останній працівник1 Біг Біг 9 секунд тому
e66zllm0foc8 Mongo-Container.2 geekflare_mongodb: останній менеджер1 Запуск Біг 9 секунд тому
Перейдіть у вузол Working1 і перевірте, чи працює контейнер докера.
[захищено електронною поштою]: ~ $ docker ps
ІМЕНТ ІНФОРМАЦІЇ КОНТАЙНЕРУ КОМАНДА СТВОРЕННЯ ІМЕНІВ СТАТУСНОГО ПОРТУ
5042b7f161cb geekflare_mongodb: останнє "/ bin / sh -c usr / bin /…" Десь хвилину тому вгору Близько хвилини 27017 / tcp Mongo-Container.1.xukodj69h79q3xf0pouwm7bwv
Щоб зупинити цей контейнер, запустіть команду нижче.
[захищено електронною поштою]: ~ $ докер стоп 5042b7f161cb
5042b7f161cb
Тепер від вузла manager1, якщо ви перевірите, які саме вузли виконують службу, ви побачите, що вона працює на вузлі manager1 та на рівні Working2. СУЧАСНИЙ СТАТТЯ вузла Working1 – це Вимкнення (коли ми зупинили контейнер, що виконує службу). Але оскільки в цій службі повинні працювати дві репліки, для роботи 2 була запущена інша послуга.
Так ви досягаєте високої доступності, використовуючи докерський рій.
[захищено електронною поштою]: ~ $ docker service ps Mongo-Container
ІД ІМЕЦЬ ІМЕЦІЙНИЙ ПІД ЧИСТОЧНИЙ ДЕРЖАВНИЙ СУЧАСНИЙ ДЕРЖАВНА ПОМИЛКА
cd2rlv90umej Mongo-Container.1 geekflare_mongodb: останній робітник2 Біг Біг 30 секунд тому
xukodj69h79q \ _ Mongo-Container.1 geekflare_mongodb: останній робітник1 Вимкнення не вдалося 38 секунд тому "завдання: ненульовий вихід (137)"
e66zllm0foc8 Mongo-Container.2 geekflare_mongodb: останній менеджер1 Біг Біг 3 хвилини тому
Масштабувати контейнери докера вгору або вниз дуже просто. Команда внизу збільшить масштаб контейнера mongo до 5.
[захищено електронною поштою]: ~ шкала обслуговування послуги докер Mongo-Container = 5
Монго-контейнер масштабували до 5
загальний хід: 5 з 5 завдань
1/5: біг
2/5: біг
3/5: біг
4/5: біг
5/5: біг
перевірити: Служба конвертована
Перевірте, скільки зараз працює реплік контейнера mongo, його повинно бути 5.
[захищено електронною поштою]: ~ $ docker service ls
ІД НАЗВАННЯ РЕЖИМ ЗАМОВЛЕННЯ ІЗОБРАЖЕНИХ ПОРТ
4yfl41n7sfak Mongo-Container копіюється 5/5 geekflare_mongodb: останнє *: 27017->27017 / тс
Перевірте, де в кластері працюють ці 5 реплік. 1 репліка працює у вузлі manager1 та 2 репліки на обох робочих вузлах.
[захищено електронною поштою]: ~ $ docker service ps Mongo-Container
ІД ІМЕЦЬ ІМЕЦІЙНИЙ ПІД ЧИСТОЧНИЙ ДЕРЖАВНИЙ СУЧАСНИЙ ДЕРЖАВНА ПОМИЛКА
cd2rlv90umej Mongo-Container.1 geekflare_mongodb: останній робітник2 Біг Біг 2 хвилини тому
xukodj69h79q \ _ Mongo-Container.1 geekflare_mongodb: останній робітник1 Вимкнення не вдалося 2 хвилини тому "завдання: ненульовий вихід (137)"
e66zllm0foc8 Mongo-Container.2 geekflare_mongodb: останній менеджер1 Біг Біг 5 хвилин тому
qmp0gqr6ilxi Mongo-Container.3 geekflare_mongodb: останній працівник2 Біг Біг 47 секунд тому
9ddrf4tsvnu2 Mongo-Container.4 geekflare_mongodb: останній робітник1 Біг Біг 46 секунд тому
e9dhoud30nlk Mongo-Container.5 geekflare_mongodb: останній робітник1 Біг Біг 44 секунди тому
У вашому кластері, якщо ви не хочете, щоб ваші служби запускалися на вузлах (іх) менеджера, і хочете зберегти їх лише для управління вузлами, ви можете злити вузол менеджера з.
[захищено електронною поштою]: ~ оновлення вузла $ docker – доступність менеджера злив1
менеджер1
Перевірте наявність вузла менеджера.
[захищено електронною поштою]: ~ $ docker вузол ls
ID HOSTNAME STATUS ВПРАВЛІННЯ ДОСТУПНОСТІМ ДЕРЖАВНИЙ ВЕРСІЯ
lssbyfzuiuh3sye1on63eyixf * manager1 Ready Lead Drain Leader 18.09.6
utdr3dnngqf1oy1spupy1qlhu робітник1 Ready Active 18.09.6
xs6jqp95lw4cml1i1npygt3cg працівник2 Ready Active 18.09.6
Ви побачите, що служби більше не працюють на вузлі менеджера; вони поширюються по робочих вузлах кластера.
[захищено електронною поштою]: ~ $ docker service ps Mongo-Container
ІД ІМЕЦЬ ІМЕЦІЙНИЙ ПІД ЧИСТОЧНИЙ ДЕРЖАВНИЙ СУЧАСНИЙ ДЕРЖАВНА ПОМИЛКА
cd2rlv90umej Mongo-Container.1 geekflare_mongodb: останній робітник2 Біг Біг 5 хвилин тому
xukodj69h79q \ _ Mongo-Container.1 geekflare_mongodb: останній робітник1 Вимкнення не вдалося 5 хвилин тому "завдання: ненульовий вихід (137)"
qo405dheuutj Mongo-Container.2 geekflare_mongodb: останній робітник1 Біг Біг 41 секунди тому
e66zllm0foc8 \ _ Mongo-Container.2 geekflare_mongodb: останній менеджер1 Shutdown Shutdown 44 секунди тому
qmp0gqr6ilxi Mongo-Container.3 geekflare_mongodb: останній робітник2 Біг Біг 3 хвилини тому
9ddrf4tsvnu2 Mongo-Container.4 geekflare_mongodb: останній робітник1 Біг Біг 3 хвилини тому
e9dhoud30nlk Mongo-Container.5 geekflare_mongodb: останній робітник1 Біг Біг 3 хвилини тому
Це було все про Docker Swarm та те, як оркеструвати контейнери в режимі rocker docker. Спробуйте це у своєму невиробничому середовищі, щоб зрозуміти, як це працює.
МЕТИ:
-
Докер