Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in Go, docker_py, docker等)均可以直接与Swarm通信。Swarm几乎全部用go语言来完成开发,上周五,4月17号,Swarm0.2发布,相比0.1版本,0.2版本增加了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支持更多的Docker命令以及集群驱动。
Swarmdeamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。下面是Swarm的结构图
环境部署
实验环境
操作系统: Centos 7.2
操作系统内核版本:3.10.0-327.36.1.el7.x86_64
Docker 版本:Docker version1.12.6
dtest01 10.139.12.49 swarm manager
dtest02 10.139.11.109 swarm node
dtest03 10.139.12.5 swarm mode
环境准备
关闭seliunx 以dtest01 为例, dtest02、dtest03 按照同样的方法操作
sed -i 's/SELINUX=enabled /SELINUX= disabled/g' /etc/selinux/config
重启服务器reboot
关闭防火墙以dtest01 为例, dtest02、dtest03 按照同样的方法操作
systemctl stop firewalld
systemctl disable firewalld
配置hosts以dtest01 为例, dtest02、dtest03 按照同样的方法操作
[root@dtest01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.139.12.49 dtest01
10.139.11.109 dtest02
10.139.12.5 dtest03
配置ssh 免登陆
使用ssh-keygen 命令生成一路回车键
[root@dtest01 ~]# ssh-keygen
配置所有节点密钥登录.
配置所下节点密钥互信, 在node1可以免密码登录各节点,只在dtest01上执行:
分发sshkey到各个节点
[root@node1 ~]# ssh-copy-id dtest01
[root@node1 ~]# ssh-copy-id dtest02
[root@node1 ~]# ssh-copy-id dtest03
安装docker
以dtest01 为例, dtest02 、dtest03 按照此方法操作
yum install docker –y
查看 docker -v
Docker version 1.12.6, build 88a4867/1.12.6
启动docker systemctl start docker
开机自启动 systemctl enable docker
创建 Swarm集群
在dtest01 上初始化swram集群:
docker swarm init --advertise-addr 10.139.12.49
Swarm initialized: current node(1ov1r9l904zhvs4uoygt0tmi3) is now a manager.
To add a worker to this swarm, run thefollowing command:
docker swarm join \
--tokenSWMTKN-1-4qu7h72chrzlycoltrfu9aitp3omoju46nxey73bjjjf69co4h-4c6benvo38h8wyhiti8j9xd1t\
10.139.12.49:2377
查看docker swarm 是否创建成功
[root@dtest01 ~]# netstat -tnlp | grep docker
tcp6 0 0 :::7946 :::* LISTEN 4646/dockerd-curren
tcp6 0 0 :::2377 :::* LISTEN 4646/dockerd-curren
检查 docker swarm mode信息:
Swarm:active
NodeID: 1ov1r9l904zhvs4uoygt0tmi3
Is Manager: true
ClusterID: br2kb43qhxea1vl2zgygmfq0c
Managers: 2
Nodes: 3
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Heartbeat Tick: 1
Election Tick: 3
查看swarm集群列表
[root@dtest01 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1ov1r9l904zhvs4uoygt0tmi3 * dtest01.novalocal Ready Active Leader
将dtest02和dtest03使用worker节点方式加入swarm集群
首先在node1上面查询集群的命令和密钥,在dtest02 、dtest03 分别执行下面红色区域的命令
[root@ dtest01 ~]# docker swarm join-token worker
To add a worker to this swarm, run thefollowing command:
docker swarm join \
--tokenSWMTKN-1-4qu7h72chrzlycoltrfu9aitp3omoju46nxey73bjjjf69co4h-4c6benvo38h8wyhiti8j9xd1t\
10.139.12.49:2377
[root@dtest02 ~]# docker swarm join --tokenSWMTKN-1-4qu7h72chrzlycoltrfu9aitp3omoju46nxey73bjjjf69co4h-4c6benvo38h8wyhiti8j9xd1t10.139.12.49:2377
This node joined a swarm as a worker.
[root@dtest02 ~]# docker swarm join --tokenSWMTKN-1-4qu7h72chrzlycoltrfu9aitp3omoju46nxey73bjjjf69co4h-4c6benvo38h8wyhiti8j9xd1t10.139.12.49:2377
This node joined a swarm as a worker.
查看集群节点
[root@dtest01 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1ov1r9l904zhvs4uoygt0tmi3 * dtest01 Ready Active Leader
4v1mjgrvpdba9uxmv9riti96n dtest02 Ready Active
9cd5n3rgd6n5ids6mxuqcfd3c dtest03 Ready Active
为了swarm集群的高可用,和避免单点故障. 我们希望建立多个manager节点集群.将dtest02提升为manager节点
docker node promote dtest02
[root@dtest01 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1ov1r9l904zhvs4uoygt0tmi3 * dtest01 Ready Active Leader
4v1mjgrvpdba9uxmv9riti96n dtest02 Ready Active Reachable
9cd5n3rgd6n5ids6mxuqcfd3c dtest03 Ready Active
现在我们可以看到, 已经有2个manager节点了, 一个Leader节点, 一个Reachable节点. 现在你也可以在dtest02上面管理整个swarm集群.
[root@dtest02 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1ov1r9l904zhvs4uoygt0tmi3 * dtest01 Ready Active Leader
4v1mjgrvpdba9uxmv9riti96n dtest02 Ready Active Reachable
9cd5n3rgd6n5ids6mxuqcfd3c dtest03 Ready Active
备注:查看命令帮助 docker node –help
使用dtest02让dtest03下线
docker node update --availability drain9cd5n3rgd6n5ids6mxuqcfd3c
[root@dtest02 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1ov1r9l904zhvs4uoygt0tmi3 dtest01 Ready Active Leader
4v1mjgrvpdba9uxmv9riti96n * dtest02 Ready Active Reachable
9cd5n3rgd6n5ids6mxuqcfd3c dtest03 Ready Drain
使用dtest02让dtest03上线
docker node update --availability active 9cd5n3rgd6n5ids6mxuqcfd3c
[root@dtest02 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1ov1r9l904zhvs4uoygt0tmi3 dtest01 Ready Active Leader
4v1mjgrvpdba9uxmv9riti96n * dtest02 Ready Active Reachable
9cd5n3rgd6n5ids6mxuqcfd3c dtest03 Ready Active
本文转自 水滴石川1 51CTO博客,原文链接:http://blog.51cto.com/sdsca/1962601,如需转载请自行联系原作者