部署Swarm - Deploy Swarm
2016-08-02 18:37
281 查看
参考文档:https://docs.docker.com/swarm/install-manual/
操作系统选择centos7,共建立了5个虚拟机, 为了简单起见,均使用root用户做操作。
manager0和manager1是swarm的管理结点,两个节点用来做高可用。
consul0节点是服务发现结点,部署了consul
node0和node1是资源结点
5 个节点都事先安装好了docker engine 1.12
安装docker:
启动docker:
安装consul是比较简单的,直接运行一个容器就好了。
在consul0结点上运行一下命令:
在manager0结点上运行以下命令
docker run -d -p 4000:4000 swarm manage -H :4000 –replication –advertise 192.168.221.136:4000 consul://192.168.221.138:8500
在manager1结点上运行以下命令
docker run -d -p 4000:4000 swarm manage -H :4000 –replication –advertise 192.168.221.137:4000 consul://192.168.221.138:8500
在node0结点上运行以下命令
docker run -d swarm join –advertise=192.168.221.139:2375 consul://192.168.221.138:8500
在node1结点上运行以下命令
docker run -d swarm join –advertise=192.168.221.140:2375 consul://192.168.221.138:8500
在manager1上执行命令:
根据Role,可以看出来,manager1是主,manager0是从,已经有两个node加入进来了,分别是
在manager1上执行以下命令,查看正在运行的容器
在manager1上执行以下命令,创建一个容器:
可以看到 hello-world已经运行过了,但是hello-world在运行后就退出了,所以需要用
ip地址: 发现不了结点
因为刚开始的时候,我已经把host和ip信息写入/etc/hosts文件里面了,所以启动swarm manager和swarm ndoe的使用用的是机器名称而不是直接写的IP,这样引起的问题是,这些参数会带入到swarm的容器中,容器中是没有/etc/hosts文件的,所以就会找不到相应的服务,导致所有服务都不能正常启动
防火墙: no route to host
没有配置防火墙,导致node结点的2375端口不能被manager结点访问,所以修改了一下防火墙策略
docker id: prending
我用的5个虚拟机都是直接从一个basic复制过来的,basic已经安装好docker了,所以导致了所有docker id 都是相同的。使用
使用的部署环境
参考文档中是要把Swarm部署到AWS的EC2上的,没有这样的条件,所以选择在本地建立多个虚机机来搭建。操作系统选择centos7,共建立了5个虚拟机, 为了简单起见,均使用root用户做操作。
[root@mamager1 ~]# cat /etc/hosts 192.168.221.136 manager0 192.168.221.137 manager1 192.168.221.138 consul0 192.168.221.139 node0 192.168.221.140 node1
manager0和manager1是swarm的管理结点,两个节点用来做高可用。
consul0节点是服务发现结点,部署了consul
node0和node1是资源结点
5 个节点都事先安装好了docker engine 1.12
安装docker:
curl -sSL https://get.docker.com/ | sh
启动docker:
docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
开始部署
配置好以上环境后,可以直接进入参考文档的 Step 4 了Step 4. Set up a discovery backend
这一步是用来创建服务发现功能,采用了consul作为服务发现服务程序,也可以选择zookeeper,etcd。安装consul是比较简单的,直接运行一个容器就好了。
在consul0结点上运行一下命令:
docker run -d -p 8500:8500 --name=consul progrium/consul -server -bootstrap
Step 5. Create Swarm cluster
Swarm的安装和运行也是比较简单的,同样是使用容器运行。在manager0结点上运行以下命令
docker run -d -p 4000:4000 swarm manage -H :4000 –replication –advertise 192.168.221.136:4000 consul://192.168.221.138:8500
在manager1结点上运行以下命令
docker run -d -p 4000:4000 swarm manage -H :4000 –replication –advertise 192.168.221.137:4000 consul://192.168.221.138:8500
在node0结点上运行以下命令
docker run -d swarm join –advertise=192.168.221.139:2375 consul://192.168.221.138:8500
在node1结点上运行以下命令
docker run -d swarm join –advertise=192.168.221.140:2375 consul://192.168.221.138:8500
试用一下
在manager0上执行命令:docker -H :4000 info
[root@localhost ~]# docker -H :4000 info Containers: 2 Running: 2 Paused: 0 Stopped: 0 Images: 4 Server Version: swarm/1.2.4 Role: replica Primary: 192.168.221.137:4000 Strategy: spread Filters: health, port, containerslots, dependency, affinity, constraint Nodes: 2 node0: 192.168.221.139:2375 └ ID: 6UEQ:FE4C:QYPC:7EFT:CXYZ:EPDF:OYWD:5L5U:QAB2:32EW:3GYS:GZAR └ Status: Healthy └ Containers: 1 (1 Running, 0 Paused, 0 Stopped) └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 1.003 GiB └ Labels: kernelversion=3.10.0-327.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), storagedriver=devicemapper └ UpdatedAt: 2016-08-02T10:10:57Z └ ServerVersion: 1.12.0 node1: 192.168.221.140:2375 └ ID: RTT2:OFYE:MWP5:GVAY:QUTG:QHZU:3AXA:OILX:UG5K:D3RM:6XJE:QX2Z └ Status: Healthy └ Containers: 1 (1 Running, 0 Paused, 0 Stopped) └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 1.003 GiB └ Labels: kernelversion=3.10.0-327.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), storagedriver=devicemapper └ UpdatedAt: 2016-08-02T10:10:39Z └ ServerVersion: 1.12.0 Plugins: Volume: Network: Swarm: NodeID: Is Manager: false Node Address: Security Options: Kernel Version: 3.10.0-327.el7.x86_64 Operating System: linux Architecture: amd64 CPUs: 8 Total Memory: 2.005 GiB Name: cfb6647dfc11 Docker Root Dir: Debug Mode (client): false Debug Mode (server): false WARNING: No kernel memory limit support
在manager1上执行命令:
docker -H :4000 info
[root@mamager1 ~]# docker -H :4000 info Containers: 2 Running: 2 Paused: 0 Stopped: 0 Images: 4 Server Version: swarm/1.2.4 Role: primary Strategy: spread Filters: health, port, containerslots, dependency, affinity, constraint Nodes: 2 node0: 192.168.221.139:2375 └ ID: 6UEQ:FE4C:QYPC:7EFT:CXYZ:EPDF:OYWD:5L5U:QAB2:32EW:3GYS:GZAR └ Status: Healthy └ Containers: 1 (1 Running, 0 Paused, 0 Stopped) └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 1.003 GiB └ Labels: kernelversion=3.10.0-327.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), storagedriver=devicemapper └ UpdatedAt: 2016-08-02T10:11:33Z └ ServerVersion: 1.12.0 node1: 192.168.221.140:2375 └ ID: RTT2:OFYE:MWP5:GVAY:QUTG:QHZU:3AXA:OILX:UG5K:D3RM:6XJE:QX2Z └ Status: Healthy └ Containers: 1 (1 Running, 0 Paused, 0 Stopped) └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 1.003 GiB └ Labels: kernelversion=3.10.0-327.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), storagedriver=devicemapper └ UpdatedAt: 2016-08-02T10:11:43Z └ ServerVersion: 1.12.0 Plugins: Volume: Network: Swarm: NodeID: Is Manager: false Node Address: Security Options: Kernel Version: 3.10.0-327.el7.x86_64 Operating System: linux Architecture: amd64 CPUs: 8 Total Memory: 2.005 GiB Name: 558a052d79fa Docker Root Dir: Debug Mode (client): false Debug Mode (server): false WARNING: No kernel memory limit support
根据Role,可以看出来,manager1是主,manager0是从,已经有两个node加入进来了,分别是
node0: 192.168.221.139:2375和
node1: 192.168.221.140:2375
在manager1上执行以下命令,查看正在运行的容器
[root@mamager1 ~]# docker -H :4000 ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fa5f096d9aa4 swarm "/swarm join --advert" 47 minutes ago Up 47 minutes 2375/tcp node1/infallible_montalcini 7ca9201566b1 swarm "/swarm join --advert" About an hour ago Up About an hour 2375/tcp node0/compassionate_shannon
在manager1上执行以下命令,创建一个容器:
[root@mamager1 ~]# docker -H :4000 run hello-world [root@mamager1 ~]# docker -H :4000 ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES efecac9a30e7 hello-world "/hello" 6 seconds ago Exited (0) 5 seconds ago node0/determined_hoover fa5f096d9aa4 swarm "/swarm join --advert" 49 minutes ago Up 49 minutes 2375/tcp node1/infallible_montalcini 7ca9201566b1 swarm "/swarm join --advert" About an hour ago Up About an hour 2375/tcp node0/compassionate_shannon
可以看到 hello-world已经运行过了,但是hello-world在运行后就退出了,所以需要用
ps -a才能看到。
高可用
参考文档的第7步是测试Swarm管理结点的高可用,挂掉主节点,从结点会切换为主Step 7. Test Swarm failover
结论是可以用的,就不贴过程了,干掉manager1上面的swarm容器后,在mangager0上执行docker -H :4000 info, 可以看到manager0已经变为主了。
踩过的坑
在部署的过程中,也是遇到了一些问题的,都不是大问题,很快就能解决。ip地址: 发现不了结点
因为刚开始的时候,我已经把host和ip信息写入/etc/hosts文件里面了,所以启动swarm manager和swarm ndoe的使用用的是机器名称而不是直接写的IP,这样引起的问题是,这些参数会带入到swarm的容器中,容器中是没有/etc/hosts文件的,所以就会找不到相应的服务,导致所有服务都不能正常启动
防火墙: no route to host
没有配置防火墙,导致node结点的2375端口不能被manager结点访问,所以修改了一下防火墙策略
firewall-cmd --zone=public --add-port=2375/tcp --permanent firewall-cmd --zone=dmz --add-port=2375/tcp --permanent firewall-cmd --reload
docker id: prending
我用的5个虚拟机都是直接从一个basic复制过来的,basic已经安装好docker了,所以导致了所有docker id 都是相同的。使用
docker info可以看到每个docker的ID值。 结果就是,所有的结点的程序都起来了,但是从 manager1结点看,node只有一个是Healthy的,另外一个的状态一直是Prending。解决这个问题也比较简单,删除
/etc/docker/key.json,重启启动docker engine和node结点上运行的swarm join容器就好了
相关文章推荐
- centos6.5上安装docker
- docker容器的网络信息查看
- openstack kilo-with-dokcer
- 在windows下的安装Docker的教程
- 8个你可能不知道的Docker知识
- mysql 5.7 docker 主从复制架构搭建教程
- 在Docker中自动化部署Ruby on Rails的教程
- 搭建基于Docker的PHP开发环境的详细教程
- Docker容器的Tengine实践
- 利用OpenVSwitch在多台主机上部署Docker的教程
- ubuntu14.04+docker的安装及使用
- Docker 清理命令集锦
- 再Docker中架设完整的WordPress站点全攻略
- 基于 Docker 开发 NodeJS 应用
- 使用Docker来加速构建Android应用的基本部署思路解析
- 在Docker上部署Python的Flask框架的教程
- 在Docker上开始部署Python应用的教程
- 详解在Python和IPython中使用Docker
- python脚本监控docker容器
- 使用IPython来操作Docker容器的入门指引