kubeedge架构解读:云原生的边缘计算平台-星辰平台

技术火炬手 发表于 2021/02/03 11:47:45 2021/02/03
【摘要】 本篇文章将从kubeedge架构设计理念、kubeedge代码目录概览、kubeedge集群部署三方面带大家认识kubeedge。

kubeedgekube edge,顾名思义就是依托k8s的容器编排能力和调度能力,实现云边协同、计算下沉、海量设备的平滑接入。本篇文章将从kubeedge架构设计理念、kubeedge代码目录概览、kubeedge集群部署三方面带大家认识kubeedge

1、kubernetes的架构

这里是一个经典的k8s架构,k8s相信大家已经了解比较多了,它主要是分为控制面和数据面,而现在k8s的生态已经非常火爆了,关于应用管理和容器管理已经形成了一套标准,这里列举了它的一些优势:

只有api server可以访问etcd

组件通过 api server 访问集群状态

api采用声明式设计

api对象彼此互补、可组合

优先使用事件监听而不是轮询

2、基于kubernetes构建边缘计算的优势与痛点

核心优势主要有4方面:

容器化应用封装现在已经成为应用交付的一个趋势,我可以把我的应用打包到容器里,我只打包一次,可以跑在各种地方,这种如果应用到我们iot领域,我们传统有很多iot嵌入式设备,它其实很多硬件和软件强相关的,如果换一个硬件,可能软件就要更改,如果说我这个容器化封装以后,设备可支持容器runtime,我可以将容器跑在任何iot设备上。

通用应用抽象定义:k8sapi,包括developmentpod现在其实在业内已经形成一套标准,大家都比较了解和认可,其实我们基于这些应用做这个平台,大家也更能容易接受。

松耦合架构:它的可扩展性比较好,比如我们基于k8s之上可以通过crd来定义一些api,像我们通过设备管理crd来定义一些iotdevice的一些api,到时候我们可以直接通过k8s的一些方式来管理这些设备;还有一些可扩展,比如它的cia可以对接各种runtime,我们有些边缘节点它的资源非常有限,我们就可以对接一些轻量化的runtime

其关键痛点有:

1)资源有限

网关设备,128mb内存

k8s集群需要至少1g内存

2)网络不畅

边缘位于私有网络,无公网ip

云边跨越公网,带宽有限,延迟高

k8slist-watch需要数据中心网络 

3)边缘如何离线自治

网络不稳,随时可能离线

边缘业务离线可工作

边缘离线可故障恢复

4)设备接入和管理

缺少边缘设备抽象

缺少边缘设备接入协议支持

3kubeedge 架构与核心理念

我们这个架构主要是分了云、边、端三部分,云上边就是我们的控制面,边就是我们的边缘节点,端就是跑了我们的一些端侧设备,云上左边是一个k8smaster,是没有做过改动的原生的k8s控制面,后边我们加了我们的一个组件叫cloudcore,它云上的组件主要是会拿一些k8s控制面上的东西,通过edgecontrollerdevicecontroller做一些处理,然后通过下边的cloud hubcloud hub主要是跟边端通信的,边端有个edgehubcloud hub通信,然后把数据拿下来。

边端是主要做了一个应用管理和设备管理的能力,应用管理左边会有一个edged,右边有devicetwineventbus,分别是应用管理和设备管理,左边有个datastore,就是我们说的本地自治的能力,比如说我们这应用或者设备的元素从云上分发下来,我们是先把它存到一个数据库里,然后再到它的edged或者设备里边,这样就能保证云边网络断开或者边缘节点重启了以后我应用的edged它可以从数据库里把应用源数据拿出来,这样就能保证在故障的情况下业务可以正常恢复。

核心理念:

1)云边可靠协同

双向多路复用消息通道,支持边缘节点位于私有网络

websocket 消息封装,大幅减少通信压力,高时延下仍可正常工作

云边消息校验,网络不稳定时不丢数据

2)边缘离线自治

节点元数据持久化,实现节点级离线自治

节点故障恢复无需list-watch,降低网络压力,快速ready

3)边缘极致轻量

重组kubelet功能模块,极致轻量化(~70mb内存占用)

支持cri集成containerdcri-o,优化runtime资源消耗

4)边缘设备管理

云端通过kubernetes api管理边缘device

4kubeedge 社区生态

kubeedge致力于将kubernetes的能力拓展到边缘

业界首个边缘容器平台项目

apache 2.0协议

20193月捐给cncf基金会

20209月晋级为孵化级托管项目

k8s iot edge wg参考架构

基于kubernetes构建,100%兼容k8s api

9个特性版本,最新版本为v1.4.0

3100  star810  fork500 贡献者

目前成立device/iotmec两个sig

参与社区贡献的企业包括:中国联通,arm,中国移动,谐云,中国电信,时速云,jd.com,浙大sel实验室,emqinfobloxinovexmidokura

kubeedge代码目录概览

adopters就是我们社区的一些采纳者,比如说你用了kubeedge,并且想成为参与者,建议者,你可以提一个pr,把你们写到这个adopter里面去,下面的这些就是代码目录,主要就是cloud(云端)、edge(边缘端)、mappers(接入设备的mapper端),还有owners是我们项目的一些matiner,主要负责核代码,比如你对我们社区贡献比较多,我们可以把你加到owners,帮我们核代码和检视代码。

kubeedge集群部署

1

kubeedge 集群部署工具—— keadm

这个是借鉴了k8skubeadm,可以一键部署kubeedge集群,在部署kubeedge集群时,要先装一个k8smaster,这个master用任何符合k8s的标准都可以,这个 keadm是基于k8s之上部署kubeedge系统。

子命令参数:

init:部署云端组件

join:部署边缘端组件

gettoken:从云端获取边缘端启动凭据

reset:重置kubeedge集群的云端和边缘端

2kubeedge 部署 —— 云端

在已经装好的master上装我们的云端,用 init即可:

重要参数:

--kube-config:连接k8s master的凭据

--advertise-address:签发到边缘证书里的ip地址

3kubeedge 部署 —— 边缘端

边缘端主要用我们的join命令:

重要参数:

--token:边缘端启动时访问云端的凭据

--cloudcore-ipport:边缘端访问的云端ip地址

【星辰平台的版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。