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

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

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

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

2
задан 11 December 2017 в 10:05
1 ответ

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

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

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

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

3
ответ дан 3 December 2019 в 10:34

Теги

Похожие вопросы