kubeedge源码分析系列一:总体架构分析

kubeedge是华为在KubeCon CloudNativeCon China 2018上发布的面向边缘环境容器管理平台。kubeedge能够接入云端Kubernetes集群,使得边缘端应用的管理可以跟云端应用的管理一样,采用广为熟知的Kubernetes API。

SEL实验室准备用一系列文章分析kubeedge的总体架构和各个模块的内部实现机制,本文为系列文章的第一篇。

总体架构

kubeedge/cmd/edge_core.gomain函数负责kubeedge节点的启动。

edge_core.go的import部分加入了以下package,从而自动调用这些package的init函数:

  1. devicetwin
  2. edged
  3. edgehub
  4. eventbus
  5. metamanager

每个package的init函数都会包含模块对象的创建和模块注册两步,以edged这个package为例:

core.Register函数根据配置文件中模块是否被启用,将模块加入内部的modules map或者disabledModules map中加以管理。

在每个package的init函数调用结束之后,kubeedge/cmd/edge_core.go会调用core.Run函数以运行所有模块。core.Run分为StartModulesGracefulShutdown两步:

core.StartModules

StartModules函数创建模块间通讯机制,并启动协程调用每个模块的Start函数。
当前采用golang的channel方式实现模块间通讯,未来可能有基于unix socket的松耦合通讯方式。
通讯方式包括“单播”和“组播”两种方式,即可以将消息单独发给某个模块,也可以把消息发给模块组。

kubeedge中的每个模块都实现kubeedge/beehive/pkg/core package定义的Module接口:

当前实现了这个接口的module包括(test、stub除外):

Module Name Group
DeviceTwin twin twin
edged edged edged
EdgeHub websocket hub
eventbus eventbus bus
metaManager metaManager meta

可以将这些module于Kubeedge repo的readme中的架构图对照:

kubeedge modules

core.GracefulShutdown

GracefulShutdown函数监听系统signal,当接收到如下这些signal时,调用每个模块的CleanUp函数

  1. syscall.SIGINT
  2. syscall.SIGHUP
  3. syscall.SIGTERM
  4. syscall.SIGQUIT
  5. syscall.SIGILL
  6. syscall.SIGTRAP
  7. syscall.SIGABRT

模块管理与模块间通讯

kubeedge/beehive/pkg/core/core.go采用context管理模块与模块间通讯:
当前kubeedge/beehive/pkg/core/context/context_channel包下的ChannelContext采用golang里的channel机制,实现了与context相关的两个接口: ModuleContextMessageContext

ChannelContextModuleContext接口的实现中,它为模块创建模块间通讯用的channel(默认buffer大小为1024)并用channelstypeChannels两个map管理这些channel。其中channels是一维map,用于实现“单播”,typeChannels是二维map,用于实现“组播”

ChannelContextMessageChannel接口的实现中,它负责消息的同步于异步发送,单播组播等。

Yiqun Ding

作者介绍:丁轶群,浙大SEL实验室创始人&带队老师,Cloud Native Computing Foundation会员。浙江省第一批青年科学家。《Docker容器与容器云》主要作者

浙江大学SEL实验室是本网站上所有页面设计、页面内容的著作权人,对该网站所载的作品,包括但不限于网站所载的文字、数据、图形、照片、有声文件、动画文件、音视频资料等拥有完整的版权,受著作权法保护。严禁任何媒体、网站、个人或组织以任何形式或出于任何目的在未经本实验室书面授权的情況下抄袭、转载、摘编、修改本网站內容,或链接、转帖或以其他方式复制用于商业目的或发行,或稍作修改后在其它网站上使用,前述行为均将构成对本网站版权之侵犯,本网站將依法追究其法律责任。
本网站与他人另有协议授权下载的或法律另有规定的,在下载使用时必须注明“稿件来源:浙江大学SEL实验室”。

2 thoughts on “kubeedge源码分析系列一:总体架构分析”

Leave a Reply

Your email address will not be published. Required fields are marked *