【docker】 docker swarm

1460阅读 0评论2016-05-10 ykyx00
分类:系统运维

Docker Swarm 是 Docker公司官方发布的一套管理 Docker 集群的工具

主机 ip 角色
dc01 192.168.234.139 swarm manager
dc02
192.168.234.140 swarm
dc03
192.168.234.141 swarm

I. swarm安装使用
1. 安装swarm
  docker pull swarm
2. 查看swarm 版本
  docker run --rm swarm -v
  swarm version 1.2.1 (9a968f5)
3. 修改3台docker主机的启动文件,设定一个集群监听端口
 vim /lib/systemd/system/docker.service
 ExecStart=/usr/bin/docker -b=br0 daemon -H 0.0.0.0:2375 -H fd://

4. 在三台主机上配置防火墙,保证2375端口可以访问(也可以关闭firewalld)
5. 在任意docker 主机上创建一个token,作为swarm集群的唯一标识验证
 docker run --rm swarm create
  4e58e8fc16302295d96518c67cc09351
6. 在三台机器上分别执行以下命令,加入swarm集群
 docker run -d swarm join --addr=192.168.234.139:2375 token://4e58e8fc16302295d96518c67cc09351
 docker run -d swarm join --addr=192.168.234.140:2375 token://4e58e8fc16302295d96518c67cc09351
 docker run -d swarm join --addr=192.168.234.141:2375 token://4e58e8fc16302295d96518c67cc09351
7. 在dc01主机上启动swarm manage
 docker run -d -p 2376:2375 swarm manage token://4e58e8fc16302295d96518c67cc09351
8. 可以在任意主机上查看docker集群主机列表
 docker run --rm swarm list token://4e58e8fc16302295d96518c67cc09351

9. 查看docker 集群相信信息
 



10. 我们还可以使用文件来启动一个swarm集群,不用再每台主机上join
>1 cat /mnt/cluster
    192.168.234.140:2375
    192.168.234.141:2375
    192.168.234.139:2375
>2 启动集群,后边不需要跟token
  docker run -d -p 2376:2375 -v /mnt/cluster:/tmp/cluster swarm manage file:///tmp/cluster
>3 查看集群状态
 docker run --rm -v /mnt/cluster:/tmp/cluster swarm list file:///tmp/cluster 

>4 查看集群信息
 docker -H 192.168.234.139:2376 info

11.我们在集群上启动一个容器测试
docker -H 192.168.234.139:2376 run --name web1 -d nginx 
我们通过docker ps命令,在dc02 上看到启动了一台nginx容器


II. 调度


swarm 调度策略

swarm支持多种调度策略来选择节点。每次在swarm启动container的时候,swarm会根据选择的调度策略来选择节点运行container。目前支持的有:spread,binpack和random。

在执行swarm manage命令启动 swarm 集群的时候可以通过 --strategy 参数来指定,默认的是spread。

spread和binpack策略会根据每台节点的可用CPU,内存以及正在运行的containers的数量来给各个节点分级,而random策略,顾名思义,他不会做任何的计算,只是单纯的随机选择一个节点来启动container。这种策略一般只做调试用。

使用spread策略,swarm会选择一个正在运行的container的数量最少的那个节点来运行container。这种情况会导致启动的container会尽可能的分布在不同的机器上运行,这样的好处就是如果有节点坏掉的时候不会损失太多的container。

binpack 则相反,这种情况下,swarm会尽可能的把所有的容器放在一台节点上面运行。这种策略会避免容器碎片化,因为他会把未使用的机器分配给更大的容器,带来的好处就是swarm会使用最少的节点运行最多的容器。

docker run -d -p 2376:2375 -v /mnt/cluster:/tmp/cluster swarm manage --strategy=binpack file:///tmp/cluster

III. 过滤器
Constraint Filter  配置容器运行在哪台host上
Affinity Filter  没看懂
Port Filter   配置端口;只要被占用了,其他需要此端口的容器就会启动失败


参考:http://blog.csdn.net/wangtaoking1/article/details/46731913
上一篇:【docker】 centos7 设置网桥
下一篇:python 学习笔记