(接上篇)
Module接口定义具体内容如下所示。
| type Module interface {Name() stringGroup() stringStart(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 cleanupfunc Run() {//Address the module registration and start the coreStartModules()// monitor system signal and shutdown gracefullyGracefulShutdown()} |
|---|
上述代码中,通过StartModules()启动已经注册的模块,通过GracefulShutdown()将模块优雅地停止。至于如何启动和停止,需要进入GracefulShutdown()函数内容一探究竟。
函数StartModules()定义具体如下所示。
| // StartModules starts modules that are registeredfunc StartModules() {coreContext := context.GetContext(context.MsgCtxTypeChannel) modules := GetModules()for name, module := range modules {//Init the modulecoreContext.AddModule(name)//Assemble typeChannels for sendToGroupcoreContext.AddModuleGroup(name, module.Group())go module.Start(coreContext)klog.Infof("Starting module %v", name)}} |
|---|
从上面 StartModules()函数的定义,可以清楚地知道该函数首先获得已经注册的模块,然后通过一个for循环启动所有的模块。
各模块的启动过程如下所示。
| // GracefulShutdown is if it gets the special signals it does modules cleanupfunc GracefulShutdown() {c := make(chan os.Signal)signal.Notify(c, syscall.SIGINT, syscall.SIGHUP, syscall.SIGTERM,syscall.SIGQUIT, syscall.SIGILL, syscall.SIGTRAP, syscall.SIGABRT)select {case s := <-c:klog.Infof("Get os signal %v", s.String())//Cleanup each modulesmodules := GetModules()for name, module := range modules {klog.Infof("Cleanup module %v", name)module.Cleanup()}}} |
|---|
GracefulShutdown()函数与StartModules()函数的逻辑类似,也是首先获得已经注册的模块,然后通过一个for循环等待关闭所有的模块。
「未完待续……」 点击下方标题可阅读技术文章
「连载」边缘计算(一)01-16:边缘计算系统(基础篇)
juejin.cn/post/732453…
「连载」边缘计算(二)01-16:边缘计算系统(基础篇)
juejin.cn/post/732452…
「连载」边缘计算(三)01-17:边缘计算系统(基础篇)
juejin.cn/post/732488…
「连载」边缘计算(四)01-18:边缘计算系统(基础篇)
juejin.cn/post/732525…
「连载」边缘计算(五)01-19:云、边、端的部署与配置(基础篇)
juejin.cn/post/732542…
「连载」边缘计算(六)01-22:云、边、端的部署与配置(基础篇)
juejin.cn/post/732657…
「连载」边缘计算(七)01-23:云、边、端的部署与配置(基础篇)
juejin.cn/post/732686…
「连载」边缘计算(八)01-24:云、边、端的部署与配置(基础篇)
juejin.cn/post/732719…
「连载」边缘计算(九)01-25:云、边、端的部署与配置(基础篇)
juejin.cn/post/732768…
「连载」边缘计算(十)01-26:云、边、端的部署与配置(基础篇)
juejin.cn/post/732798…
「连载」边缘计算(十一)01-29:云、边、端的部署与配置(基础篇)
juejin.cn/spost/73290…
「连载」边缘计算(十二)01-30:云、边、端的部署与配置(基础篇)
juejin.cn/post/732947…
「连载」边缘计算(十三)01-31:云、边、端的部署与配置(基础篇)
juejin.cn/post/732979…
「连载」边缘计算(十四)02-01:云、边、端的部署与配置(基础篇)
juejin.cn/post/733029…
「连载」边缘计算(十五)02-02:云、边、端的部署与配置(基础篇)
juejin.cn/post/733054…
「连载」边缘计算(十六)02-18:云、边、端的部署与配置(基础篇)
juejin.cn/post/733653…
「连载」边缘计算(十七)02-19:边缘计算系统逻辑架构(原理篇)
juejin.cn/post/733686…
「连载」边缘计算(十八)02-20:边缘计算系统逻辑架构(原理篇)
juejin.cn/post/733723…
「连载」边缘计算(十九)02-21:边缘计算系统逻辑架构(原理篇)
juejin.cn/post/733758…
「连载」边缘计算(二十)02-22:边缘部分原理解析(原理篇)
juejin.cn/post/733797…
「连载」边缘计算(二十一)02-23:边缘部分原理解析(原理篇)
juejin.cn/post/733830…
「连载」边缘计算(二十二)02-26:边缘部分原理解析(原理篇)
juejin.cn/post/733946…
「连载」边缘计算(二十三)02-27:边缘部分原理解析(原理篇)
juejin.cn/post/733980…
「连载」边缘计算(二十四)02-28:边缘部分原理解析(原理篇)
juejin.cn/post/734019…
「连载」边缘计算(二十五)03-04:边缘部分原理解析(原理篇)
juejin.cn/post/734175…
「连载」边缘计算(二十六)03-05:边缘部分原理解析(原理篇)
juejin.cn/post/734240…
「连载」边缘计算(二十七)03-06:边缘部分源码分析(源码分析篇)
juejin.cn/post/734279…
「连载」边缘计算(二十八)03-07:边缘部分源码分析(源码分析篇)
juejin.cn/post/734324…
「连载」边缘计算(二十九)03-08:边缘部分源码分析(源码分析篇)
juejin.cn/post/734353…
「连载」边缘计算(三十)03-11:边缘部分源码分析(源码分析篇)
juejin.cn/post/734457…
「连载」边缘计算(三十一)03-12:边缘部分源码分析(源码分析篇)
juejin.cn/post/734507…