搭建Docker Swarm集群实战(二)(服务发现使用consul)

来源:互联网 发布:淘宝网官网下载2017 编辑:程序博客网 时间:2024/06/16 06:52

注意:
docker在版本1.12之后,已经将swarm的部分集成在docker里面了,所以也就不需要依赖第三方的东西了。
所以如果不是为了有趣了解一下的话,请直接转到本系列的第三篇开始=》搭建Docker Swarm集群实战(三)(swarm mode)

个人建立的Docker爱好者交流QQ群:472149402,欢迎大家来此交流经验和问题,一起成长。

架构图

  • consul服务(1号机上)
  • 1个swarm的master(2号机上)
  • 2个swarm的node(3号机,4号机上)

1,2,3,4号机都是一个局域网LAN内部(原因是他们的eth1设备都和宿主机进行了virtual box的host-only)。

  • 1号机在该网段内IP:192.168.99.101
  • 2号机在该网段内IP:192.168.99.102
  • 3号机在该网段内IP:192.168.99.103
  • 4号机在该网段内IP:192.168.99.104

最后的效果图如下:

$ docker-machine lsNAME             ACTIVE   DRIVER       STATE     URL                         SWARM                   DOCKER        ERRORSconsul-machine   -        virtualbox   Running   tcp://192.168.99.101:2376                           v17.09.0-ceswarm-master     -        virtualbox   Running   tcp://192.168.99.102:2376   swarm-master (master)   v17.09.0-ceswarm-node-01    -        virtualbox   Running   tcp://192.168.99.103:2376   swarm-master            v17.09.0-ceswarm-node-02    -        virtualbox   Running   tcp://192.168.99.104:2376   swarm-master            v17.09.0-ce

贴一个官方的架构图,我的只是演示这个架构的一小部分。
这里写图片描述

开始操作

创建2号机以及把2号机的docker host设置为swarm master

docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-master

解释参数时刻:
* –swarm表示这个docker host需要成为swarm的一员。
* –swarm-master表示这个docker host的角色是swarm的master
* –swarm-discovery表示swarm的服务发现使用什么模式,这里使用consul服务发现作为swarm-discovery。
* cluster-store指定集群的信息存储的位置,这里利用consul的键值存储
* cluster-advertise指定了本docker host对外公示的ip地址和端口,如果对于为什么是eth1,这个就和网络有关了,可以参考这张图。https://github.com/wuzimei/docker-learning/blob/master/host-virtual-host-docker-network.png?raw=true
* 最后的swarm-master是这个docker host的名称

走起

$ docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-masterRunning pre-create checks...Creating machine...(swarm-master) Copying /Users/jiandaojiao/.docker/machine/cache/boot2docker.iso to /Users/jiandaojiao/.docker/machine/machines/swarm-master/boot2docker.iso...(swarm-master) Creating VirtualBox VM...(swarm-master) Creating SSH key...(swarm-master) Starting the VM...(swarm-master) Check network to re-create if needed...(swarm-master) Waiting for an IP...Waiting for machine to be running, this may take a few minutes...Detecting operating system of created instance...Waiting for SSH to be available...Detecting the provisioner...Provisioning with boot2docker...Copying certs to the local machine directory...Copying certs to the remote machine...Setting Docker configuration on the remote daemon...Configuring swarm...Checking connection to Docker...Docker is up and running!To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env swarm-master

登录到2号机上偷窥一下吧。

$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEswarm               latest              2569518fadd0        3 weeks ago         15.77 MB$ docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMESa52c4529773e        swarm:latest        "/swarm join --advert"   3 minutes ago       Up 3 minutes        2375/tcp                           swarm-agent3ac1440eea97        swarm:latest        "/swarm manage --tlsv"   3 minutes ago       Up 3 minutes        2375/tcp, 0.0.0.0:3376->3376/tcp   swarm-agent-master

创建3号机和4号机(作为swarm的node)

docker-machine create -d virtualbox --swarm --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-node-01docker-machine create -d virtualbox --swarm --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-node-02

确认集群

$ eval $(docker-machine env --swarm swarm-master)

注意上面的语句有–swarm。

然后你可以尝试一下docker info, 看看和以前是不是不一样了。

也可以尝试docker ps -a

$ docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                     NAMESab5753fb0680        swarm:latest        "/swarm join --advert"   36 minutes ago      Up 36 minutes               2375/tcp                                  swarm-node-02/swarm-agent9812c1229dbf        swarm:latest        "/swarm join --advert"   44 minutes ago      Up 44 minutes               2375/tcp                                  swarm-node-01/swarm-agenta52c4529773e        swarm:latest        "/swarm join --advert"   55 minutes ago      Up 55 minutes               2375/tcp                                  swarm-master/swarm-agent3ac1440eea97        swarm:latest        "/swarm manage --tlsv"   56 minutes ago      Up 56 minutes               2375/tcp, 192.168.99.102:3376->3376/tcp   swarm-master/swarm-agent-master

这个时候你docker run一个随便什么容器的话,swarm master会在某一个node上启动这个容器。

好奇的你也可以尝试一下docker network ls等命令。

总结:

  • 每次需要控制docker的容器的时候,就以swarm方式连接到swarm master上。(eval $(docker-machine env –swarm swarm-master))
  • docker ps -a可以查看所有容器的状态
  • docker run可以启动容器,容器host在哪个docker host上是会集群自动决定的。

下节预告

在写完这篇之后,才发现这种swarm的方式已经是比较旧的方式了。在docker版本1.12之后, 官方推荐使用新的swarm mode。 那下一次正好说一下,新的swarm mode如何搭建。

原创粉丝点击