Docker群体规模

时间:2018-06-19 10:22:48

标签: docker scale docker-swarm worker

我有一个使用docker-swarm构建的集群,我们在其中运行apache spark应用程序。在集群中,我有一个管理器节点和3个工作节点。在这个集群中,我们有一个用于spark的主容器和许多工作容器。我可以使用以下命令来扩展工作节点的数量。

sudo docker service scale spark_worker=<number of workers>

当我增加worker数时,我想在worker节点上而不是在manager节点上创建新容器。

2 个答案:

答案 0 :(得分:1)

两个选项:

  1. docker node update --availability=drain <nodename>,这将停止节点上的容器并在其他位置启动它们,并防止将来的容器在该节点上运行。请注意,暂停只会阻止该节点上的 new 容器,而不会移动现有容器。

    但是,该方法非常有限。如果您想在管理器上运行任何,例如监视,日志记录,管理GUI等,则将无法执行。

  2. 一种更灵活的方法是将现有服务更新为仅在工作节点docker service update --constraint-add 'node.role==worker' <servicename>上运行。然后,如果您想仅在管理者上运行服务,则可以在其上使用node.role==manager

答案 1 :(得分:0)

有机会在deploy部分中指定副本属性。 因此,不允许使用scale参数。因此,我在docker-compose.yml中的一项服务如下所示:

xxx_nginx:
  image: nginx
  tty: true
  command: ["sh", "-c", "usermod -u 1000 nginx && nginx -g 'daemon off;'"]
  volumes:
    - "/home/pi/images:/usr/share/nginx/html:ro"
    - "/var/log/nginx:/var/log/nginx"
    - "/etc/localtime:/etc/localtime:ro"
  deploy:
    replicas: 2
    placement:
      constraints:
        - "node.hostname==raspberrypi151"

因此,现在我不必在每次服务时都进行扩展。