docker堆栈可以将服务平均分配给所有节点吗?

我有:

  • 三个1群pipe理员和2个群工作节点
  • 一个相互连接的应用程序集群

泊坞窗,compose.yml

services: service1: ports: - 8888:8888 environment: - ADDITIONAL_NODES=service2:8889,service3:8890 service2: ports: - 8889:8889 environment: - ADDITIONAL_NODES=service1:8888,service3:8890 service3: ports: - 8890:8890 environment: - ADDITIONAL_NODES=service1:8888,service2:8889 

如果我运行docker stack deploy -c docker-compose.yml server

  1. swarm manager(service1),swarm node1(service2),sw2 node2(service3)

  2. sw1pipe理器(service1,service2,service3),swarm node1(service1,service2,service3),swarm node3(service1,service2,service3)

哪一个会是结果?

如果是2 ,我怎样才能像使用docker群一样部署? 我需要使用docker群,因为我也使用dockernetworking覆盖。

如果是1 ,那么我的服务如何分配? 是“平均”分布吗? 如果这是真的,那么“平均”分布在什么angular度呢?

Docker swarm有一些逻辑,它用来决定在哪些节点上运行哪些服务。 它现在可能是你期望的100%,但是他们是在这方面工作的聪明人,可能会考虑你不需要的东西(比如CPU负载,可用的RAM等)

目标是平均分配负载,就像例子1一样。如果某些服务因为某种原因不能在一个节点上启动(就像使用私有registry,但是没有在堆栈部署中指定–with-registry-auth),那么这些服务将在所有可以在其他节点上失败后运行的节点上启动。

从个人经验来看,我可以告诉你,它在群体中传播的任务很好,但是不能保证哪个服务最终结束。

如果你想强制服务运行使用约束。