我正在尝试使用docker swarm。使用VirtualBox,我在主机系统(Windows 7)上设置了三台ubuntu机器(每台机器运行Docker 17.12.0 CE)。
我在其中一个ubuntu实例(管理员)上创建了一个带有docker swarm init
命令的docker swarm,并使用docker swarm join
命令将另外两个作为worker连接起来。在管理器节点上,我已使用docker service create --name test -p 80:80 --replicas 3 myuser/webapp
创建了一项服务。
我的webapp在群集中的所有节点上的容器中运行正常,我可以在浏览器中通过我的主机在分配给虚拟ubuntu机器的不同IP地址上访问它 - 例如我的worker2上有192.168.56.103/webapp。
但是,如果我关闭了worker2,我显然无法再找到它了。确保高可用性的最佳方法是什么,以便在任何节点关闭时,我的webapp仍然可以访问?
在现场环境中,问题是,如何避免单一的入口点"当用户通过他们的浏览器访问它时,我的应用程序(在群中运行)?
答案 0 :(得分:0)
您需要实施负载均衡器,以便在此服务的所有实例之间分配流量,例如nginx或traefik并支持docker swarm。
http {
upstream webapp {
server 192.168.56.101;
server 192.168.56.102;
server 192.168.56.103;
}
server {
listen 80;
location /webapp {
proxy_pass http://webapp;
}
}
}
version: '3.3'
services:
lb:
image: traefik:latest
ports:
- 80:80
- 8080:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: >
--web --docker --docker.swarmmode
--docker.domain=example.com --docker.watch
--logLevel=DEBUG
deploy:
restart_policy:
condition: on-failure
placement:
constraints:
- node.role == manager
webapp:
image: 'myuser/webapp'
deploy:
replicas: 3
labels:
- "traefik.frontend.rule=PathPrefix:/webapp"
- "traefik.backend=webapp"
- "traefik.port=80"