【发布时间】:2017-07-02 06:40:58
【问题描述】:
我在两台主机上部署了一个包含 4 个服务的堆栈(docker compose 版本 3)。 这些服务是 Elasticsearch、Kibana。 Redis、Visualiser,最后是我的 Web 应用程序。我还没有设置任何资源限制。 我通过 docker-machine 旋转了两个虚拟主机,一个 2GB,一个 1GB。 然后我将我的网络应用程序的副本增加到 2 个副本,这解决了以下分布:
Host1(主): Kibana、Redis、Web 应用、Visualiser、WebApp
Host2(工作人员): 弹性搜索
为什么 Swarm Manager 将两个 Web App 容器分发到同一主机。如果将 Web App 分发到两个主机上不是更聪明吗? 除了节点标记之外,我在文档中找不到任何其他方式来影响分布。 我错过了什么吗?
谢谢
比约恩
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-compose.yml 文件和您的 docker 版本。
-
@BMitch 谢谢,我用 docker-compose.yml 编辑了我的帖子 我的版本是
Docker version 17.06.0-ce, build 02c1d87 -
首先猜测是 elastic 的 1g 内存限制用完了 worker 的主机限制。第二个猜测是,您可能使用 sha256 在本地构建了映像,工作人员无法从注册表中提取该映像(在 17.06 中,使用另一个标志不再发生这种情况)。我最初的猜测是你有一个旧版本的 Docker,它会计算主机上的其他容器,或者你对在管理器上运行的 web 应用程序有限制,但这些都不是你的情况。
-
我在想 elasticsearch 也使用大量内存,当我只为 master 标记 elasticsearch 时会看到会发生什么。到目前为止还是谢谢。
标签: docker docker-compose docker-swarm