Msl23
世上最美的,莫过于从泪水中挣脱出来的那个微笑。

简介

  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命令以及集群驱动。

  Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。下面是Swarm的结构图:


 

 

部署Swarm

环境:


CentOS 7
192.168.200.201 Manager
192.168.200.202 Node1
192.168.200.203 Node2

Swarm安装:

docker pull swarm

在使用Swarm进行集群管理之前,需要先把准备加入集群的所有的节点的docker deamon的监听端口修改为0.0.0.0:2375,

方法一:

docker –H tcp://0.0.0.0:2375 &

方法二:

vim /etc/sysconfig/docker
OPTIONS='-H tcp://0.0.0.0:2375'    //该行原来配置不做修改,追加给出配置。

CentOS 6修改内容为
vim /etc/sysconfig/docker
OPTIONS='-H tcp://0.0.0.0:2375 –H unix:///var/run/docker.sock'

重启docker

systemctl restart docker

每台Node都需要安装 swarm

docker pull swarm

创建集群、管理集群

本文采用的是文件的方法,相对于Docker Hub的发现功能,不容易出现TimeOut,且比较简单、方便。

把需要加入到集群的节点的IP地址及端口写进去(Manager也需要)

vim cluster
192.168.200.201:2375
192.168.200.202:2375
192.168.200.203:2375

在Manager(192.168.200.201)执行swarm manage命令

docker run -d -p 2376:2375 -v $(pwd)/cluster:/tmp/cluster swarm manage file:///tmp/cluster

查看状态

docker ps

CONTAINER    ID     IMAGE    COMMAND      CREATED           STATUS     PORTS                  NAMES
6eb59fe0f577 swarm "/swarm manage fil..." 41 minutes ago Up 41 minutes 0.0.0.0:2376->2375/tcp kind_curran

查看集群Node信息

docker -H 192.168.200.201:2376 info 

Containers: 6
Running: 6
Paused: 0
Stopped: 0
Images: 4
Server Version: swarm/1.2.9
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint, whitelist
Nodes: 3
(unknown): 192.168.200.201:2375
└ ID: 
└ Status: Pending
└ Containers: 0
└ Reserved CPUs: 0 / 0
└ Reserved Memory: 0 B / 0 B
└ Labels: 
└ Error: Cannot connect to the Docker daemon at tcp://192.168.200.201:2375. Is the docker daemon running?
└ UpdatedAt: 2018-06-04T17:39:12Z
└ ServerVersion: 
Node1: 192.168.200.202:2375
└ ID: BCCW:KY4H:SDTO:RE24:DYL6:2WXN:ISFJ:6RMX:INLB:BW7B:4IP5:MF6Q|192.168.200.202:2375
└ Status: Healthy
└ Containers: 3 (3 Running, 0 Paused, 0 Stopped)
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1024 MiB
└ Labels: kernelversion=3.10.0-693.21.1.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), ostype=linux, storagedriver=overlay2
└ UpdatedAt: 2018-06-04T17:43:29Z
└ ServerVersion: 1.13.1
Node2: 192.168.200.203:2375
└ ID: B5T4:MCAS:QDDL:RWTY:4GTX:WN6Y:EG3O:HM4R:GUKR:J7KD:5R7H:GXEI|192.168.200.203:2375
└ Status: Healthy
└ Containers: 3 (3 Running, 0 Paused, 0 Stopped)
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1024 MiB
└ Labels: kernelversion=3.10.0-693.21.1.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), ostype=linux, storagedriver=overlay2
└ UpdatedAt: 2018-06-04T17:43:10Z
└ ServerVersion: 1.13.1
Plugins: 
Volume: 
Network: 
Swarm: 
NodeID: 
Is Manager: false
Node Address: 
Kernel Version: 3.10.0-693.21.1.el7.x86_64
Operating System: linux
Architecture: amd64
Number of Docker Hooks: 3
CPUs: 2
Total Memory: 2 GiB
Name: 6eb59fe0f577
Docker Root Dir: 
Debug Mode (client): false
Debug Mode (server): false
WARNING: No kernel memory limit support
Experimental: false
Live Restore Enabled: false
Registries:

部署服务

部署Nginx服务,并且将80端口映射到宿主机的81端口上

docker -H 192.168.200.201:2376 run -d -p 81:80 --name web1 nginx

查看

docker -H 192.168.200.201:2376 ps
f695ec677fd6 nginx "nginx -g 'daemon ..." 36 minutes ago Up 36 minutes 192.168.200.202:81->80/tcp Node1/web4

Swarm调度算法

  Swarm在schedule节点运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, random.

  Random顾名思义,就是随机选择一个Node来运行容器,一般用作调试用,spread和binpack策略会根据各个节点的可用的CPU, RAM以及正在运行的容器的数量来计算应该运行容器的节点。

  在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点(The binpack strategy causes Swarm to optimize for the container which is most packed.)。

  使用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。

  Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面。

 

参考文档:http://www.cnblogs.com/rio2607/p/4445968.html
      http://dockone.io/article/227

posted on 2018-06-04 16:57  Msl23  阅读(806)  评论(0编辑  收藏  举报