从入门到精通之KubeEdge技术【与云原生的故事】
本文主要内容:
-
KubeEdge介绍
-
KubeEdge架构
-
KubeEdge优势
-
KubeEdge应用场景
-
使用华为云原生搭建KubeEdge
-
小结
1、KubeEdge介绍
KubeEdge是华为云于2018年11月开源的云原生边缘计算平台项目,其主要功能就是将Kubernetes原生的容器编排和调度能力拓展到边缘,并为边缘应用部署、云与边缘间的元数据同步、边缘设备管理等提供基础架构支持。
KubeEdge于2019年3月正式进入CNCF成为沙箱级项目(Sandbox),也成为CNCF首个云原生边缘计算项目,并于2020年9月晋级为孵化项目。目前已广泛应用智能交通、智慧城市、智慧园区、智慧能源、智慧工厂、智慧银行、智慧工地、CDN等行业,为用户提供一体化的边端云协同解决方案。
2、KubeEdge架构
KubeEdge 由以下组件组成
- Edged:在边缘节点上运行并管理容器化应用程序的代理。
- EdgeHub:一个 Web 套接字客户端,负责与边缘计算的云服务交互(如 KubeEdge 架构中的边缘控制器)。这包括将云端资源更新同步到边缘,并将边缘端主机和设备状态更改报告到云端。
- CloudHub:一个 Web 套接字服务器,负责在云端观察变化,缓存并发送消息到 EdgeHub。
- EdgeController:一个扩展的 kubernetes 控制器,它管理边缘节点和 pod 元数据,以便可以将数据定位到特定的边缘节点。
- EventBus:一个 MQTT 客户端,用于与 MQTT 服务器(mosquitto)交互,为其他组件提供发布和订阅功能。
- DeviceTwin:负责存储设备状态并将设备状态同步到云端。它还为应用程序提供查询接口。
- MetaManager: edged 和 edgehub 之间的消息处理器。它还负责在轻量级数据库 (SQLite) 中存储/检索元数据。
3、KubeEdge优势
KubeEdge的特点是在云边通信的资源消耗小,使用方式基于Kubernetes,上手方便,比较适合我们当前的场景。
KubeEdge的优势主要包括:
- 边缘计算
借助在Edge上运行的业务逻辑,可以让本地生成的数据,进行大量数据处理操作并对其进行保护。这样可以减少边缘和云之间的网络带宽需求和消耗,提高响应速度,降低成本并保护客户的数据隐私。
- 简化开发
开发人员可以编写基于HTTP或MQTT的常规应用程序,对其进行容器化,然后在Edge或Cloud中的任何一个更合适的位置运行应用程序。
- Kubernetes原生支持
借助KubeEdge,用户可以像在传统的Kubernetes集群一样,在Edge节点上编排应用程序,管理设备并监视应用程序和设备状态。
- 丰富的应用
可以轻松地将现有的复杂机器学习,图像识别,事件处理等其他高级应用程序部署到Edge。
4、KubeEdge应用场景
4.1、基于KubeEdge 构建云原生卫星计算平台
4.1.1、卫星计算的现状
1)卫星制造面向通用化、智能化、软件化的趋势已经加快。主要原因是卫星的技术已经越来越倾向于通用化,一些工业级的地面上的器件,其实都可以在卫星中使用,尤其定位卫星。另外,卫星也越来越智能化,星上的载荷,也能支持GPU、NPU这样的计算。此外,软件化趋势也是一个特征,星上的载荷,包括卫星的一些系统,软件之间也可以通过API进行调用,星载计算机通过网口也可以把载荷上的软件进行互联互通。
2)卫星组网呈现便捷性、多样性、融合性的特点。
4.1.2、问题和挑战
1)众所周知,2020年后,全球在轨卫星产生的数据已经超过卫星通信所产生的数据量。卫星以前主要是负责通信,或者是负责把a的数据通过卫星快速地传给b,所以它最早其实是负责数据和网络信号传输的。但从2000年以后,随着轨道上不同的卫星越来越多,产生的数据也越来越多,卫星本身产生的数据量其实已超过卫星所传输的数据量,这就需要卫星进行在轨的实时处理,把一些冗余的数据丢弃。同时能够提升响应时间,另外也减少网络链路的压力或网络链路传输的消耗。
2)以遥感、应急、灾害预警为代表的需求迫切需要通过在轨计算处理,提高响应时间和预测精度。
4.1.3、基于KubeEdge的云原生卫星计算平台
1)首先使用KubeEdge边缘协同AI子项目Sedna, 构建地面与卫星的多模型协同推理以及地面的模型增量训练使用场景,在卫星上使用小模型,在地面使用大模型,以此能够支持在卫星上使用非常少的资源来更好的支持AI推理的效果。
2)使用KubeEdge device mapper来对卫星上的各个传感器进行统一的建模和管理,以便让地面管理人员时时刻刻地知道卫星上面的设备工作情况。而所有的这一切都是通过KubeEdge建立起来的 高可靠的云边通道来进行通信的。并且我们实现了使用K8s的数据模型,来对卫星上的应用来进行统一的生命周期的管理。
4.2、 KubeEdge基于AI应用
4.2.1、背景
华为云边缘云创新实验室ECIL(Edge Cloud Innovation Lab,Huawei Cloud)致力于分布式协同AI技术与业务创新,提供KubeEdge SIG AI系列中边云协同推理、联邦学习、增量学习和终身学习范式。
当前阻碍边缘AI规模复制的两个技术挑战:边侧小样本与边缘数据异构。在边缘云背景下:
- 不同边侧数据分布总是不断变化
- 而边侧标注样本也往往由于成本较高导致数量稀少。
因而封闭学习需不停标注样本并重新训练,这显然给服务落地带来巨大挑战。这种数据分布和数据量上的挑战分别称为数据异构和小样本。
同时,边缘AI客户往往存在数据安全合规与边缘AI服务离线自治需求。基于1995年学界提出的终身学习概念,进一步定义边云协同终身学习为边云协同的多机器学习任务持续学习,正式定义如下:
边云协同终身学习:给定云侧知识库中N个历史训练任务,推理持续到来的当前任务和未来M个边侧任务,并持续更新云侧知识库。其中,M趋向于无穷大,同时边侧M个推理任务不一定在云侧知识库N个历史训练任务当中。其中机器学习任务是指在特定情境下的机器学习模型相关运算工作,如中译英(给定汉语翻译为英语)、亚洲植物分类等。
4.2.2、方法介绍
KubeEdge-Sedna发布业界首个开源边云协同终身学习范式流程。KubeEdge-Sedna边云协同终身学习通过:
1)多任务迁移学习适应不同边缘局点数据异构,实现“千人千面”精准预测;
2)未知任务增量处理在小样本下越学越聪明,逐步实现AI工程化与自动化;
3)借助云侧知识库来记忆新情景知识,避免灾难性遗忘;
4)边云协同架构使得在应用云上资源同时保证数据安全合规与边缘AI服务离线自治,希望从根本上解决上述边云协同机器学习的挑战。
其中,当前Sedna选用的模块化方案和迁移学习方案使得开源的边云协同终身学习特性能够实现模型无关:
1)同一个特性能够同时支持结构化和非结构化不同模型,在特性中模型可插拔;
2)同一个特性能够同时支持分类、回归、目标检测、异常检测等。
当前提供了一个楼宇空调控制驱动的热舒适预测案例,基于开源Ashrae Thermal Comfort II数据集。在这个开源数据集中,收录了全球28个国家99个城市1995~2015年之间楼宇内人员热舒适真实数据,目标是构建一个机器学习分类模型,给定环境特征,预测人群的热倾向(Thermal Preference)。热倾向分为三类,希望更冷(觉得热)、不希望变更(觉得舒适)、希望更热(觉得冷)。
由于人员个体差异、房间与城市差异等,不同个体、不同地点对于热舒适的感受是不一样的,那么就会导致相同的环境温度和空调设定下对应的人员的热舒适度标签值不一样,从而导致较为突出的数据异构问题。热舒适度预测主要针对楼宇中的房间人员个体,具有个性化的特点。在环境因素变化较多的情况下,边侧房间人员个体的热舒适度样本通常有限,往往不足以支撑对单个人员进行个性化模型的训练,从而导致较为突出的小样本问题。
案例初步结果如下图所示,整体分类精度与单任务增量学习对比,相对提升5.12%(其中多任务提升1.16%)。其中,在Kota Kinabalu和Athens两个任务,在使用终身学习前后预测效果在Kota Kinabalu数据中预测率相对提升24.04%,在Athens数据中预测率相对提升13.73%。
ATCII各城市Sedna终身学习预测精度一览图
4.3、DaoCloud 基于 KubeEdge 的边缘计算实践
4.3.1、现状
边缘端的edgecore, edgecore和cloudcore的设计模式是相同的,都是基于beehive模块。beehive 模块在整个 KubeEdge 中扮演了非常重要的作用,它实现了一套 Module 管理的接口,KubeEdge 中各个模块的启动、运行、模块间的通信等都是由其统一封装管理。
在服务初始化的时候,分别加载了各个 module 的 init 函数,将 module 注册到 beehive框架的 modules 中。然后,执行 core.Run 来遍历启动各个模块(StartModules)。最后,各个模块使用beehive框架封装好的消息通道来互相通信。
beehive 框架封装好的消息通道来互相通信。Beehive 模块采用 channel 通信,保证了消息的有序性;通道长度默认 1024,增加缓冲,可以有效防止程序阻塞;当缓冲用尽时,beehive 模块会先将旧消息遗弃,再加入新消息。
但Beehive在通信过程中也会产生一些问题:
- 云端发送的消息,边缘端迟迟不处理
- 边缘端无法将消息发送到云端,导致边缘端假死
- 云端到边缘端的消息缓存溢出(websocket)
4.3.2、优化方案
针对beehive通信框架带来的一些问题,我们进行了优化:
首先我们把KubeEdge的通道拆分为 Stream、Bus、Hub 三条消息通道,每条通道的职能更加独立:Cloud/Edge Stream 负责同步日志与指标信息Cloud/Edge bus 负责同步数据信息Cloud/Edge hub 负责同步资源信息Edged 主动请求 Edgehub 获取资源,Edgehub 通过 meta 在本地搜寻资源获取,真正实现低时延,降低网络成本。与此同时,通过扩展 Device Management Interface 定义,让 EdgeX、AKri 等开源设备框架接入 KubeEdge 成为了可能。
Edgehub数据流
数据同步
- Edgehub与Cloudhub同步资源数据
- Edgehub将同步的资源写入meta
- 反之,将meta操作过的资源同步到Cloudhub
数据操作
- 边缘应用访问Edgehub操作(CURD)资源
- Edgehub从meta操作资源并返回
MetaManager多存储后端
- Service 是 Meta 资源操作的服务抽象层,实现 EdgeHub 所需的 Meta 资源 的能力,EdgeHub 直接与 Service 层交互。
- Repository Interface 是 Meta 资源的仓储能力标准接口定义。
- Repository Factory 通过配置文件选择 Repository Interface 的具体实现,如常用的 etcd、bolt、mongodb 等 kv型 nosql,以及常用的 mysql、sqlite 等关系型 sql。
配置文件的读取解析也是用多态的方式去实现。通过这方面的改造,可更加贴合业务的节点,满足业务特性。
数据通道
Edgebus
- 从edgehub获取路由配置
- 包含原servicebus和eventbus的功能
Cloudbus
- 接收边缘消息
- 根据消息目的地址转发到对应云端应用
4.3.3、总结
通过对 Edgehub 数据流、 Cloud-Edge 同步模式、MetaManager 多存储后端、Device Management Interface 以及数据通道的剖析,通信模块的解决方案归纳为以下五点:
- 通过剥离 beehive 通信,不仅增加了代码可读性,还让服务间调用变得更加简单直接;
- 通过对云边通道的优化演进,让边缘端请求真正达到了低时延;
- 多存储后端的实现,可以让边缘端更加灵活地选择适合自己的存储方式;
- 对 Device Management Interface (DMI) 的定义,让其它设备框架接入成为了可能;
- 云边数据交互中最为关键的一环是要求拥有独立的数据通道。
5、 使用华为云原生搭建KubeEdge
5.1、部署流程导航图
创建CCE集群购买一个华为云CCE集群进入CCE控制台:https://console.huaweicloud.com/cce2.0,点击右上角购买Kubernetes集群按钮:
购买(至少一个)CCE节点
进入CCE控制面板的资源管理-节点管理中,点击右上角购买节点按钮:
为(至少一个)CCE节点配置公网IP
进入ECS控制台:https://console.huaweicloud.com/ecm,为刚刚购买的节点配置一个公网EIP:
此外还需要配置此节点的安全组,确保节点的10000、10002、20004、20006端口能够被边缘节点访问到。
5.2 搭建KubeEdge环境
5.2.1 部署Cloudcore服务
5.2.2 进入华为云OSC服务目录界面、订阅Cloudcore服务
进入OSC控制台:https://console.huaweicloud.com/osc,在服务目录中搜索并订阅KubeEdge-Cloudcore服务。
5.2.3 创建Cloudcore实例
订阅后,点击创建实例并按照安装指南部署Cloudcore。
5.2.4 纳管(至少一个)边缘节点
在边缘节点上安装keadm工具 ,可以从https://github.com/kubeedge/kubeedge/releases下载keadm工具包。
5.2.5 从CCE获取边缘节点准入token
进入CCE新版界面:
选中之前创建的CCE集群后点击CloudShell按钮:
进入CloudShell交互式终端命令行后,可以使用kubectl get secret -nkubeedge tokensecret -o=jsonpath='{.data.tokendata}' | base64 -d命令获取边缘节点的准入token:
5.2.6 使用keadm join纳管边缘节点
纳管完边缘节点后,还需根据edgemesh文档:https://edgemesh.netlify.app/guide/getting-started.html#manual-installation
对edgecore.yaml进行配置。
5.3 部署Edgemesh服务
进入华为云OSC服务目录界面、订阅Edgemesh服务。与步骤2.1相同,订阅Edgemesh服务后根据安装指南安装Edgemesh服务:
5.4 部署Sedna服务
进入华为云OSC服务目录界面、订阅Sedna服务。与步骤2.1相同,订阅Sedna服务后根据安装指南安装Sedna服务:
最后,在云原生服务中心的服务实例看板中可以看到Cloudcore、Edgemesh和Sedna服务都已安装完成:
6、小结
KubeEdge是面向边缘计算场景、专为边云协同设计的业界首个云原生边缘计算框架,在 Kubernetes 原生的容器编排调度能力之上实现了边云之间的应用协同、资源协同、数据协同和设备协同等能力,完整打通了边缘计算中云、边、设备协同的场景。随着云业务不断发展,相信在不久的将来,KubeEdge将会被更广泛的应用起来。
【与云原生的故事】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/345260
- 点赞
- 收藏
- 关注作者
评论(0)