专栏首页月牙寂swarm源码分析(1)---command流程

swarm源码分析(1)---command流程

说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。

申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。

龚浩华,QQ 29185807,月牙寂 道长

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

swarm是docker公司开发的一个管理docker集群的工具。swarm使用标准docker api来作为入口。功能简单,关键是复用了docker api。

下面将来简单的分析下swarm源码。

注:源码为swarm-0.1.0版本

1、command

我们先进入到main函数

代码在swarm\main.go

这里 初始化了一个app。其利用的是一个第三方库"github.com/codegangsta/cli"

然后添加了一个Before的动作,用于设置log

接着添加了create command

create操作,用于生成一个集群totken,用于集群的唯一标识

添加list command

list操作,用于打印当前集群中所有的node节点

添加了manage command还有join command。

最后调用了app.Run

manage操作,用于swarm manage的开启。

join操作,用于将机器添加到swarm集群中。

一般使用过程为:

1、create,创建一个集群的token,用于标识集群

2、join,将当前机器加入到集群中。

3、manage,开启swarm manage服务。

关于集群的创建,网上有很多文章,可以自行的去搜索。

那么我们先看看第三方库app是如何工作的。

2、cli

代码在github.com\codegangsta\cli\app.go

我们先看看app结构体

其中最主要的是Befor,Commands

下面看看NewApp

这里很简单,都是一些默认的参数设置。

下面进入到Run

上面一个默认helpprinter的赋值

解析参数,并将其构造成context

参数的检查,如果before有被设置,则执行befor。

在swarm中,before中设置了log

查找command,然后调用command的Run

这里就是commands的遍历查找

2.1 command

源码在github.com\codegangsta\cli\command.go

先看结构体

其中最重要的就是Action

再看看Run

func (c Command) Run(ctx *Context) error {

这里省略了一些代码,直接看核心代码。一些参数的解析,然后最后,调用了Action

3、create

我们先看看create的注册

这个是在main函数中的

那么看下Action

代码在swarm\discovery\token\token.go

初始化,TokenDiscoveryService中的heartbeat设置为0,url使用了默认的url https://discovery-stage.hub.docker.com/v1

通过向url post一个请求,获取一个token

4、join

先看看main函数

join的Action则是join函数

代码在swarm\join.go

代码流程是,构建一个discovery,然后调用discovery.Register,注册当前机器

那么我们看看discovery

4.1 discovery

代码在swarm\discovery\discovery.go

discovery是一个插件模式。New中,通过查找scheme,来查找相对应的插件

下面是DiscoveryService接口

那我们看看插件注册

代码在swarm\discovery\consul\consul.go

代码在swarm\discovery\etcd\etcd.go

代码在swarm\discovery\file\file.go

代码在swarm\discovery\nodes\nodes.go

代码在swarm\discovery\token\token.go

代码在swarm\discovery\zookeeper\zookeeper.go

一共注册了6种插件

注册函数

将其放到了一个全局的map中

4.2 etcd

下面我们一etcd来讲解join的流程

代码在swarm\discovery\etcd\etcd.go

初始化了一个etcd client设置相关的参数

向etcd服务器发起一个注册url

5、总结

swarm的代码还是比较少的,很清晰。

文中如果有哪里讲解的不对的地方,还请见谅,望指正。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • swarm源码分析(4)---Scheduler和Api

    第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

    月牙寂道长
  • [以太坊源代码分析] IV. 椭圆曲线密码学和以太坊中的椭圆曲线数字签名算法应用

    本文转载来源自:http://blog.csdn.net/teaspring/article/details/77834360 感谢原作者teaspring...

    月牙寂道长
  • Fasthttp源码分析之http server源码分析

    版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

    月牙寂道长
  • 绕过JS写爬虫

          最近要把很多数据抓下来先存起来,现有历史数据再说。其中,东方财富网有许多数据,其中有一个是机构调研的数据。

    钱塘小甲子
  • 拿到Python爬虫工程师offer后的一些面试总结

    最近我的知识星球中有两位球友找到了Python爬虫工作师的工作,这给了身边球友极大的鼓励,我觉得他们的经验挺好的,于是我就请他们做了一下经验分享,希望能够帮助更...

    叫我龙总
  • 凯文▪凯利:未来世界互联网发展格局及创新技术

    本周跟大家分享周结束不久的腾讯智慧峰会上特邀嘉宾美国【连线】杂志主编凯文·凯利的分享。 标题为《未来世界互联网发展格局及创新技术》。 视频内容

    腾讯大讲堂
  • 我是如何拿到硅谷Offer的:告诉你算法面试的秘密

    原视频地址:www.youtube.com/watch?v=ub1Zwz_nivU

    哲洛不闹
  • python socket

    TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。所以在进行TCP链接时首先要开启服务器端口。

    py3study
  • .net持续集成sonarqube篇之项目管理与用户管理

    在学习阶段,我们可能需要经常删除已构建的项目,在sonarqube中想要删除一个项目有两个入口,都在Administration导航栏内.

    Edison.Ma
  • salesforce 零基础开发入门学习(八)数据分页简单制作

    本篇介绍通过使用VF自带标签和Apex实现简单的数据翻页功能。 代码上来之前首先简单介绍一下本篇用到的主要知识: 1.ApexPages命名空间 此命名空间下的...

    用户1169343

扫码关注云+社区

领取腾讯云代金券