(接上篇)
EdgeCore之edgemesh
前面对EdgeCore组件的edged、devicetwin、edgehub、eventbus、metamanager功能模块进行了分析,本节对EdgeCore组件的另一个功能模块edgemesh进行剖析。目前,KubeEdge官网没有edgemesh相关介绍,根据华为近期的边缘计算视频分享课程获得edgemsh的相关信息。edgemesh作为EdgeCore中节点级别的网络解决方案,主要实现了节点内的流量代理、节点间的流量代理和节点内的DNS解析3块功能。本节剖析这三块功能的具体实现,包括edgemesh Struct组成及注册、edgemesh业务逻辑剖析。
edgemesh Struct组成及注册
edgemesh模块的注册函数具体如下所示。
KubeEdge/edgemesh/pkg/module.go |
// Register register edgemesh func Register() { core.Register(&EdgeMesh{}) } |
注册函数只干了一件事,就是将实例化的edgemesh struct加入到一个全局map中。EdgeMesh struct的定义具体如下所示。
KubeEdge/edgemesh/pkg/module.go |
//EdgeMesh defines EdgeMesh object structure type EdgeMesh struct { context *context.Context } |
EdgeMesh struct的定义比较简单,只有context一个属性。该属性用来与EdgeCore中的其他模块进行通信。
edgemesh业务逻辑剖析
edgemesh模块的启动函数具体如下所示。
KubeEdge/edgemesh/pkg/module.go |
//Start sets context and starts the controller func (em *EdgeMesh) Start(c *context.Context) { em.context = c proxy.Init() go server.Start() // we need watch message to update the cache of instances for { if msg, ok := em.context.Receive(constant.ModuleNameEdgeMesh); ok == nil { proxy.MsgProcess(msg) klog.Infof("get message: %v", msg) continue } } } |
启动函数Start()做了如下4件事。
1)接收并保存通信管道;
2)初始化porxy;
3)启动服务;
4)通过一个for循环接收通信管道中关于edgemesh的信息并处理。
下面对第第2和第4件事展开剖析。
「未完待续……」