我有一个使用docker-swarm构建的集群,我们在其中运行apache spark应用程序。在集群中,我有一个管理器节点和3个工作节点。在这个集群中,我们有一个用于spark的主容器和许多工作容器。我可以使用以下命令来扩展工作节点的数量。
sudo docker service scale spark_worker=<number of workers>
当我增加worker数时,我想在worker节点上而不是在manager节点上创建新容器。
答案 0 :(得分:1)
两个选项:
docker node update --availability=drain <nodename>
,这将停止节点上的容器并在其他位置启动它们,并防止将来的容器在该节点上运行。请注意,暂停只会阻止该节点上的 new 容器,而不会移动现有容器。
但是,该方法非常有限。如果您想在管理器上运行任何,例如监视,日志记录,管理GUI等,则将无法执行。
一种更灵活的方法是将现有服务更新为仅在工作节点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"
因此,现在我不必在每次服务时都进行扩展。