前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >swarm源码分析(1)---command流程

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

作者头像
月牙寂道长
修改2018-04-03 11:34:48
1.2K0
修改2018-04-03 11:34:48
举报
文章被收录于专栏:月牙寂月牙寂

说明:此文章为腾讯云机器自动从本人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的代码还是比较少的,很清晰。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、command
  • 2、cli
    • 2.1 command
    • 3、create
    • 4、join
      • 4.1 discovery
        • 4.2 etcd
        • 5、总结
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档