2017-07-02 87 views
1

我已经在两台主机(docker compose version 3)上部署了一个包含4个服务的堆栈。 服务是Elasticsearch,Kibana。 Redis,Visualiser,最后是我的Web App。我还没有设置任何资源限制。 我通过docker-machine创建了两个虚拟主机,一个使用2GB,另一个使用1GB。 然后,我增加了我的web应用程序的副本,以2个副本,从而解决以下分配:码头堆栈群 - 服务副本没有传播到Mutli服务堆栈

主机1(主): Kibana,Redis的,Web App的,Visualiser的,Web应用程序

主机2(工人): Elasticsearch

为什么群经理中分发Web应用程序容器对同一台主机。如果将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

请附上您的码头工人,compose.yml文件和你的版本的码头。 – BMitch

+0

@BMitch 谢谢,我用docker-compose.yml编辑了我的帖子 我的版本是 'Docker version 17.06.0-ce,build 02c1d87' –

+0

首先猜测是1g内存限制弹性用完了主机对工作人员的限制。第二个猜测是,你可能已经用sha256在本地构建了镜像,工作人员无法从注册表中拉出(17.06,这不再发生在另一个标志上)。我最初的猜测是,你有一个老版本的Docker,它会统计主机上的其他容器,或者你有一个约束在Web应用程序上运行的经理,但这两者都不适合你。 – BMitch

回答

3

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

最近的码头工人的版本使用“HA”在默认情况下的调度,这意味着相同的服务任务分布在多个节点上,如果可能的话(见本拉请求)https://github.com/docker/swarmkit/pull/1446

+1

谢谢@thaJeztah。我的主人都有足够的资源我会说。我的Docker版本是17.06.0-ce,生成02c1d87,这是我认为此时最新的社区版本。所以如果我正确地理解你的话,我的Web应用程序应该分布在两个主机上,但不是。 –