Docker Stack Swarm - 服务副本不会为Mutli Service Stack

时间:2017-07-02 06:40:58

标签: docker docker-compose docker-swarm

我在两台主机上部署了一个包含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:

1 个答案:

答案 0 :(得分:3)

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

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