这篇文章从组件和概念分析两个方面来解释边缘计算系统。组件:边缘计算系统由云、边、端三部分组成,每一部分都有不止一种解决方案。本文云端组件选择Kubernetes,边缘组件选择KubeEdge,端组件选择EdgeXFoundry。概念解析:解释构成边缘计算系统的云、边缘、终端三部分所涉及的相关概念。01边缘计算系统组成1.Cloud——KubernetesKubernetes是Google开源的大规模容器编排解决方案。完整的解决方案由核心组件、第三方组件和容器运行时组成,如下图所示。1)核心组件Kube-apiserver:Kubernetes内部组件相互通信的消息总线,对外暴露集群API资源的唯一出口Kube-controller:保证集群内部的实际状态资源与预期状态一致Kube-scheduler:需要调度的负载与可用资源最佳匹配Kube-proxy:充当节点内和节点间负载访问的代理Kubelet:根据调度操作相应的负载结果Kube-scheduler状态数据Flannel集群跨主机负载网络通信的解决方案,需要对原始数据包进行额外的封装和解封装,性能损失较大。Calico集群跨主机负载网络通信的方案是纯三层网络方案。需要额外的封装和解封装,性能损失小。CoreDNS:负责集群内负载的域名解析3)ContainerruntimeDocker:当前默认的容器运行时Containerd:比Docker轻量级,稳定性媲美Docker的容器运行时Cri-o轻量级容器目前的稳定性不保证运行时间。Frakti基于管理程序的容器运行时当前不稳定。2.边缘——KubeEdge应用编排能力从云端延伸到边缘节点和设备,为云与边缘之间的网络、应用部署、元数据同步提供基础设施支持。KubeEdge在Apache2.0下获得许可,可免费用于个人或商业用途。KubeEdge由云部分、边缘部分和容器运行时组成,如下图所示。云端部分|CloudCore负责将云端部分的事件和指令发送给边缘,同时接收边缘上报的状态信息和事件信息。边缘状态信息和事件信息上报到容器运行时的云端部分|Docker目前KubeEdge默认支持Docker,官方表示未来会支持Containerd、Cri-o等容器运行时。公司运营的开源边缘计算物联网软件框架项目。该项目的核心是基于在完全独立于硬件和操作系统的参考软件平台上建立的互操作框架,构建即插即用的组件生态系统,加速物联网解决方案的部署。EdgeXFoundry使感兴趣的各方能够在开放和可互操作的物联网解决方案中自由协作,无论是使用开放标准还是专有解决方案。EdgeXFoundry微服务集合构成了四个微服务层和两个增强的基础系统服务。四个微服务层包括从物理域数据采集到信息域数据处理的一系列服务,两个增强的基础系统服务为四个微服务层提供服务支持。从物理层到应用层的四个微服务层分别是DeviceService层、CoreService层、SupportingService层、ExportService层,两个增强的基础系统服务包括安全和系统管理服务,如下所述。1)设备服务层Device-modbus-go:Go实现使用Modbus协议连接设备的服务Device-camera-go:Go实现连接摄像头设备的服务Device-snmp-go:Go实现连接SNMP服务Device-mqtt-go:Go使用MQTT协议实现对接设备的服务Device-sdk-goGo实现连接其他设备SDKSDK为设备接入提供更大的灵活性2)核心服务层Core-command:负责向南向设备发送命令Core-metadata:负责描述设备自身的能力,提供配置新设备并与自身设备服务配对的功能Core-data:负责采集南向设备层数据,为北向服务提供数据服务。Discovery,为其他EdgeXFoundry微服务提供EdgeXFoundry相关服务信息,包括微服务配置属性3)支持服务层Support-logging:负责日志记录Support-notification:负责事件通知Support-scheduler:负责数据调度4)Export服务层export-client:导出数据的客户端export-distro:导出数据的应用程序5)两个增强的基础系统服务System-mgmt-agent:提供启动和停止所有微服务的APISys-mgmt-executor:负责启动和停止所有微服务的最终执行02概念分析构成边缘计算系统的云、边缘和终端的相关概念如下。Cloud:涉及的概念包括Container、Pod、ReplicaSet、Service、Deployment、DaemonSet、Job、Volume、ConfigMap、NameSpace、Ingress等。Edge:目前边缘系统的实现是将原有的cloud和sink组件进行切割到边缘,所以边缘涉及的概念是云的子集,与云是一致的。End:侧边部署的一组微服务,目前没有引入新的概念。目前边缘和端都在使用云的概念,所以本节主要分析云的概念。下面以图表的形式说明云中涉及的相关概念。从图1-1可以看出,Container(容器)是一种建立在操作系统之上的新型环境隔离技术。容器隔离出来的独立空间,包含了应用所需的运行环境和依赖库。在同一台主机上,容器共享操作系统内核。▲图1-1容器分析从图1-2可以看出,一个Pod由一组容器组成,同一个Pod中的容器共享存储和网络命名空间。在边缘计算系统中,Pod是最小的可调度单元,是应用负载的最终载体。▲图1-2Pod分析从图1-3可以看出,ReplicaSet用于管理Pod,负责保持预期的Pod数量与实际的Pod数量一致。在边缘计算系统中,ReplicaSet负责维护应用的多实例和故障自愈。▲图1-3ReplicaSet分析从图1-4可以看出,Service作为一组Pod的访问代理,在多个Pod之间进行负载均衡。Pod的生命周期比较短,变化频繁。Service除了作为相关Pod的访问代理和负载均衡外,还维护与Pod的对应关系。▲图1-4服务分析从图1-5可以看出,Deployment是对ReplicaSet的抽象,在ReplicaSet的基础上增加了一些高级功能。其功能和应用场景与ReplicaSet相同。▲图1-5部署分析从图1-6可以看出,DaemonSet负责在各个??节点上启动指定Pod的实例。该功能一般用于部署网络插件、监控插件、日志插件的场景。▲图1-6DaemonSet分析从图1-7可以看出Job是用来管理批量运行的Pod,这种管理类型的Pod会定时批量触发。与Deployment管理的Pod不同,Job管理的Pod在执行完相应的任务后就退出了,不会永远停留在那里。在边缘计算系统中,AI模型通常使用由Jobs管理的Pod进行训练。▲图1-7工作分析从图1-8可以看出Volume是用来为Pod提供存储的,通过挂载的方式关联到对应的Pod。卷分为临时存储和持久存储。临时存储类型的volume会在pod删除时被删除,persistent存储类型的volume不会在pod删除时被删除。▲图1-8卷分析从图1-9可以看出,ConfigMap作为Pod存储配置文件的载体,通过环境变量(env)和文件卷与Pod关联。在边缘计算系统中,以ConfigMap的形式管理配置信息更为方便。ConfigMap还可以对配置中的敏感信息进行加密,使配置信息更加安全。▲图1-9ConfigMap解析从图1-10可以看出,NameSpace是一种隔离Pod、Service、ConfigMap、Deployment、DaemonSet等资源的机制,一般用于同一公司不同团队的场景隔离资源。边缘计算系统使用NameSpace来限制团队可以使用的资源(CPU、内存)以及它创建的工作负载所需的资源。▲图1-10NameSpace分析从图1-11可以看出,Ingress可以作为集群与集群外通信的桥梁——将集群内的服务暴露给集群外,并在同时,可以合理控制进入集群的流量。在边缘计算系统中,Ingress是一个资源对象,需要与IngressController和反向代理配合使用。▲图1-11Ingress分析作者简介:崔光章,之江实验室高级研究专家,资深云计算与边缘计算技术工程师。自2014年接触云计算以来,参与了多个云计算生产项目,其中代表项目有基于OpenStack的运营商私有云和政务云,以及基于开源容器云解决方案的面向运营商的数据。CenterOperatingSystem(DCOS),2018年开始从事边缘计算相关研发。本文节选自《深入理解边缘计算:云、边、端工作原理与源码分析》,经作者授权发布。
