赞
踩
Swarm 是 Docker 公司在 2014 年 12 月初发布的一套较为简单的工具,用来管理 Docker 集群,它将一群 Docker 宿主机变成一个单一的,虚拟的主机。
Swarm 使用标准的 Docker API接口作为其前端访问入口,换言之,各种形式的 Docker Client(docker client in go,docker_py,docker 等)均可以直接与 Swarm 通信。Swarm 几乎全部用 Go 语言来完成开发。 Swarm deamon 只是一个调度器(Scheduler)加路由器(router),Swarm 自己不运行容器,它只是接受 docker 客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm 由于某些原因挂掉了,集群中的节点也会照常运行,当 Swarm 重新恢复运行之后,它会收集重建集群信息。
1.docker API 用于管理镜像的生命周期。
2.swarm CLI 用于集群管理。
3.LeaderShip 提供集群的 HA(high avaliable),防止单点故障,具体实施请参见官网(Highavilability for docker swarm)
4.discovery service 是 warm 的发现服务,它会在每个 node 中注册一个gangent 将各个节点的 IP端口上报,manager 会从发现服务读取各节点信息。
5.schedule 调度模块,用于容器调度时选择最优节点,主要分如下两步(filter 和 strategy)。
6.filter(过滤),当创建或运行容器时,它会告诉调度器哪些节点是可用的(符合要求的)。filter 可以分为两类,节点过滤和基于容器配置的过滤。节点过滤:
Constraints,约束过滤器,可以根据当前操作系统类型、内核版本、存储类型等条件进行过滤,当然也可以自定义约束,在启动 Daemon 的时候,通过 Label 来指定当前主机所具有的特点。
7.Affnity,亲和性过滤器,支持容器亲和性和镜像亲和性,比如一个 web 应用,我想将 DB 容器和 Web 容器放在一起,就可以通过这个过滤器来实现。
8.Dependency,依赖过滤器。如果在创建容器的时候使用了–volume-from/–link/–net 某个容器,则创建的容器会和依赖的容器在同一个节点上。
9.Ports filter,会根据端口的使用情况过滤。
10.strategy 根据策略选择最优节点
11.Binpack,在同等条件下,选择资源使用最多的节点,通过这一个策略,可以将容器聚集起来。
12.Spread,在同等条件下,选择资源使用最少的节点,通过这一个策略,可以将容器均匀分布在每一个节点上。
13.Random,随机选择一个节点。
14.swarm create:Swarm 中 swarm create 命令用于创建一个集群标志,用于 Swarm 管理 Docker 集群时,
15.Docker Node 的节点发现功能。发起该命令之后,Swarm 会前往 Docker Hub 上内建的发现服务中获取一个全球唯一的token,用以唯一的标识 Swarm 管理的 Docker 集群。
注:Swarm 的运行需要使用服务发现,目前该服务内建与 Docker Hub,该服务发现机制目前还在 alpha 版本,站点为:http://discovery-stage.hub/docker.com
swarm manage
Swarm 中 swarm manage 是最为重要的管理命令。一旦 swarm manage 命令在 Swarm 节点上被触发,则说明用户需要 swarm 开始管理 Docker 集群,从运行流程的角度来讲,swarm 经历的阶段主要有两点:启动 swarm、接收并处理 Docker 集群管理请求。
Swarm 启动的过程包含三个步骤:
发现 Docker 集群中的各个节点,收集节点状态、角色信息,并监视节点状态的变化;
前提(开启docker服务并清除环境):
在server1和server3上安装docker(server1和server2之前已经安装过,所以这里只快速演示server3的安装)
1.在server3中安装docker并开启docker
[root@server3 docker]# systemctl start docker
[root@server3 ~]# ls
[root@server3 ~]# cd docker/
[root@server3 docker]# ls
[root@server3 docker]# yum install -y *
[root@server3 docker]# systemctl start docker
2.在server1和server2中开启docker
[root@server1 ~]# systemctl start docker
[root@server2 ~]# systemctl start docker
3.在server1中删除所有容器
[root@server1 ~]# docker ps -a
[root@server1 ~]# docker rm -f compose_web2_1
[root@server1 ~]# docker rm -f compose_web1_1
[root@server1 ~]# docker rm -f compose_haproxy_1
[root@server1 ~]# docker ps -a
4.在server2中删除所有容器
[root@server2 ~]# docker ps -a
[root@server2 ~]# docker rm -f vm1
[root@server2 ~]# docker rm -f vm3
[root@server2 ~]# docker ps -a
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。