北美KubeCon新风,正把K8S魔力带向边缘计算
作者:DJ
审校:Kevin·Wang
1. 容器生态圈新的创新方向
2018年容器技术圈的年终盛典北美KubeCon终于在西雅图落下了帷幕。这次北美KubeCon总共吸引了8000多观众参会,创下历史新高。先放一张图来感受下现场的火爆程度。
关注Kubernetes的小伙伴应该已经感觉到了,与观众参会热情形成鲜明对比的是,这届KubeCon传递出了一个信号:针对Kubernetes本身的变化越来越少,我们也越来越难看到那些激动人心的大特性。Kubernetes正变得“无聊”已经成了一个既定的事实。
对Kubernetes核心来说,“无聊”并不见得是件坏事,这是一个项目成熟的标志。现如今Kubernetes已经日益成为公有云/企业IT系统的基础设施,并且朝着大规模,复杂场景的方向延伸,与AI、大数据、IoT、以及垂直行业等领域的结合越来越紧密。近来,越来越多围绕Kubernetes生态圈的创新,正在这些领域发生着。比如,这次在北美KubeCon亮相的由华为开源的KubeEdge项目,就给人一种眼前一亮的惊喜,让人不由地惊呼 “哦,原来Kubernetes还能在边缘计算上玩!” 在感叹Kubernetes的强大魅力同时,也不得不佩服华为工程师们的创造力——要知道,边缘计算与云计算的场景有很大的区别,用K8S跑边缘计算,之前更多还只是停留在讨论阶段,实践过程中的坑不胜枚举,华为居然做到了,而且还开源了!
2. K8S IoT Edge Working Group
2018年既是容器和Kubernetes收获普遍赞誉的一年,也是边缘计算加速行业落地和应用的一年。边缘计算的“边缘”是指我们日常生活中无处不在、影响着我们衣食住行的各式各样的端点设备,比如:手机、摄像头、路由器、自动驾驶汽车,工业机器人等。与集中式的计算模型相比,边缘计算可以为企业/用户提供低延迟,高性能的服务,保证数据的本地化和安全,解决本地数据人工智能等问题。然而,物联网世界的异构性和工业系统资产的长生命周期等特点给边缘设备的管理带来了严峻的挑战。Gartner直接把边缘计算列为下一个十年的关键技术方向。
Kubernetes引领的以容器为中心的IT基础设施变革方兴未艾,就已经有人在谋划下一个“十年”了。既然Kubernetes已经成为了容器化编排的事实标准,并且持续在云端持续发挥着魔力,那么一个直觉的想法就是能否让Kubernetes把这种魔力带到边缘计算的场景呢?
然而,当Kubernetes真正涉及到边缘侧部署时,仍然存在不少挑战,例如:
1. 边缘侧可能没有足够的资源运行一个完整的Kubelet;
2. 当边缘节点和云端的网络不稳定时甚至完全不通时,能否实现本地自治;
3. 边缘侧节点之间通信;
4. 如何在云端管理多租户的边缘资源,包括设备;
5. 边缘侧没有serverless的支持,比如:函数。
为了解决这些挑战,华为,谷歌,红帽,VMWare共同在Kubernetes社区发起成立了一个新的工作组:IoT Edge Working Group,目的就是为了提高Kubernetes在边缘场景下的部署能力。
KubeCon进行到第三天的时候,四位分别来自华为,红帽,思科和Oort公司的工程师们进行了一次圆桌会议,会议主题就边缘计算面临的技术挑战和未来发展趋势。
来自华为的架构师Cindy Xing(Kubernetes社区IoT Edge工作组的co-chair)在圆桌会议中谈到了云计算、容器和边缘计算的关系——不同于云计算,边缘计算意味着几十万分布在不同地理位置的边缘节点和百万甚至上亿的末端设备。边缘计算规模和地域跨度远远超过数据中心。云所能提供的带宽将无法满足边缘的需求。同时边缘和云之间的连接是不稳定的。边缘侧需要实现在和云断网的情形下实现自治,同时又需要和云连接实现集中的管理和批量的应用部署管理。如果对着几十万的边缘节点去分别部署更新应用,这个消耗是无法想象的。另外边缘计算中,设备极其多样,设备的通信协议也很不同。设备可以是128MB、1CPU的Raspberry-Pi,也可以是多核,GB内存的服务器。设备通信协议既可以是Http/Amqp/Mqtt,还可以是Bluetooth,Zigbee等等。边缘计算将比云计算复杂的多。对于开发者来说,一个应用在办公室开发验证后,将希望应用直接部署在边缘,无需焦虑功能问题。容器的可移植性正好满足了这个需要。
正是看到了K8S和边缘计算存在的天然契合点,华为开发并开源了KubeEdge——业界首个基于Kubernetes的多租、可扩展、兼容K8S API的容器应用的边缘计算平台。KubeEdge也是K8S IoT Edge Working Group输出的使用Kubernetes支持边缘计算的一个参考范例。
3. KubeEdge:K8S与边缘计算的结合
KubeCon第四天的时候,华为为CNCF IOT/Edge的社区会员组织了一次小型聚会。
在这次轻松随意的聚会上,K8S/CNCF社区成员坐下来,聊聊天,分享各自对边缘计算的场景需求和技术理解。华为的工程师演示了华为云的边缘计算产品IEF。在随后的KubeCon CNCF IOT/Edge Deep Dive,co-chair Cindy Xing深度介绍了IEF的开源实现KubeEdge的架构,功能和未来发展路标。
针对边缘计算场景下的痛点,KubeEdge为用户提供了基础的网络设施,使用KubeBus可以实现边缘和云,边缘和边缘的网络路由通信。借助云和边的MetaStore以及之间的同步,KubeEdge解决了云边断网,带宽的问题并实现边缘侧自治。在KubeEdge里,AppEngine是个轻量化的代理, ~10MB的运行时内存消耗意味着它几乎可以跑在任何设备上。AppEngine保持K8S的数据模型和通信协议,通过和容器引擎交互,管理容器应用的生命周期,反馈容器应用的运行状态。
从功能上看,KubeEdge打通了从底层设备到设备驱动/SDK,再到边缘侧Runtime,云端控制器以及云上应用整个软硬件全栈,它为IOT厂商,开发者和IOT应用企业带来了一个解决方案和平台。
从架构看,KubeEdge包括云端和边缘侧两套组件。边缘侧对设备支持MQTT协议,采用了模块化设计,由Edged,MetaManager,DeviceTwin,EventBus,EdgeHub这五个模块构成,模块之间通过golang的channel进行通信。
Edged就是为边缘计算深度定制的精简AppEngine。虽然精简,但这个AppEngine支持K8S的API原语,比如:Pod,Volume,Configmap等,同时也支持Pod探针和Event上报。
EdgeHub是一个web socket的client,负责和云端的消息通信,包括:向边缘侧同步云端资源更新,向云端报告边缘侧节点和设备状态更新,这条数据通道也就是上文提到的KubeBus。
MetaManager则是一个消息处理器,是架在edged和edgehub之间的桥梁,同时也和后端data store交互,读写一些元数据;
EventBus则是边缘节点和设备的之间的纽带,他既可以从MQTT Broker处订阅设备状态更新事件,并向其他感兴趣的组件发布,也可以向MQTT Broker发送对设备的操作指令,同时云上app和用户自己部署在edge的应用通信,也走EventBus。
DeviceTwin则负责存储设备元数据到data store以及和云端同步设备状态,用户可以从云端下发的对设备操作指令发布给DeviceTwin。KubeEdge在边缘侧对设备支持MQTT协议,并且提供设备影子服务。设备目前可以通过MQTT Broker(mosquitto)注册进来。
在Cindy看来,KubeEdge的架构做到了云、边松耦合,边缘可以在断网条件下自治,并在网络恢复后和云侧进行同步。KubeEdge引入了K8S强大的容器编能力,客户可以像管理云上K8S集群一样方便地管理边缘节点和部署应用,这对熟悉K8S的用户来说,无疑是个福音。
4. 未来工作
KubeEdge目前已包含了边缘侧的完整实现,云侧的开源工作正在紧锣密鼓地筹划中,相信很快也会开源,详见项目地址:https://github.com/kubeedge/kubeedge。
KubeEdge自11月KubeCon China宣布开源以来,引起了广泛关注,一度登上Github trending榜单。目前star 220+,fork 50+,slack用户和开发者群成员50+,并且吸收了多名外部代码贡献者。
未来,华为将继续完善KubeEdge,包括但不限于:
-
支持更多的设备接入协议:AMQP,蓝牙,ZigBee等;
-
支持超大规模节点和设备管理;
-
和Istio结合构建服务网格能力;
-
在边缘侧提供函数服务;
-
支持设备通过MQTT协议直连云端;
-
边缘节点使用UDP hop来通信;
-
引入智能调度功能。
华为也欢迎参任何感兴趣的厂商和开发者参与KubeEdge社区,共同推动边缘计算的创新。我们预计今后一到两年边缘计算会有突飞猛进的发展,我们完全有理由相信取得先发优势的KubeEdge将会打造一个新的生态。