Docker swarm 集群搭建

SwarmDocker公司在201412月初发布的一套较为简单的工具,用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in Go, docker_py, docker)均可以直接与Swarm通信。Swarm几乎全部用go语言来完成开发,上周五,417号,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

 

 Docker swarm 集群搭建

 

 

 

 

 

环境准备

 

关闭seliunx dtest01 为例, dtest02dtest03 按照同样的方法操作

 

sed -i 's/SELINUX=enabled /SELINUX= disabled/g' /etc/selinux/config

 

重启服务器reboot

 

关闭防火墙以dtest01 为例, dtest02dtest03 按照同样的方法操作

 

   systemctl stop firewalld

systemctl disable firewalld

 

配置hostsdtest01 为例, dtest02dtest03 按照同样的方法操作

 

[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

 

 

dtest02dtest03使用worker节点方式加入swarm集群

 

首先在node1上面查询集群的命令和密钥,在dtest0dtest0分别执行下面红色区域的命令

 

[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

 

现在我们可以看到已经有2manager节点了, 一个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

 

使用dtest02dtest03下线

 

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

 

使用dtest02dtest03上线

 

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,如需转载请自行联系原作者

上一篇:我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。


下一篇:《Ext JS模板与组件基本框架图----组件》