写点什么

从架构设计理念到集群部署,全面认识 KubeEdge

发布于: 2021 年 02 月 08 日

摘要:本篇文章将从 KubeEdge 架构设计理念、KubeEdge 代码目录概览、KubeEdge 集群部署三方面带大家认识 KubeEdge。


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


KubeEdge 架构设计理念


1、Kubernetes 的架构



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


只有 API server 可以访问 etcd


组件通过 API Server 访问集群状态


API 采用声明式设计


API 对象彼此互补、可组合


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



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


核心优势主要有 4 方面:



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



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



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



其关键痛点有:


1)资源有限


网关设备,128MB 内存


K8s 集群需要至少 1G 内存


2)网络不畅


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


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


K8s 的 List-watch 需要数据中心网络


3)边缘如何离线自治


网络不稳,随时可能离线


边缘业务离线可工作


边缘离线可故障恢复


4)设备接入和管理


缺少边缘设备抽象


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


3、KubeEdge 架构与核心理念


我们这个架构主要是分了云、边、端三部分,云上边就是我们的控制面,边就是我们的边缘节点,端就是跑了我们的一些端侧设备,云上左边是一个 K8s 的 master,是没有做过改动的原生的 K8s 控制面,后边我们加了我们的一个组件叫 CloudCore,它云上的组件主要是会拿一些 K8s 控制面上的东西,通过 EdgeController 和 DeviceController 做一些处理,然后通过下边的 Cloud Hub,Cloud Hub 主要是跟边端通信的,边端有个 EdgeHub 和 Cloud Hub 通信,然后把数据拿下来。



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


核心理念:


1)云边可靠协同


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


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


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


2)边缘离线自治


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


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


3)边缘极致轻量


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


支持 CRI 集成 Containerd、CRI-O,优化 runtime 资源消耗


4)边缘设备管理


云端通过 Kubernetes API 管理边缘 Device


4、KubeEdge 社区生态



KubeEdge 致力于将 Kubernetes 的能力拓展到边缘


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


Apache 2.0 协议


2019 年 3 月捐给 CNCF 基金会


2020 年 9 月晋级为孵化级托管项目


K8s IoT Edge WG 参考架构


基于 Kubernetes 构建,100%兼容 K8s API


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


3100+ Star,810+ Fork,500+贡献者


目前成立 Device/IoT 与 MEC 两个 SIG


参与社区贡献的企业包括:中国联通,ARM,中国移动,谐云,中国电信,时速云,JD.com,浙大 SEL 实验室,EMQ,InfoBlox,Inovex,Midokura 等


KubeEdge 代码目录概览


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



KubeEdge 集群部署


1KubeEdge 集群部署工具—— keadm


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



子命令参数:


init:部署云端组件


join:部署边缘端组件


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


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


2、KubeEdge 部署 —— 云端


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



重要参数:


--kube-config:连接 K8s Master 的凭据


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


3、KubeEdge 部署 —— 边缘端


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



重要参数:


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


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


本文分享自华为云社区《KubeEdge 架构解读:云原生的边缘计算平台》,原文作者:技术火炬手。


点击关注,第一时间了解华为云新鲜技术~


发布于: 2021 年 02 月 08 日阅读数: 60
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
从架构设计理念到集群部署,全面认识KubeEdge