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

 

 wKiom1mtIcDjd3ECAAJALfiKskA819.png-wh_50

 

 

 

 

 

环境准备

 

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

相关文章
|
5天前
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
13 6
|
5天前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
11 5
|
5天前
|
调度 Docker 容器
docker swarm创建覆盖网络
【10月更文挑战第16天】
9 5
|
4天前
|
存储 Kubernetes C++
Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
随着容器技术的快速发展,容器编排工具成为了现代软件开发和运维的重要环节。在众多容器编排工具中,Kubernetes和Docker Swarm无疑是最受欢迎的两个。本文将从技术特性、易用性和社区支持三个方面,对Kubernetes和Docker Swarm进行比较,以帮助您选择更适合您需求的容器编排工具。
19 3
|
6天前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
13 4
|
6天前
|
Docker 容器
|
7天前
|
应用服务中间件 nginx Docker
docker swarm创建覆盖网络
【10月更文挑战第14天】
11 3
|
6天前
|
数据安全/隐私保护 Docker 容器
docker swarm创建网络
【10月更文挑战第15天】
7 1
|
7天前
|
Docker 容器
docker swarm 在服务中使用网络
【10月更文挑战第14天】
9 2
|
3天前
|
负载均衡 安全 调度
深入调查研究Docker Swarm
【10月更文挑战第19天】
9 0