创建和管理Swarm集群
Swarm集群的服务部署实践
1. 概述Docker Swarm是原生的Docker集群工具。在Docker版本1.12之后,Docker引擎加入了Swarm模式,将Swarm集成进来。大多数用户应该使用集成进Docker引擎的Swarm模式。单独的Docker Swarm仍然可用,只是它没有集成进Docker引擎的API和CLI命令当中。
随着Docker的不断开发,在版本1.12之后,Docker引擎加入了Swarm模式,用户可以通过原生的Docker CLI命令操作Swarm集群。
本篇使用的环境包括3个节点,一个作为Swarm的manager节点,两个为worker节点,机器名和IP地址如下:
在三台主机上,都安装了Docker引擎1.12版,并且主机相互之间可以ping通,主机上的2377、7946、4789端口都打开。
Swarm集群端口, Docker Swarm集群开放了三个端口:
2377端口, 用于集群管理通信
7946端口, 用于集群节点之间的通信
4789端口, 用于overlay网络流量
2. 创建Swarm集群 2.1 创建swarm管理节点下面开始创建swarm。登录到centos7主机上,执行如下命令:
[root@centos7-Master ~]# docker swarm init --advertise-addr 192.168.71.131 Swarm initialized: current node (41atspd62he1vshs4jmhpyufj) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-49ueborzkg0v6l3xu2g1d5zfgsjn1xobqvctwozq14m07n1ak0-2llwi551ii09zeyus5r3zi3un \ 192.168.71.131:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。
如果你不知道或者忘记了Swarm Manager节点的Token信息, 你可以在Manager节点上执行以下命令查看Worker节点连接所需要的Token信息。
[root@centos7-Master ~]# docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-35z0vriry09vkm17vn1tvj0wzmbv1xfy77c0po7c5op2lyhkgk-635ho8efqfhrm817gpyjkho9x \ 192.168.202.15:2377使用docker info和docker node ls查看集群中的相关信息:
[root@centos7-Master ~]# docker info ... Swarm: active NodeID: 41atspd62he1vshs4jmhpyufj Is Manager: true ClusterID: 5nl0kyz1dfmkgg2sx04vr8zoi Managers: 1 Nodes: 1 Orchestration: Task History Retention Limit: 5 ... [root@centos7-Master ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 41atspd62he1vshs4jmhpyufj * centos7 Ready Active Leadernode ID旁边那个*号表示现在连接到这个节点上。
2.2 将Worker节点加入swarm集群登录到centos7-WorkerA主机上,执行前面创建swarm时输出的命令:
[root@centos7-workerA ~]# docker swarm join \ > --token SWMTKN-1-49ueborzkg0v6l3xu2g1d5zfgsjn1xobqvctwozq14m07n1ak0-2llwi551ii09zeyus5r3zi3un \ > 192.168.71.131:2377 This node joined a swarm as a worker.如果当时创建swarm时没有记下命令的输出,可以通过在manager节点上运行docker swarm join-token worker命令来获取如何加入swarm的命令。
在另一台主机centos7-WorkerB上也执行相同的命令,最后在manager节点上看一下集群节点的状态:
[root@centos7-Master ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 0b57ews522yiz8xyhy3jz34ci centos7-WorkerB Ready Active 41atspd62he1vshs4jmhpyufj * centos7-Master Ready Active Leader d1lurs40mlah70spbetcsl9rw centos7-WorkerA Ready Active错误处理:
问题描述:
如果在添加Swarm集群节点时,出现错误“Error response from daemon: Timeout was reached before node was joined. The attempt to join the swarm will continue in the background. Use the docker info command to see the current swarm status of your node."
原因分析:
由于Swarm集群中Manager节点中需要设置防火墙的访问权限,将集群管理端口加入防火墙的访问控制策略。
解决办法:
在Manager节点主机的防火墙中加入端口的访问控制策略。
2.3 管理Swarm集群 2.3.1 删除Swarm集群节点如果想在Docker Swarm集群中删除Docker的节点, 需要在须删除的Docker节点下执行命令:
[root@centos7-WorkerA ~]# docker swarm leave Node left the swarm.在Docker Swarm集群中,在删除Docker集群节点后,集群中该节点仍然存在,但是状态显示为Down, 需要在Swarm的Manager节点执行以下命令, 删除已经移除的Worker节点:
[root@centos7-Master ~]# docker node rm --force 4ukr7ghj4iuvb89gu0g5ok1d 4ukr7ghj4iuvb89gu0g5ok1d 2.3.2 更新Swarm集群节点如果需要对Docker Swarm节点进行更新,需要在manager节点上执行命令:
[root@centos7-Master ~]# docker swarm update Swarm updated. 3. Swarm集群的服务部署实践 3.1 在Swarm中部署服务在centos7-Master也就是manager节点上运行如下命令来部署服务:
[root@centos7-Master ~]# docker service create --replicas 1 --name helloworld alpine ping docker.com 50r6d8w4cwzi45s8865p9pdn4参数说明:
--replicas参数指定启动的服务由几个实例组成;
--name参数指定启动服务的服务名;
alpine ping docker.com指定了使用alpine镜像创建服务,实例启动时运行ping docker.com命令。
这与docker run命令是一样的。