2017-07-02 83 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應用程序應該分佈在兩個主機上,但不是。 –