我有两个服务的堆栈:Spring Boot应用程序和mongo数据库。 我想将此堆栈部署到Docker Swarm(德国1个节点,芬兰1个节点和爱沙尼亚1个节点)。
当前Swarm将应用程序调度到德国集群,将数据库调度到芬兰,这意味着每个请求都从德国发送到芬兰。
通过这种方式如何迫使Swarm将所有堆栈都放置到单个节点上?
P.S。坚持使用主机名不是解决方案,因为如果节点死亡,服务将关闭。
我的Stack.yml是:
version: '3.3'
services:
app:
image: kyberorg/boot-mongo
networks:
- net
ports:
- "8080:8080"
depends_on:
- mongo
labels:
- ee.yadev.bootmongoapp
deploy:
mode: replicated
replicas: 1
update_config:
parallelism: 1
delay: 10s
mongo:
image: mongo
networks:
- net
volumes:
- example-mongo:/data/db
deploy:
mode: replicated
replicas: 1
update_config:
parallelism: 1
delay: 10s
networks:
net:
driver: overlay
volumes:
example-mongo:
external: true
答案 0 :(得分:1)
您正在寻找的是POD
中的kubernetes
之类的东西,可以在同一位置放置容器。 AFAIK,当前在docker上不可用。
您可以查看此存储库,看看它是否有用:https://github.com/rycus86/podlike
这是将Pod的概念引入docker的尝试。
编辑:附带说明一下,如果应用程序和数据库是如此紧密地耦合在一起,那么它们都属于同一容器是有道理的。
答案 1 :(得分:1)
Swarm的体系结构通常是由于管理者的延迟而在同一区域中需要单个swarm的体系结构。通常,一个群是“单个区域,多个可用区”(数据中心通常彼此靠近,通常在同一城市。)
我也想不出一种方法,可以使用约束和/或放置首选项将两个容器放在一个数据中心中,然后如果第一个关闭,则经理将它们移动到同一第二个数据中心。 / p>
Podlike,就像giabar提到的那样,是一种选择,但不能解决“跨多个区域的单一群”的设计挑战。
答案 2 :(得分:1)
我也花了半天时间寻找解决方案,然后找到了。
看看“亲和力”选项,这里对此进行了很好的描述:https://blog.docker.com/2015/02/scaling-docker-with-swarm/
亲和力 在某些情况下,容器的放置必须相对于其他容器。 Swarm可让您通过亲缘关系定义这些关系。
以下内容将运行两台Redis服务器,同时确保它们不会在同一台计算机上进行调度:
docker run -d --name redis_1 -e‘affinity:container!= redis_ ’redis docker run -d --name redis_2 -e‘affinity:container!= redis _ ’redis
暗含容器之间的关系时,会自动生成关联。使用–link,–volumes-from和–net = container之类的选项的容器:在同一主机上共同调度。
答案 3 :(得分:0)
我的第一个想法是建议您使用“展示位置限制”和“标签”:
https://docs.docker.com/engine/swarm/services/#placement-constraints https://docs.docker.com/engine/swarm/manage-nodes/#add-or-remove-label-metadata
感谢他们,您可以为每个国家/地区的节点分配标签,然后修改堆栈以强制应用程序在同一节点上运行。
docker node update --label-add country =德国node-germany docker node update --label-add country =芬兰node-finland
-约束node.labels.region == east
版本:“ 3.3” 服务: 应用程式: 图片:kyberorg / boot-mongo 部署: 放置: 约束: -国家==德国
mongo: 图片:蒙哥 部署: 放置: 约束: -国家==德国
其他有用的链接:
https://semaphoreci.com/community/tutorials/scheduling-services-on-a-docker-swarm-mode-cluster https://container-solutions.com/using-binpack-with-docker-swarm/
希望这对您有帮助!