swarm可以在service创建或运行过程中灵活的通过--replicas调整容器的副本数量,内部调整调度器则会根据当前集群资源使用的情况在不同的node上启动或停止容器,这就是service默认的replicated mode。在此模式下,node上运行的副本数有多有少,一般情况下,资源更丰富的node运行的副本数更多,反之亦然。
除了replicated mode,service还提供了一个global mode,起作用是强制在每个node上都运行一个且最多一个副本。
此模式特备适合需要运行daemon的集群环境。比如要收集所有容器的日志,就可以以global mode创建service,在所有的node上运行gliderlabs/logspout容器,及时之后有新的node加入,swarm也会自动在新node上启动一个gliderlabs/logspout副本。
docker service create --mode global --name logspout gliderlabs/logspout
通过docker service inspect查看service的mode
注:如果创建service时不指定mode,默认使用replicated
无论是采用global mode还是replicated mode,副本运行在哪些节点上都是由swarm决定的。