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

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

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

我在管理器上启动了集群:

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,我认为它提供了类似的功能。在学习和过渡过程中,我一直在努力克服成长的烦恼。)

答案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 个以上副本。

相关内容