【内容共创】玩转KubeEdge保姆级攻略

举报
炒香菇的书呆子 发表于 2022/09/07 19:02:57 2022/09/07
【摘要】 KubeEdge 是一个开源系统,可将本机容器化的业务流程和设备管理扩展到Edge上的主机。它基于Kubernetes构建,并为网络、应用程序部署以及云与边缘之间的元数据同步提供核心基础架构支持。它还支持MQTT,并允许开发人员编写自定义逻辑并在Edge上启用资源受限的设备通信。KubeEdge由云部分和边缘部分组成,边缘和云部分现已开源。

前言

KubeEdge 是一个开源系统,可将本机容器化的业务流程和设备管理扩展到Edge上的主机。它基于Kubernetes构建,并为网络、应用程序部署以及云与边缘之间的元数据同步提供核心基础架构支持。它还支持MQTT,并允许开发人员编写自定义逻辑并在Edge上启用资源受限的设备通信。KubeEdge由云部分和边缘部分组成,边缘和云部分现已开源。

1.KubeEdge基本原理介绍

1.1 KubeEdge架构概览

KubeEdge架构主要分为云,边,端三个部分。云上主要为KubeEdge的控制面,边为KubeEdge的边缘节点,端为与边缘节点连接的端侧设备,比如摄像头和传感器等。云上对接了K8s的控制平面。KubeEdge的云上组件CloudCore主要会获取一些K8s控制面上的云数据,

再通过DeviceController做一些处理,然后再通过下边的PubHub与边端进行通信。边端的EdgeCore会接收PubHub传过来的数据,把云上的控制指令和用户数据拿下来。除此之外,EdgeCore主要做了边缘侧应用管理和设备管理。应用管理能力对接了基于CNI标准的容器引擎。比如container d和docker,用来管理容器的生命周期。设备管理能力主要通过mapper组件实现了多设备接入管理。

KubeEdge还引入了EdgeMesh插件用来提供边缘节点之间的服务互相访问能力。

image-20220830234358524

1.2 CloudCore组件介绍

CloudCore组件中的EdgeController和List/watch,K8s的元数据进行边缘节点的管理以及应用状态元数据的边缘协同。Device Controller定义了设备抽象API,比如Device的CRD。负责接入和管理边缘设备。Sync Controller主要负责应用层边缘协同可靠性,保持云边数据始终一致。CSI Driver用于支持第三方CSI插件的无缝集成。Admission Webhook主要应用于实现边缘应用最佳实践,扩展API输入校验。CloudHub用于边云数据通道,负责分发与接收消息。

image-20220830234424087

1.3 edgecore组件介绍

CloudCore组件中的CloudHub模块与边缘节点建立数据通道,实际上就是和EdgeHub模块建立双向的连接,它会负责提供可靠的双向连接同步,CloudHub和EdgeHub之间的数据通道是一条Websocket层连接,保证了云边的一个内网穿透,云边之间的连接也可以选择kata作为数据通道的协议。在弱网环境下会有更好地QOS,MetaManager是EdgeCore元数据的本地化模块,用来将云上的数据保存在本地供其他模块使用,比如KubeEdge的离线自治能力使用到MetaManager的能力。MetaServer是MetaManager的子模块,是KubeEdge在1.7版本引入的新功能,可以在边缘提供K8s引入的原生APi访问,是的K8s Operator能够无差别的运行在边缘节点上。Edged模块主要引用了上游K8s的Kubelet-Lite,并做了轻量化的定制,用户也可以根据自己的需要定制不同的场景需要。Edged的主要职责是与基于CNI标准的容器引擎进行对接。EventBus本质是一个MQTT客户端,它定义了一系列的设备消息,用于和边缘设备进行无感知通信。

image-20220831215513548

1.4 EdgeMesh 插件介绍

EdgeMesh是KubeEdge在边缘场景下的网络边缘多边互通的一个解决方案。EdgeMesh属于KubeEdge架构内的一部分,EdgeMesh分为EdqeMesh-Server和EdgeMesh-Agent两个组件。EdqeMesh-Server是一个协调者,同时也承担了数据中继器的角色,EdgeMesh-Agent部署在

K8s节点和边缘节点,负责代理应用上的数据传输。EdgeMesh的Tunnel-Server模块主要负责与Tunnel-Agent建立连接,协助P2P打洞以及为EdgeMesh-Agent 提供中继能力。EdgeMesh-Agent包含Proxier模块负责配置内核的iptables规则,将请求拦截到EdgeMesh-Agent进程内。DNS模块是一个内置的DNS解析器,负责将节点内的域名请求解析成一个服务的集群IP。Traffic模块是一个基于Go-Chassis框架的流量转发模块,负责转发应用间的流量。Controller模块通过KubeEdge的边缘侧MetaServer的能力获取Services、Endpoints、Pods等元数据。Tunnel-Agent模块利用中继和打洞技术来提供跨子网通讯的能力。

image-20220831215758091

