具有异构节点的docker swarm:可用资源限制?


0

我的办公室里有一个小型的docker swarm:一个40核(128GB RAM)和两个8核(每个16GB RAM)。当我在整个群集中部署服务时,作业正在运行,但它们正在传播 不考虑每台机器的容量。

我在经理上启动了一个群体:

docker swarm init
docker swarm update --task-history-limit 2

并在每个节点上:

docker swarm join --token <token-string> <ipaddr:port>

然后我开始使用以下服务:

docker service create --detach \
     --mount type=bind,src=/s/mypath,dst=/home/mypath \
     --entrypoint "/home/mypath/myscript.sh arg1 arg2" \
     --name "mystuff" -w /home/mypath myregistry.me.com:5433/myimage

该过程单独工作。我没有根据节点强度找到分配权重或亲和力的指示。

理想情况下,我希望能够说出类似以下内容之一:

  1. 加入群体,不要超过 n 任务(有点天真)
  2. 加入群体,加权我的(cpu-)容量为 0.2 (要么 5 在更大的)
  3. 启动此服务,为每个可用核心分配不超过一个任务

我自我调节服务的整体规模 docker service scale,但这不提供任何粒度。是否可以通过可用资源来管理每个节点的docker swarm服务?

(这可能更有动力转向k8s,我假设它提供了沿着这些方向提供的功能。学习过程中的痛苦越来越大,而且过渡时我一直很僵硬。)

Answers:


1

创建或更新Swarm服务时确实可以实现所有这些功能。

这属于这些命令中的“容器放置”选项。如果这只是你担心的资源预留,那么看看 --reserve-cpu--reserve-memory。这些将确保节点在任务每个容器之前在节点上具有空闲cpu或内存可用。

示例:如果您需要一个swarm服务来部署两个php副本,并且每个都需要确保它位于具有1GB内存和1个CPU的节点上,那么 service create --reserve-cpu 1 --reserve-memory 1GB php 将仅调度Swarm调度程序知道具有可用硬件数量的节点上的容器。如果一个节点只有2个逻辑CPU,那么它永远不会在该节点上部署超过2个该服务的副本。


还有很多其他方法来控制任务放置,包括限制cpu /内存,“模式”(全局/替换),服务约束(标签匹配),放置首选项和节点可用性,但我提到的可能是你的答案。
Bret Fisher

这比我想象的要容易,不知道我是怎么错过它的。谢谢,布雷特!
r2evans

如果您愿意,将是另一个问题:是否有一种简单的方法可以限制启动的实例总数?也就是说,“将此任务运行100次”(并在异质工人中适当传播)“然后停止”?
r2evans

没有内置.Swarm假设服务长期运行。两个选项:尝试和服务创建选项一起破解 搜索重启 但这通常不是一次好的经历。最好的选择是通过Alex Ellis查看JaaS(作业即服务) github.com/alexellis/jaas 它运行在swarm之上,可以运行一次性的东西。
Bret Fisher

我对群体怀疑同样多(k8s可能有吸引力的一个原因)。我还没见过JaaS,我会检查一下。谢谢!
r2evans
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.