Назад | Перейти на главную страницу

Переносит ли Docker Swarm ресурсоемкие контейнеры на другие узлы?

Предположим, кластер Docker из 3 узлов. Один из этих узлов, ресурсы ограничены. Несколько служб, которые могут быть довольно жадными с точки зрения ЦП или ОЗУ, запустились на одном и том же хосте.

Будет ли Docker в какой-то момент проверять, меньше ли работы над остальными узлами, и переносить ли одну или несколько служб с узла, на который оказывается давление, на один из узлов, на которые давление меньше?

Есть ли в Docker какие-либо встроенные функции для решения этой проблемы, или в конечном итоге миграция будет результатом, например, убийца OOM вынимает контейнер?

Swarm не перемещает задачи (контейнеры). Его цель - «не навредить», перемещая контейнеры, о которых вы явно не указывали. Если вы сделаете service update он воссоздает контейнер, возможно, на других узлах на основе 1. обеспечения распределения задач в этой службе по узлам и 2. плотности контейнера на узел.

Но AFAIK эта оценка не основана на использовании ресурсов каждый момент времени.

Вы жестяная банка использовать --limit-cpu/memory и --reserve-cpu/memory варианты на вашем service create/update команды, которые помогут. reserve заставит Swarm отслеживать это резервирование, и если вы установите резервирование для нескольких сервисов, он будет следить за тем, чтобы они были запланированы на узлах, у которых есть эти доступные ресурсы, но, опять же, он просто использует таблицу резервирования, а не использование в реальном времени, чтобы определить это (AFAIK ).

Я видел, как люди использовали Prometheus для мониторинга и запуска предупреждений, которые масштабируют службу, поэтому вполне возможно, что эти предупреждения также могут запускать перемещение контейнера.