cloudcore
kubeedge源码分析之cloudcore
本文源码分析基于kubeedge v1.1.0
本文主要分析cloudcore中CloudCoreCommand的基本流程,具体的cloudhub、edgecontroller、devicecontroller模块的实现逻辑待后续单独文章分析。
目录结构:
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
最后更新于
这有帮助吗?