К сожалению, и, как вы уже узнали, нет способа (пока) ограничить задачу определенным ядром или группой ядер, работающих в режиме роя со стеками и / или службами.
Разумный вариант будетбыть вручную запускать эти контейнеры на машинах, на которых вы хотите их запускать, минуя Swarm в процессе.Таким образом, используя ваши машины в качестве "старых добрых" docker-демонов и используя флаг --cpuset-cpus
.
Единственный улов в том, что контейнеры по умолчанию получают доступ ко всем процессорам , если толькоограничено указанным выше флагом для одного контейнера.Таким образом, вы должны быть осторожны и исключить эти узлы из вашего Swarm, в противном случае он будет планировать контейнеры и использовать те ядра, которые вы хотите ограничить для вашего лицензионного программного обеспечения.
Другой вариант - запустить старый Swarm., который поддерживает флаг --cpuset-cpus
.Таким образом, вы можете запустить старый Swarm поверх своего парка докеров, управляемого в режиме Swarm.Просто убедитесь, что машины, на которых размещены ваши закрепленные контейнеры и контейнеры с ограничением ЦП, не доступны в режиме Swarm, например, можно использовать следующую опцию:
+-------------+
| Swarm Mode |
+----------------+ Primary |
| | |
| +------+------+
| |
| |
| | +----------------+
| | | Containers |
| | | with |
| | | pinned cores |
+------v------+ +------v------+ +------+------+---------+
| | | | | |
| Agent | | Agent | | Agent |
| | | | | |
+------+------+ +------^------+ +------^------+
^ | |
| | |
| | |
| | |
| | |
| | |
| +------+------+ |
| | Swarm | |
+----------------+ Primary +----------------+
| |
+-------------+
В заключение, разумного обходного пути на данный момент не существуетиспользуя только режим Docker Swarm.Возможно, со временем еще появится надежда увидеть эту землю в будущем.