我在两台主机上部署了一个包含4个服务的堆栈(docker compose版本3)。 这些服务是Elasticsearch,Kibana。 Redis,Visualiser,最后是我的Web App。我还没有设置任何资源限制。 我通过docker-machine旋转了两个虚拟主机,一个是2GB,另一个是1GB。 然后我将我的Web应用程序的副本增加到2个副本,这些副本解析为以下分发:
Host1(Master): Kibana,Redis, Web App ,Visualiser, WebApp
Host2(工作人员): Elasticsearch
为什么Swarm Manager将 Web App 容器分发到同一主机。如果Web App分发给两台主机,那会不会更聪明? 除了节点标记,我还无法在文档中找到任何其他方式来影响分发。 我错过了什么吗?
由于
比约
搬运工-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:
答案 0 :(得分:3)
Docker根据可用资源调度任务(容器);如果两个节点有足够的资源,则可以在任何一个节点上安排容器。
最近版本的Docker使用" HA"默认情况下进行调度,这意味着如果可能,同一服务的任务分布在多个节点上(请参阅此拉取请求)https://github.com/docker/swarmkit/pull/1446