我尝试用swarm和consul设置docker cluster.我有经理,host1和host2.
我在经理上运行consul和swarm管理器容器.
$docker run --rm -p 8500:8500 progrium/consul -server -bootstrap
$docker run -d -p 2377:2375 swarm manage consul://
在host1和host2上,我使用–cluster-store和–cluster-advertise修改守护程序选项,并重新启动docker守护程序.
host1
DOCKER_OPTS="--cluster-store=consul://
当我将host1和host2加入swarm时,它会失败.
host1 $docker run --rm swarm join --advertise=
从swarm管理器日志中,它出错了.
time="2016-01-20T02:17:17Z" level=error msg="Get http://
>使用–cluster-store consul设置守护进程://192.168.10.1:8500和端口8500(在每个守护进程上部署Consul®istrator作为第一个容器)和–cluster-advertise 192.168.10.1:2375以及-H tcp://192.168.10.1:2375 -H unix:///var/run/docker.sock -H tcp://127.0.0.1:2375(但我不会像你那样绑定其他可用地址使用tcp://0.0.0.0:2375而不是绑定到本地192.168.10.0/24).如果您希望容器只绑定到本地网络(就像我在这种情况下所做的那样),您可以为守护进程指定额外的–ip参数 – 当容器应该可用于其他任何地方时(在我的情况下只有Nginx加载)通过keepalived进行故障转移的平衡器)指定将端口绑定到所有接口docker run … -p 0.0.0.0:host_port:container_port …< image>
>启动守护进程
>使用compose部署gliderlabs / registrator和Consul(这是我设置的第一个框中的示例,但我在所有守护进程上启动等效的完整Consul HA故障转移设置)docker-compose -p bootstrap up -d(命名容器私有网络引导程序中的bootstrap_registrator_1和bootstrap_consul_1):
version: '2'
services:
registrator:
image: gliderlabs/registrator
command: consul://192.168.10.1:8500
depends_on:
- consul
volumes:
- /var/run/docker.sock:/tmp/docker.sock
restart: unless-stopped
consul:
image: consul
command: agent -server -bootstrap -ui -advertise 192.168.10.1 -client 0.0.0.0
hostname: srv-0
network_mode: host
ports:
- "8300:8300" # Server RPC,Server Use Only
- "8301:8301/tcp" # Serf Gossip Protocol for LAN
- "8301:8301/udp" # Serf Gossip Protocol for LAN
- "8302:8302/tcp" # Serf Gossip Protocol for WAN,Server Use Only
- "8302:8302/udp" # Serf Gossip Protocol for WAN,Server Use Only
- "8400:8400" # CLI RPC
- "8500:8500" # HTTP API & Web UI
- "53:8600/tcp" # DNS Interface
- "53:8600/udp" # DNS Interface
restart: unless-stopped
>现在守护进程注册并在docker / nodes中的KV商店(Consul)上设置锁定,并且Swarm似乎不会自动从这个位置读取..所以当它试图读取哪些守护进程可用时它找不到任何.现在这个花了我最多的时间:
为了解决这个问题,我必须在所有框中指定–discovery-opt kv.path = docker / nodes并使用docker-compose -p bootstrap up -d启动Swarm,以及最终管理器的Swarm HA故障转移:
version: '2'
services:
swarm-manager:
image: swarm
command: manage -H :3375 --replication --advertise 192.168.10.1:3375 --discovery-opt kv.path=docker/nodes consul://192.168.10.1:8500
hostname: srv-0
ports:
- "192.168.10.1:3375:3375" #
restart: unless-stopped
>现在我最终得到了一个只在端口3375上的192.168.10.0/24网络上可用的Swarm.所有启动的容器只能用于此网络,除非我指定-p 0.0.0.0:host_port:container_port开始(用docker run)
>进一步扩展:当我向本地网络添加更多盒子以增加容量时,我的想法是添加更多Daemons和非管理器Swarm实例以及稍后的Consul客户端(而不是服务器,以-server启动).