KubeConShanghai2018——KubeEdge开源首秀

妖精的绣舞 提交于 2019-12-28 17:07:15

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

2018年11月15日上午Huawei在上海KubeCon宣布了KubeEdge项目开源,并公布了KubeEdge这个开源项目的地址(欢迎Star、Folk,各种Issue、PR): kubeedge/kubeedge

并演示基于KubeEdge管理摄像头的一个智能考勤系统的例子。

在此之前,先简单介绍下KubeEdge这个项目背景。当前,越来越多的计算正在从云端往边缘侧转移。

我们身边随处可见边缘计算的场景,例如:

  • 智慧园区,可以在边缘侧完成提取视频、图片的摘要,图像识别放在云端。
  • 工业机器人,需要在边缘侧进行消息预处理与模式匹配。
  • 车联网等等,需要在边缘侧进行ML模型预测等。

5大现实场景下的“客观因素”推动计算从云端走向边缘:

  • 低延时要求。AR/VR的时延要求是ms级,工业控制的时延更是在us级。
  • 高可靠性。具体表现为:>99.999%的可用性,响应时间可预测,响应结果可重复等。
  • 本地自治。要求边缘侧可适应偶尔断网,或者直接本地自治。
  • 海量数据和有限带宽的矛盾。设备侧将产生海量数据,而以目前的带宽还无法承载这数据量。另外一个事实就是,很多数据没有全局价值,没有必要浪费带宽上传到云端。
  • 信息安全。考虑到商业密码和个人隐私,很多机构和个人并不愿意把数据传输到云端。

中心云无法很好地解决以上问题,引入边缘计算可以解决这些问题。那么如何在边缘侧部署应用呢?我们很自然地想到了Kubernetes。虽然Kubernetes已经成为事实上容器编排的标准,但是当涉到在边缘侧部署时,仍然存在不少挑战。

例如:

  1. 边缘侧可能没有足够的资源运行一个完整的Kubelet;
  2. 当边缘节点和云端的网络不稳定时甚至完全不通时,能否实现本地自治;
  3. 边缘侧节点之间通信;
  4. 如何在云端管理多租户的边缘资源,包括设备;
  5. 边缘侧没有serverless的支持,比如:函数。

为了解决Kubernetes在IoT Edge场景下的问题,Kubernetes社区最近成立了一个新的工作组:IoT Edge WG。

该工作组由Huawei,红帽,Google和VMWare共同领导。这个工作组的目标是:

  • 定义边缘计算的常用术语;
  • 梳理和解释常见用例的架构;
  • 在当前这些常见用例中梳理出可使用Kubernetes进行部署的用例及其面临的挑战;
  • 提供一个能够适应多种IoT Edge场景下的参考的架构。

因此,我们开源了KubeEdge,一个Kubernetes Native的边缘计算管理框架,他的设计初衷就是:让云边协同,计算下沉,让云端更加容易地管理边缘节点和设备。

KubeEdge有以下几个特点:

  1. KubeEdge构建在Kubernetes之上,100%兼容K8S API,可以使用K8S API原语管理边缘节点和设备;
  2. 为了让K8S应用能够跑在边缘上,深度定制和优化了runtime;
  3. 为了应对边缘侧的网络不稳定因素,设计了可靠的消息通道;
  4. 边缘适应本地自治;
  5. 丰富的应用和协议支持;
  6. 大大简化了设备的接入复杂度;

KubeEdge项目开源地址: https://github.com/kubeedge/

KubeEdge是个开放的社区,欢迎开发者积极贡献代码,在使用过程中有任何问题也欢迎提issue讨论。

KubeEdge从功能上看,是打通了从底层设备到设备驱动/SDK,再到边缘侧Runtime,云端控制器以及云上应用整个软硬件全栈。

从架构看,又分为云端和边缘侧。边缘侧是单进程部署,采用了模块化设计,由edged,metamanager,devicetwin,eventbus,edgehub这五个模块构成,模块之间通过golang的channel进行通信。

Edged 就是为边缘计算深度定制的精简runtime,虽然这是一个精简的runtime,但它支持K8S的API原语,比如:Pod,Volume,Configmap等,同时也支持Pod探针和Event上报;

Edgehub 是一个web socket的client,负责和云端的消息通信,包括:向边缘侧同步云端资源更新,向云端报告边缘侧节点和设备状态更新;

Metamanager 则是一个消息处理器,是架在edged和edgehub之间的桥梁,同时也和后端data store交互,读写一些元数据;

EventBus 则是边缘节点和设备的之间的纽带,他既可以从MQTT Broker处订阅设备状态更新事件,并向其他感兴趣的组件发布,也可以向MQTT Broker发送对设备的操作指令,同时云上app和用户自己部署在edge的应用通信,也走eventbus;

DeviceTwin 则负责存储设备元数据到data store以及和云端同步设备状态,用户可以从云端下发的对设备操作指令发布给DeviceTwin。设备目前可以通过MQTT Broker注册进来,也就是eclipse的mosquitto。未来,我们将支持更多的设备协议,例如:AMQP,BlueTooth,ZigBee等。

接下来我们将用一个智慧园区人脸考勤系统为例,展示KubeEdge协同管理云,边和设备的能力。

整个过程分为以下三个步骤:

  • 园区管理员通过KubeEdge纳管边缘计算节点,节点纳管后,管理员可以通过界面对边缘节点进行管理和业务发放;
  • 园区管理员通过KubeEdge统一管理、配置边缘设备(如视频摄像头),并提供一套接口供边缘应用使用,简化应用配置;
  • 园区管理员通过智能视频分析服务,部署边缘人脸识别算法,在边缘侧完成实时视频的人脸抠图,然后在云端完成人脸识别。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!