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?