在EdgeMesh插件部署到KubeEdge集群后,Agent与Agent之间会建立Peer连接,通过边缘侧List/watch来监听元数据的变化。proxier模块会负责配置主机的iptables拦截规则用来拦截应用流量。当节点的应用使用Cluster Ip或服务域名的方式来访问应用,EdgeMesh-Agent的DNS模块会负责将域名解析成Cluster IP,EdgeMesh-Agent再根据规则对后端实例进行负载均衡。通过先前的隧道或者中继转发的方式传递到另一端,这就是EdgeMesh-Agent的大致工作原理。

image-20220831215821114

image-20220830234451906

2.KubeEdge环境搭建与应用

KubeEdge环境搭建与应用这一章节主要从使用华为云CCE服务创建K8s集群,使用OSC搭建KubeEdge环境,基于KubeEdge开发边缘应用来介绍。

2.1 使用华为云CCE服务创建K8s集群

登录华为云账号,进入华为云CCE服务控制台

华为云CCE服务控制台链接:https://www.huaweicloud.com/s/JWNjZSU

点击立即使用

image-20220901124205378

点击创建CCE集群

image-20220901124302882

根据业务所处位置选择合适位置,输入集群名称,选择集群项目和版本。可以根据实际情况进行选择

image-20220901124436370

点击创建节点

image-20220901124558230

按需选择后点击下一步安装插件

image-20220901124659697

然后点击确认配置,并进行提交支付

image-20220901124726035

大概等待8分钟CCE集群可以创建完毕

image-20220901124803637

下面一步要创建结点池,为了保证应用的可用性,节点数量尽量选择大于等于2个,当然,在实际业务中要根据特定需求去选择节点的规格,操作系统。

网络配置根据需求进行配置

image-20220901133306659

确认信息无误后进行提交,等待3-5分钟节点创建完成。

创建完成后我们对节点按照下图操作进行配置,若没有弹性公网IP还需要单独购买。

同时安全组需要将20004-20008放开。

image-20220901133352599

2.1 搭建KubeEdge环境

这一节我们主要讲解如何使用华为云搭建KubeEdge环境。

打开浏览器,进入OSC控制台:https://console.huaweicloud.com/osc

image-20220901133405341

首先订阅CloudCore,点击创建CloudCore服务,区域与之前选择保持一致,服务名称可以选择默认。

image-20220901133517920

在实例参数这一列填写我们之前绑定的公网IP,在nodeName填写我们之前填写的节点名称。完成后点击提交。任务提交之后实例会进行安装,需要等待3-5分钟。

image-20220901133530781

在工作负载界面可以看到CloudCore已经创建。点击Cloudshell进入终端界面。

我们可以通过下列指令去操作集群。

kubege get nodes

image-20220901133551573

CloudCore安装完成后可以使用keadm纳管边缘节点。

打开github进入kubeedge选择对应版本边缘节点安装包进行下载。

将下载解压好的压缩包放入系统根目录下。

使用keadm join 命令进行添加操作

image-20220902001835902

我们回到CCE界面,打开Cloudshell,输入kubecli nodes,可以看到我们的边缘节点已经被纳入到边缘节点中。

image-20220901133604410

在CloudShell界面,我们需要修改clusterDNS和clusterDomain参数,这是为了我们后续可以拦截DNS请求。配置完成后进行保存。

输入systemmctl restart edgecore对系统进行重启。

image-20220901133617228

最后,我们需要创建EdgeMesh服务实例,点击订阅并创建实例,其余步骤同CloudCore配置。

image-20220901133640971

2.3 基于KubeEdge开发边缘应用

边缘应用有很多实际操作场景,我们依靠KubeEdge example作为一个讲解。

KubeEdge example链接:www.github.kubeedge/example

我们主要使用KubeEdge Counter Demo,其主要应用架构如下图,其主要分为两部分,云上有一个web Controller用于控制并下发指令到边缘,边缘有一个Counter接收云上指令,将状态改为云上的期望值。

image-20220902002943236

我们首先将example仓库克隆到本地,登录到开发机(推荐使用linux系统),克隆example系统。

image-20220901133707784

进入到CRD目录,将app的yaml进行修改,将image改成hw的镜像地址。

image-20220902004149063

回到顶层目录将crd进行打包,并进行上传到Cloudshell中。

image-20220901133839010

上创后还需要进行解压操作,接下来创建Controller应用和边缘应用

image-20220901133850044

接下来我们选择创建节点访问类型service对其进行公网IP和端口访问该计数器demo。

image-20220901133859003

web展示情况如图所示。点击后边缘计数器就会开始计数。

image-20220901134048800

3.总结

本文主要讲解了KubeEdge基本原理和怎样通过华为云部署搭建KubeEdge应用。随着5G通信的商用,万物互联时代快速到来,网络边缘的设备数量、产生的数据爆发增长,集中式的数据中心(包括公有云服务)将面临实时性、带宽、能耗、数据隐私的挑战,越来越多的场景需要应用边缘计算。在K8s上,可以通过K3s、Microk8s、KubeEdge三种架构实现边缘计算,KubeEdge以边云协同、边缘侧的轻量和边缘自治能力而获得更多应用。

本文参与华为云社区【内容共创】活动第19期。
https://bbs.huaweicloud.com/blogs/370132

玩转KubeEdge保姆级攻略——环境搭建篇

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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