线超博:Introduction to Swarm, a Docker-native clustering system
- 2015-11-12 14:50:00
- 先知 转贴
- 15569
a Docker-native clustering system
分享人:线超博
线超博(jimmyxian)
公司:西安-华为-云计算部门
微博:@线超博
微信:@线超博
邮箱:xianchaobo@gmail.com
Github:https://github.com/jimmyxian
Swarm项目介绍
Swarm社区现状
Demo
QA
什么是Swarm?
•提供容器的集群管理
•对外以DockerAPI接口呈现
•轻量,易上手易部署
•Batteries included but swappable
•创建一个集群(hosted discovery service)
$ swarm create
•将节点加⼊入到集群中:
$ swarm join--add=<node_ip> token://<token>
•启动Swarm Manage
$ swarm manage --addr=<swarm_ip> token://<token>
•
采用Docker命令进行容器的创建: $ docker run -c 1 -m 1024M
服务发现支持3类后端:
(1)hosted discovery service:
Docker Hub提供的发现服务,需要连接外网访问
(2)KV分布式存储系统: Etcd、Zookeeper、Consul
$ swarm manage --addr=<swarm_ip> etcd://<etcd_ip>/nodes
(3)静态IP:本地⽂文件 或者 直接指定节点IP
$ swarm manage --addr=<swarm_ip> node1_ip,node2_ip
Swarm创建容器,调度过程中分为两个阶段:
•1过滤: 根据条件过滤出符合要求的节点
Constraints
Affinity
Dependency
Health
Ports
•2称重:在过滤出的节点中选择一个最优节点
- Binpack:在同等条件下,选择容器最多的节点
- Spread :在同等条件下,选择容器最少的节点
- Random:随机选择一个
•标准的约束包含: node / storagedriver / executiondriver /
kernelversion / operatingsystem
docker run -e “constraint:operatingsystem==*fedora*” … docker run -e “constraint:storagedriver==*aufs*” …
•用户自定义约束:启动docker daemon时使用label指定
docker -d --label “region=shenzhen”
docker run -e “constraint:region==shenzhen” …
•Containers affinities
docker run --name webdb mysql
docker run -e “affinity:container==webdb” nginx
•Images affinities
docker run -e “affinity:image==redis” redis
软过滤器:在过滤过程中,如果发现根据条件过滤完后没有符合要求的节点, 则丢掉此条件,直接根据策略选择⼀一个节点,⽤用~来标⽰示软过滤器
•Containers affinities
$ docker run -d --name redis1 -e constraint:region==~us* redis
•Images affinities
$ docker run -d --name redis2 -e affinity:image==~redis redis
•Constraints
$ docker run -d --name redis3 -e constraint:region==~beijing* redis
依赖过滤器包含以下三种情况:
•Shared volumes:
$ docker run --volumes-from=redis …
•Links:
$ docker run --link=redis:alias …
•Shared network stack:
$ docker run --net=container:redis …
• Port过滤器:根据端⼝口使⽤用情况过滤
$ docker run -d --expose=80 --net=host nginx
• Health过滤器:根据节点的状态进⾏行过滤,去除状态为Fault的节点
High Available Scheduler
可以启多个Manager实例,通过主备方式实现HA
采用分布式锁实现选主过程
备节点收到消息,会转发给主节点
支持etcd、zookeeper、consul
Swarm与周边产品集成---Mesos
创建容器的流程:
(1)获取Mesos Master节点信息
(2)访问Mesos Master,获取满⾜足要 求的节点信息(cpu、memory)
(3)在Swarm内部进行二次调度,选择 最优节点
(4)让Mesos在对应的Slave节点上执行创建容器的任务
(5)Swarm直接访问Docker启动容器
备注: 只有在容器创建、删除操作时,Swarmquorum会访问Mesos,其他请求Swarm直接访 问Docker Daemon
Swarm社区现状
•Docker REST API (>85%)
•Resource management (CPU, Mem, Networking)
•Advanced scheduling with constraints and affinities
•Multiple Discovery Backends (hub, etcd, consul, zookeeper)
•TLS: Encryption & Authentication
•Docker REST API (98%)
•Swarm Manager HA
•Mesos Integration
•Enhance Hosted Node Discovery Service
•引入libnetwork
•容器的监控
•容器自身的HA
•完善API
How To Contribute
发表评论
文章分类
联系方式
联系人: | 王春生 |
---|---|
Email: | chunsheng@cnezsoft.com |