cloudcore

kubeedge源码分析之cloudcore

本文源码分析基于kubeedge v1.1.0

本文主要分析cloudcore中CloudCoreCommand的基本流程,具体的cloudhubedgecontrollerdevicecontroller模块的实现逻辑待后续单独文章分析。

目录结构:

cloud/cmd/cloudcore

cloudcore
├── app
   ├── options
      └── options.go
   └── server.go # NewCloudCoreCommand、registerModules
└── cloudcore.go # main函数

cloudcore部分包含以下模块:

  • cloudhub

  • edgecontroller

  • devicecontroller

1. main函数

kubeedge的代码采用cobra命令框架,代码风格与k8s源码风格类似。cmd目录主要为cobra command的基本内容及参数解析,pkg目录包含具体的实现逻辑。

cloud/cmd/cloudcore/cloudcore.go

2. NewCloudCoreCommand

NewCloudCoreCommand为cobra command的构造函数,该类函数一般包含以下部分:

  • 构造option

  • 添加Flags

  • 运行Run函数(核心)

cloud/cmd/cloudcore/app/server.go

核心代码:

3. registerModules

由于kubeedge的代码的大部分模块都采用了基于go-channel的消息通信框架Beehive(待后续单独文章分析),因此在各模块启动之前,需要将该模块注册到beehive的框架中。

其中cloudcore部分涉及的模块有:

  • cloudhub

  • edgecontroller

  • devicecontroller

cloud/cmd/cloudcore/app/server.go

以下以cloudhub为例说明注册的过程。

cloudhub结构体主要包含:

  • context:上下文,用来传递消息上下文

  • stopChan:go channel通信

beehive框架中的模块需要实现Module接口,因此cloudhub也实现了该接口,其中核心方法为Start,用来启动相应模块的运行。

vendor/github.com/kubeedge/beehive/pkg/core/module.go

以下为cloudHub结构体及注册函数。

cloud/pkg/cloudhub/cloudhub.go

具体的注册实现函数为core.Register,注册过程实际上就是将具体的模块结构体放入一个以模块名为key的map映射中,待后续调用。

vendor/github.com/kubeedge/beehive/pkg/core/module.go

4. core.Run

CloudCoreCommand命令的Run函数实际上是运行beehive框架中注册的所有模块。

其中包括两部分逻辑:

  • 启动运行所有注册模块

  • 监听信号并做优雅清理

vendor/github.com/kubeedge/beehive/pkg/core/core.go

5. StartModules

StartModules获取context上下文,并以goroutine的方式运行所有已注册的模块。其中Start函数即每个模块的具体实现Module接口中的Start方法。不同模块各自定义自己的具体Start方法实现。

具体实现如下:

vendor/github.com/kubeedge/beehive/pkg/core/core.go

6. GracefulShutdown

当收到相关信号,则执行各个模块实现的Cleanup方法。

vendor/github.com/kubeedge/beehive/pkg/core/core.go

参考:

  • https://github.com/kubeedge/kubeedge/tree/release-1.1/cloud/cmd/cloudcore

  • https://github.com/kubeedge/kubeedge/tree/release-1.1/vendor/github.com/kubeedge/beehive/pkg/core

最后更新于

这有帮助吗?