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
:
-
swarm manager(service1),swarm node1(service2),sw2 node2(service3)
-
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),那么这些服务将在所有可以在其他节点上失败后运行的节点上启动。
从个人经验来看,我可以告诉你,它在群体中传播的任务很好,但是不能保证哪个服务最终结束。
如果你想强制服务运行使用约束。