edgecore初始化流程
edcore功能
由官方文档我们知道,kubeedge核心为cloudcore和edgecore,edgecore主要分为以下几个组件
Edged:在边缘管理容器化的应用程序。
EdgeHub:Edge上的通信接口模块。
EventBus:使用MQTT处理内部边缘通信。
DeviceTwin:它是用于处理设备元数据的设备的软件镜像。
MetaManager:它管理边缘节点上的元数据。
启动代码
Run: func(cmd *cobra.Command, args []string) {
verflag.PrintAndExitIfRequested()
flag.PrintFlags(cmd.Flags())
// To help debugging, immediately log version
klog.Infof("Version: %+v", version.Get())
registerModules()
// start all modules
core.Run()
},配置初始化
在初始化时,会初始化配置,配置使用了华为CSE github.com/go-chassis/go-archaius的微服务框架 go-archaius依次从配置中心,命令行,环境变量,文件,外部配置源读取配置,
在beehive中的InitializeConfig中以下代码为本地文件配置的代码实现,在不进行配置configpath的情况下遍历当前的conf目录读取yml或yaml结尾的文件:
registerModules
edgecore通过registerModules函数注册对应的模块
在模块注册时会判断在配置中是否启用了该模块,从而选择性加载
另外registerModules中的initdbmanager比较简单,根据orm初始化数据库,不再赘述
StartModules
初始化一个上下文,当前只有一种类型,也就是go channel,可能以后会有更多的上下文实现
初始化全局上下文context,context包含两个对象moduleContext,messageContext,
moduleContext用于模块管理
messageContext 用于消息同步
这部分消息同步代码即为kubeedge中的消息同步框架beehive的实现
遍历要加载的models,通过AddModule将模块添加到模块上下文的channel上下文里面, AddModuleGroup 根据组模块添加channel到typeChannels
有三个channel channels,typeChannels,anonChannels:
分别有以下group
然后每个模块通过根据Context启动自身
优雅停止
捕捉信号量,然后对模块进行清理
扫描关注我:

Last updated
Was this helpful?