首页 > 解决方案 > 如何指定某个节点在 SWARM 中接收更多的服务副本

问题描述

我有 3 台服务器,其中一台的硬件比其他的多。当我运行docker stack deploy每个服务器时,我有一个具有 25 个副本的服务,它接收到该特定服务器的相同数量的副本。

我可以在 dockercompose 文件中指定某种百分比的副本以重定向到该特定节点吗?

标签: dockerdocker-composedocker-swarm

解决方案


您可以为您运行的容器定义资源预留,docker 会根据这些内存和 CPU 预留来避免调度容器是资源不足的节点。请注意,这应该对所有正在调度的容器进行,并且您需要分析您的应用程序以确定适当的预留和限制数量。请记住,在重负载期间,这些数字会增加,超过内存限制的响应是杀死容器并重新启动另一个实例,这在峰值负载期间会很糟糕,所以让你的限制足够大。

这是Docker 文档中的示例:

version: "3.7"
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M

另请参阅 Docker 的资源约束文档:https ://docs.docker.com/config/containers/resource_constraints/


第二个不太理想的选项是定义节点标签,将节点分成大小相等的组,其中大小基于资源。然后,您可以滥用允许跨 HA 区域分配工作负载的功能,以根据机器资源在机器之间分配工作负载。为此,您将使用放置首选项分布策略在标签的不同值之间分布工作负载:

version: "3.7"
services:
  db:
    image: postgres
    deploy:
      placement:
        preferences:
          - spread: node.labels.zone

推荐阅读