【问题标题】:There is a way to pass --cpus-cpuset and --cpuset-mems to docker swarm有一种方法可以将 --cpus-cpuset 和 --cpuset-mems 传递给 docker swarm
【发布时间】: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 上实现相同功能的方法。

标签: docker swarm numa cpuset


【解决方案1】:

暂时不支持,issue on GitHub,大家应该为这个功能投票。

【讨论】:

    猜你喜欢
    • 2016-04-13
    • 2022-01-16
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2015-08-08
    • 2020-09-07
    • 1970-01-01
    相关资源
    最近更新 更多