Docker Stack Swarm - 服务副本不会针对 Mutli Service Stack 进行分布



我已经在两台主机上部署了一个包含 4 个服务的堆栈(docker compose 版本 3(。 这些服务是Elasticsearch,Kibana。Redis,Visualiser,最后是我的Web应用程序。我还没有设置任何资源限制。 我通过码头工人机器旋转了两个虚拟主机,一个有 2GB,一个有 1GB。 然后,我将 Web 应用程序的副本增加到 2 个副本,解析为以下分布:

主机1(主(:Kibana, Redis,Web App, Visualiser,WebApp

主机2(工作线程(:弹性搜索

为什么群管理器将两个Web 应用程序容器分发到同一主机。如果将 Web 应用程序分发到两个主机,不是更智能吗? 除了节点标记之外,我在文档中找不到任何其他方法来影响分发。 我错过了什么吗?

谢谢

比约恩

docker-compose.yml

version: "3"
services:
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:5.4.3
environment:
ES_JAVA_OPTS: -Xms1g -Xmx1g
ulimits:
memlock: -1
nofile:
hard: 65536
soft: 65536
nproc: 65538
deploy:
resources:
limits:
cpus: "0.5"
memory: 1g
volumes:
- esdata:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
networks:
- webnet

web:
# replace username/repo:tag with your name and image details
image: bjng/workinseason:swarm
deploy:
replicas: 2
restart_policy:
condition: on-failure
ports:
- "80:6000"
networks:
- webnet
kibana:
image: docker.elastic.co/kibana/kibana:5.4.3
deploy:
placement:
constraints: [node.role == manager]
ports:
- "5601:5601"
networks:
- webnet
redis:
image: "redis:alpine"
networks:
- webnet

volumes:
esdata:
driver: local

networks:
webnet:

Docker 根据可用资源调度任务(容器(;如果两个节点有足够的资源,则可以在任何一个节点上调度容器。

最新版本的 Docker 默认使用"HA"调度,这意味着同一服务的任务将分布在多个节点上(如果可能((请参阅此拉取请求(https://github.com/docker/swarmkit/pull/1446

最新更新