Docker Swarm原理大解密

Docker Swarm原理大解密

Docker Swarm是docker公司2014年出品的基于docker的集群管理调度工具,官方文档地址:https://docs.docker.com/swarm/overview/。Swarm能够把多台主机构建成一个docker的集群,用户可以只和swarm api操作来管理多个主机上的docker,再结合上Overlay的网络实现简单的容器调度和互访。

Docker Swarm在设计上遵从了可插拔的设计思想,安装集群只需要启动几个docker就可以完成,安装过程可以参考这里:http://www.tuicool.com/articles/UJJJFjU

总结下Swarm的特性:
1.工作节点的注册和发现
2.管理节点收集集群中所有的信息
3.管理节点支持HA
4.管理节点能感知集群的变化,在节点挂掉后重新调度上面的container
5.提供filter和scheduler的调度策略调度集群里的容器

下面,本文会从源码层面解密Swarm是如何实现上面的特性的。

首先上一张整体的架构图。
来自daocloud的架构图。
这里写图片描述
http://blog.daocloud.io/wp-content/uploads/2015/01/swarmarchitecture.jpg

工作节点的注册和发现

在工作节点启动时会在后端的kvstore上注册一个节点,路径是etcd://ip:2376/docker/swarm/nodeip,Worker会把当前集群的eth0
的ip注册上etcd,然后设置上一个ttl时间,比如3秒。然后启一个for循环每隔2秒(配置heartbeat)注册一次,这样,如果etcd上这个节点没了就说明这个worker已经挂了。

for {
        log.WithFields(log.Fields{
  "addr": addr, "discovery": dflag}).Infof("Registering on the discovery service every %s...", hb)
        if err := d.Register(addr); err != nil {
            log.Error(err)
        }
        time.Sleep(hb)
    }

Manager的leader会启动一个go router watch后端的kvstore上注册上来的ip,如果是新节点注册上来就把节点加入到manager的内存中,开始收集数据,如果是节点挂了就删除

discov
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值