Установка общих ресурсов ЦП является наиболее прямым ответом на ваш запрос, и обычно предпочтительнее, чем добавление возможностей в контейнер, может использоваться злоумышленником внутри контейнера для воздействия на хост.Единственная причина, по которой я могу подумать о добавлении возможности SYS_NICE к контейнеру, заключается в том, что у вас есть несколько процессов внутри контейнера и вы хотите назначить им разные приоритеты, или вам нужно изменить приоритет во время работы контейнера.
Более традиционным решением для шумных соседей является настройка каждого контейнера с ограничением того, сколько ЦП и памяти ему разрешено использовать.Это верхняя граница, поэтому следует понимать, что могут быть незанятые ресурсы ЦП, если вы установите этот низкий уровень и у вас не будет других задач, доступных для запуска ЦП.
Самый простой способ установить ограничение на контейнеры изdocker run
командная строка с --cpus
, которая позволяет вам настроить дробное число ядер, которые будут доступны для контейнера.Передача параметра типа --cpus 2.5
позволяет контейнеру использовать до 2,5 ядер до того, как планировщик ядра регулирует процесс.Если у вас был 4-ядерный хост, это гарантировало бы, что по крайней мере 1,5 ядра всегда будут доступны для других процессов.
В связи с этими ограничениями, в режиме Swarm вы также можете настроить резервирование для ЦП (и памяти).Резервирование - это нижний предел, который Docker гарантирует, что он не был зарезервирован для других контейнеровЭто используется для выбора узлов для планирования контейнеров и может препятствовать планированию некоторых контейнеров, когда не хватает доступных ресурсов, вместо того, чтобы планировать так много заданий на одном узле, чтобы он не работал.