Предположим, кластер Docker с тремя узлами. Один из этих узлов, ресурсы ограничены. Пара служб, которые могут быть довольно жадными с точки зрения ЦП или ОЗУ, запустились на одном и том же хосте.
Будет ли Docker в любой момент проверять, меньше ли работы у других узлов? и перенести одну или несколько служб с узла, подверженного давлению, на один из узлов с меньшим давлением?
Есть ли в Docker какие-либо встроенные функции, чтобы справиться с этим, или миграция в конечном итоге будет результатом, например, убийства OOM контейнер?
Swarm не перемещает задачи (контейнеры). Его цель - «не навредить», перемещая контейнеры, о которых вы явно не указывали. Если вы выполните обновление службы
, оно повторно создаст контейнер, возможно, на других узлах на основе 1. обеспечения распределения задач в этой службе по узлам и 2. плотности контейнера на узел.
Но AFAIK, эта оценка не основана на использовании ресурсов каждый момент.
Вы можете использовать - limit-cpu / memory
и - reserve-cpu Параметры / memory
в вашей службе создают / обновляют
команды, которые помогут. резерв
заставит Swarm отслеживать это резервирование, и если вы установите резервирование для нескольких сервисов, он будет следить за тем, чтобы они были запланированы на узлах, у которых есть эти доступные ресурсы, но, опять же, он просто использует таблицу резервирования, а не реально- использование времени для определения этого (AFAIK).
Я видел, как люди использовали Prometheus для мониторинга и запуска предупреждений, масштабирующих службу, поэтому вполне возможно, что эти предупреждения также могут запускать перемещение контейнера.