kubeedge源码分析之cloudcore
本文源码分析基于kubeedge v1.1.0
本文主要分析cloudcore中CloudCoreCommand的基本流程,具体的cloudhub
、edgecontroller
、devicecontroller
模块的实现逻辑待后续单独文章分析。
目录结构:
cloud/cmd/cloudcore
1 | cloudcore |
cloudcore
部分包含以下模块:
- cloudhub
- edgecontroller
- devicecontroller
1. main函数
kubeedge的代码采用cobra命令框架,代码风格与k8s源码风格类似。cmd目录主要为cobra command的基本内容及参数解析,pkg目录包含具体的实现逻辑。
cloud/cmd/cloudcore/cloudcore.go
1 | func main() { |
2. NewCloudCoreCommand
NewCloudCoreCommand
为cobra command的构造函数,该类函数一般包含以下部分:
- 构造option
- 添加Flags
- 运行Run函数(核心)
cloud/cmd/cloudcore/app/server.go
1 | func NewCloudCoreCommand() *cobra.Command { |
核心代码:
1 | // 构造option |
3. registerModules
由于kubeedge的代码的大部分模块都采用了基于go-channel的消息通信框架Beehive(待后续单独文章分析),因此在各模块启动之前,需要将该模块注册到beehive的框架中。
其中cloudcore部分涉及的模块有:
- cloudhub
- edgecontroller
- devicecontroller
cloud/cmd/cloudcore/app/server.go
1 | // registerModules register all the modules started in cloudcore |
以下以cloudhub为例说明注册的过程。
cloudhub结构体主要包含:
- context:上下文,用来传递消息上下文
- stopChan:go channel通信
beehive框架中的模块需要实现Module
接口,因此cloudhub也实现了该接口,其中核心方法为Start,用来启动相应模块的运行。
vendor/github.com/kubeedge/beehive/pkg/core/module.go
1 | // Module interface |
以下为cloudHub结构体及注册函数。
cloud/pkg/cloudhub/cloudhub.go
1 | type cloudHub struct { |
具体的注册实现函数为core.Register,注册过程实际上就是将具体的模块结构体放入一个以模块名为key的map映射中,待后续调用。
vendor/github.com/kubeedge/beehive/pkg/core/module.go
1 | // Register register module |
4. core.Run
CloudCoreCommand命令的Run函数实际上是运行beehive框架中注册的所有模块。
其中包括两部分逻辑:
- 启动运行所有注册模块
- 监听信号并做优雅清理
vendor/github.com/kubeedge/beehive/pkg/core/core.go
1 | //Run starts the modules and in the end does module cleanup |
5. StartModules
StartModules
获取context上下文,并以goroutine的方式运行所有已注册的模块。其中Start函数即每个模块的具体实现Module
接口中的Start方法。不同模块各自定义自己的具体Start方法实现。
1 | coreContext := context.GetContext(context.MsgCtxTypeChannel) |
具体实现如下:
vendor/github.com/kubeedge/beehive/pkg/core/core.go
1 | // StartModules starts modules that are registered |
6. GracefulShutdown
当收到相关信号,则执行各个模块实现的Cleanup方法。
vendor/github.com/kubeedge/beehive/pkg/core/core.go
1 | // GracefulShutdown is if it gets the special signals it does modules cleanup |
参考:
赞赏一下