докерний рій з гетерогенними вузлами: обмеження наявними ресурсами?


0

У мене в офісі працює невеликий докерський рій: один 40-ядерний (128 ГБ оперативної пам’яті) та два 8-ядерних (16 ГБ оперативної пам’яті кожен). Коли я розгортаю службу через рій, завдання виконуються, але вони розподіляються рівномірно, не зважаючи на потужність машини.

Я розпочав рій на менеджера з:

docker swarm init
docker swarm update --task-history-limit 2

і на кожному вузлі:

docker swarm join --token <token-string> <ipaddr:port>

Потім я запускаю послугу з:

docker service create --detach \
     --mount type=bind,src=/s/mypath,dst=/home/mypath \
     --entrypoint "/home/mypath/myscript.sh arg1 arg2" \
     --name "mystuff" -w /home/mypath myregistry.me.com:5433/myimage

Процес працює індивідуально. Я не знайшов вказівки на присвоєння ваги чи спорідненості на основі сили вузла.

В ідеалі я хотів би мати можливість сказати щось подібне до цього:

  1. приєднуйся до роя, приймай не більше ніж nзавдання (трохи наївно)
  2. приєднуйся до рою, зважи мою (процесорну) ємність 0.2(або 5на більших)
  3. запустіть цю послугу, призначте не більше одного завдання на доступне ядро

Я саморегулюю загальний масштаб послуги docker service scale, але це не дає ніякої деталізації. Чи можна регулювати послуги рій докера на вузол за наявними ресурсами?

(Це може бути ще більш стимулом для переходу на k8s, який, я припускаю, забезпечує функціональність у цих напрямках. Зростаюча біль у навчанні та перехід, який я жорстко озброював.)

Відповіді:


1

Все, що дійсно можливо під час створення або оновлення послуги Swarm.

Це підпадає під параметри "розміщення контейнерів" у цих командах. Якщо ви просто хвилюєтесь із резервування ресурсів, тоді подивіться --reserve-cpuі --reserve-memory. Вони забезпечать, що у вузла буде вільний процесор чи пам'ять на вузлі, перш ніж задавати кожен контейнер.

Приклад: Якщо вам потрібна служба рій для розгортання двох реплік php, і кожна повинна переконатися, що вона знаходиться на вузлі з 1 ГБ пам'яті та 1 процесором, тоді service create --reserve-cpu 1 --reserve-memory 1GB phpбуде призначено лише контейнери на вузлах, про які знає планувальник Swarm. в наявності. Якщо у вузла є лише 2 логічних процесора, він ніколи не розгортатиме більше двох реплік цієї служби на цьому вузлі.


Існує маса інших способів контролю за розміщенням завдань, включаючи обмеження процесора / пам'яті, "режим" (глобальний / замінений), обмеження обслуговування (відповідність міток), налаштування розташування та доступність вузлів, але ті, про які я згадую, швидше за все, відповідь.
Брет Фішер

Це було простіше, ніж я очікував, не впевнений, як я це пропустив. Спасибі, Брет!
r2evans

Буде ще одне питання, якщо Ви віддаєте перевагу: чи є простий спосіб обмежити загальну кількість запущених примірників? Тобто "виконати це завдання 100 разів" (і розподілити належним чином по гетерогенним працівникам) ", а потім зупинитися"?
r2evans

не вбудований. Ройм передбачає, що Служба триває. Два варіанти: спробувати і зламати щось із сервісом, створити параметри пошуку для перезавантаження, але це, як правило, не дуже хороший досвід. Найкращим варіантом є перевірка JaaS (Робота як послуга) Алекса Еліса github.com/alexellis/jaas, який працює на вершині роя і може виконувати одноразові речі.
Брет Фішер

1
Так, у Swarm є вбудовані речі, які не мають K8, а K8s - те саме. Ось чому є кілька успішних оркестрантів (кочівник, мезо, рой, k8s тощо)
Брет Фішер,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.