(接上篇)
在获取了配置文件所在的目录confLocation后,接着进行如下操作。
1)判断目录是否存在,如果不存在创建该目录,具体如下。
| confLocation := getConfigDirectory() + "/conf"_, err = os.Stat(confLocation)if !os.IsExist(err) {os.Mkdir(confLocation, os.ModePerm)} |
|---|
2)遍历配置文件目录下符合条件的文件,加入配置信息源,具体如下。
| err = filepath.Walk(confLocation, func(location string, f os.FileInfo, err error) error {if f == nil {return err}if f.IsDir() {return nil}ext := strings.ToLower(path.Ext(location))if ext == ".yml" || ext == ".yaml" {archaius.AddFile(location)}return nil})...}) |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
到此 ,config.CONFIG就获取了KubeEdge所需配置文件内容。
通过上面的分析,我们知道KubeEdge是通过KubeEdge/beehive/pkg/common/config来读取所需的配置文件的,而KubeEdge/beehive/pkg/common/config封装了archaius(GitHub.com/Netflix/arc…)。
CloudCore
本节将对CloudCore进行剖析,对CloudCore组件中功能模块共用的消息框架和各功能模块的具体功能进行深入剖析,具体包括CloudCore功能模块之间通信的消息框架、cloudhub剖析、edgecontroller剖析、devicecontroller剖析。
1. CloudCore 功能模块之间通信的消息框架
CloudCore组件中各个功能模块之间是通过Beehive来组织和管理的。Beehive的消息框架是在CloudCore的功能模块启动的时候启动的,具体如下所示。
| KubeEdge/beehive/pkg/core/core.go |
|---|
| import (..."GitHub.com/KubeEdge/beehive/pkg/core/context") // 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)}} |
| |
上述代码中,在CloudCore的功能模块启动之前,首先实例化了一个beehive的context,然后再获得各个功能模块,最后用一个for循环逐个启动功能模块,并将已实例化的beehive的context作为参数,传入每个功能模块的启动函数中。这样,CloudCore中独立的功能模块就被beehive的context组织成了一个统一的整体。至于beehive的context是怎么做到的,还需要进入beehive的context的实例化函数context.GetContext()一探究竟。
「未完待续……」 点击下方标题可阅读技术文章
「连载」边缘计算(一)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…
「连载」边缘计算(三十二)03-13:边缘部分源码分析(源码分析篇)
juejin.cn/post/734542…
「连载」边缘计算(三十三)03-14:边缘部分源码分析(源码分析篇)
juejin.cn/post/734582…
「连载」边缘计算(三十四)03-15:边缘部分源码分析(源码分析篇)
juejin.cn/post/734622…
「连载」边缘计算(三十五)03-18:边缘部分源码分析(源码分析篇)
juejin.cn/post/734727…
「连载」边缘计算(三十六)03-19:边缘部分源码分析(源码分析篇)
juejin.cn/post/734791…