我可以将核心分配给docker swarm容器吗?
我正在部署一个包含两个服务的堆栈文件(每个服务只有一个副本),我需要限制每个容器使用不同的CPU核心子集。我在网上发现swarm的堆栈文件(compose v3)不支持cpuset。我尝试了cpu限制,但这将只指定cpu资源的百分比,而不是内核。这个案子有解决办法吗?我需要核心分配来支持软件许可限制 是的,您可以限制cpu共享。例:我可以将核心分配给docker swarm容器吗?,docker,docker-compose,docker-swarm,docker-swarm-mode,Docker,Docker Compose,Docker Swarm,Docker Swarm Mode,我正在部署一个包含两个服务的堆栈文件(每个服务只有一个副本),我需要限制每个容器使用不同的CPU核心子集。我在网上发现swarm的堆栈文件(compose v3)不支持cpuset。我尝试了cpu限制,但这将只指定cpu资源的百分比,而不是内核。这个案子有解决办法吗?我需要核心分配来支持软件许可限制 是的,您可以限制cpu共享。例: docker service create --limit-cpu 2 nginx 不幸的是,正如您已经发现的那样,没有办法(目前)将任务限制在一个给定的内核或一
docker service create --limit-cpu 2 nginx
不幸的是,正如您已经发现的那样,没有办法(目前)将任务限制在一个给定的内核或一组运行swarm模式的内核上,该内核具有堆栈和/或服务 一个合理的选择是在您希望它们运行的机器上手动启动这些容器,在过程中绕过Swarm。因此,将您的计算机用作“普通的旧”docker守护进程,并使用
--cpuset CPU
标志
唯一需要注意的是,默认情况下,容器可以访问所有CPU,除非上面提到的单个容器的标志限制了它。因此,您需要小心,将这些节点从Swarm中排除,否则它将调度容器,并使用您希望限制的核心用于许可软件
另一个选项是运行支持--cpusetcpus
标志的旧版本。所以你可以在你的docker车队上运行一个用Swarm模式管理的旧Swarm。只需确保承载固定容器和cpu受限容器的计算机未通过Swarm模式访问,例如,以下可能是一个选项:
+-------------+
| Swarm Mode |
+----------------+ Primary |
| | |
| +------+------+
| |
| |
| | +----------------+
| | | Containers |
| | | with |
| | | pinned cores |
+------v------+ +------v------+ +------+------+---------+
| | | | | |
| Agent | | Agent | | Agent |
| | | | | |
+------+------+ +------^------+ +------^------+
^ | |
| | |
| | |
| | |
| | |
| | |
| +------+------+ |
| | Swarm | |
+----------------+ Primary +----------------+
| |
+-------------+
总之,目前仅使用Docker Swarm模式没有合理的解决办法。将来可能仍有希望看到这片土地。另一种选择是在容器中使用taskset。您可以在堆栈文件中更改服务容器命令,以便将其包装在任务集中(您可能需要自定义映像)。 例如:任务集-C2,3启动脚本