【发布时间】:2021-01-31 18:36:03
【问题描述】:
我查看了文档,似乎不可能将 Docker swarm 中的进程隔离到特定的核心,例如使用 numactl 或 cpuset--cpus 时。在docker run 你这样做(16 cpu 机器,在 8-15 的第二个套接字上使用 8 cpu):
/usr/bin/docker run --detach --name myproc --cpus 8 --cpuset-cpus 8-15 --cpuset-mems 1 -- privateregistry:5000/myimage:v1 -c '/bin/myverycpuintensiveprocess.sh'
我可以确认进程不会从一个核心跳到另一个核心,而是固定在 CPUS 8-15 上。他们还将使用来自套接字 1 的内存。
从“create service”文档中,我看到最接近的是“--reserve-cpu”和--reserve-memory',但这只是为了控制容器放置。
Docker Swarm 是否禁止这种级别的控制?我也在看 K8s,它似乎也有同样的限制。
谢谢,
【问题讨论】:
-
Docker Swarm 和 Kubernetes 都是为多主机系统设计的,您通常无法控制容器在哪个主机上运行,更不用说分配特定的内核了。
-
这根本不是真的。在 Docker Swarm 中,您在 K8s 上具有节点约束和节点标签,以控制您希望在何处运行特定进程(例如带有 SSD 磁盘的机器,或具有 500GB RAM 的服务器或连接到市场数据源附近的服务器)。
-
嗨,我想澄清一下之前的评论(stackoverflow 有一个奇怪的规则,你只能编辑 5 分钟的评论 :-))在 Docker Swarm 中,你有节点约束 (--constraint) 和node affinity 在 K8s 上控制您希望在哪里运行特定进程(例如带有 SSD 磁盘的机器,或具有 500GB RAM 的服务器或连接到市场数据源附近的服务器)。
-
我发现 Kubernetes 支持这个功能,使用“CPU 管理器”:kubernetes.io/docs/tasks/administer-cluster/… 仍在寻找在 Docker Swarm 上实现相同功能的方法。