赞
踩
(接上篇)
KubeEdge组件中各个功能模块之间是通过Beehive来组织和管理的。Beehive是一个基于go-channels的消息框架。但本文的重点不是Beehive,所以只会分析KubeEdge中用到的Beehive的相关功能。下面深入CloudCore、EdgeCore、edgemesh和edgesite组件,探究组件内部各功能模块的共用框架。
在《深入理解边缘计算:云、边、端工作原理与源码分析》8.2.1节已经分析到CloudCore中功能模块的注册和已注册功能模块的启动,本节接着往下分析。
(1)CloudCore中功能模块的注册
CloudCore中功能模块的注册具体如下所示。
func registerModules() { cloudhub.Register() edgecontroller.Register() devicecontroller.Register() } |
从registerModules()函数中,可以知道CloudCore中有cloudhub、edgecontroller和devicecontroller共3个功能模块。
Register()函数定义具体如下所示。
func Register() { core.Register(&cloudHub{}) } |
在KubeEdge/cloud/pkg/cloudhub/cloudhub.go中的Register()函数只是调用KubeEdge/beehive/pkg/core/module.go中的Register()函数。 core.Register(&cloudHub{})函数定义具体如下所示。
... var ( // Modules map modules map[string]Module disabledModules map[string]Module ) ... func Register(m Module) { if isModuleEnabled(m.Name()) { modules[m.Name()] = m klog.Infof("Module %v registered", m.Name()) } else { disabledModules[m.Name()] = m klog.Warningf("Module %v is not register, please check modules.yaml",m.Name()) } } |
从上面的变量和函数定义可以清楚地看到,cloudhub模块注册最终会将该模块的结构体放入一个map[string]Module类型的全局变量modules中。
按照cloudhub模块注册的思路分析,edgecontroller和devicecontroller也做了相同的事情,最终把各自的结构体放入一个map[string]Module类型的全局变量modules中。
cloudhub、edgecontroller和devicecontroller三个功能模块之所以能够采用相同的注册流程,是因为它们都实现了KubeEdge/beehive/pkg/core/module.go中的Module接口。
Module接口定义具体内容如下所示。
type Module interface { Name() string Group() string Start(c *context.Context) Cleanup() } |
我们可以分别在KubeEdge/cloud/pkg/cloudhub/cloudhub.go、KubeEdge/cloud/pkg/controller/controller.go、KubeEdge/cloud/pkg/devicecontroller/module.go中找到cloudhub、edgecontroller和devicecontroller三个功能模块对Module接口的具体实现。
(2)CloudCore中功能模块的启动
CloudCore中功能模块的启动具体如下所示。
//Run starts the modules and in the end does module cleanup func Run() { //Address the module registration and start the core StartModules() // monitor system signal and shutdown gracefully GracefulShutdown() } |
上述代码中,通过StartModules()启动已经注册的模块,通过GracefulShutdown()将模块优雅地停止。至于如何启动和停止,需要进入GracefulShutdown()函数内容一探究竟。
「未完待续……」
点击下方标题可阅读技术文章
「连载」边缘计算(一)01-16:边缘计算系统逻辑架构(原理篇)
「连载」边缘计算(二)01-17:边缘计算系统逻辑架构(原理篇)
「连载」边缘计算(三)01-18:边缘部分原理解析(原理篇)
「连载」边缘计算(四)01-19:边缘部分原理解析(原理篇)
「连载」边缘计算(五)01-22:边缘部分原理解析(原理篇)
「连载」边缘计算(六)01-23:边缘部分原理解析(原理篇)
「连载」边缘计算(七)01-24:边缘部分原理解析(原理篇)
「连载」边缘计算(八)01-25:边缘部分源码(源码分析篇)
「连载」边缘计算(九)01-26:边缘部分源码(源码分析篇)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。