深度解析KubeEdge EdgeMesh 高可用架构

news2025/1/22 22:51:30
摘要:通过高可用特性应用场景、高可用特性使用手册、课题总结、未来展望等四个部分的内容来向大家介绍新版本EdgeMesh的高可用架构。

本文分享自华为云社区《KubeEdge EdgeMesh 高可用架构详解|KubeEdge云原生边缘计算社区》,作者:南开大学|达益鑫。

EdgeMesh项目解决了边缘计算场景下复杂网络的通信问题,中心化的edgemesh-server作为一个中继组件,协助其他节点进行网络穿透和流量中转。之前的edgemesh-server本身不具备高可用特性,会遇到性能瓶颈与单点故障问题,目前EdgeMesh v1.12版本的高可用架构不仅优化了上述问题,也带来了更加稳定的系统运行时,还覆盖了多种边缘网络的痛点场景,如分布式动态中继连接场景和私有局域网的网络自治场景等。此外,EdgeMesh 在v1.12中还带来了基于PSK密码的安全连接、对接HTTPS的边缘Kube API Endpoint等特性和能力,整体提升了EdgeMesh的性能、稳定性与安全性。

作为开源之夏课题【EdgeMesh:高可用架构的设计与实现 的实践者,这是我第一次接触开源社区相关的项目,非常有幸能深入地参与到KubeEdge开源项目的开发之中,也非常开心能够参与EdgeMesh高可用特性的方案设计与代码开发。我将通过高可用特性应用场景、高可用特性使用手册、课题总结、未来展望等四个部分的内容来向大家介绍新版本EdgeMesh的高可用架构以及我个人在KubeEdge社区的成长经历。

高可用架构的主要目的是为了保障系统的稳定性以及提升系统的整体性能,此次EdgeMesh的高可用特性在原有功能的基础上还覆盖了多种边缘网络的痛点场景。以下为EdgeMesh高可用特性在边缘计算场景下的具体应用场景,用户可以依据这些用例来理解本特性能提供的服务。

▍1.1 单点故障以及高负载场景

如图所示,当单个节点承担中继功能时,所有其他的节点都需要连接该节点才能够获取网络连接的服务。在这样的场景当中,单个节点的负载就会相应地增加,过高的通信负载或者是密集的连接数量,在诸多情况下是限制服务性能的主要原因,同时如果该节点出现故障则会导致中继连接断开,使得中继连接功能暂时性停滞。 为了能够优化这部分的问题,覆盖高负载访问场景,EdgeMesh 新版本考量使用分布式网络连接的思想,通过给予每一个节点能够提供中继功能的结构,使每一个节点都具有为其他节点提供中继的能力。针对这部分场景需求,用户可以在集群初始化时指定多个特定的节点作为默认的中继节点,依据自身情况调节集群内负载的分配,EdgeMesh将会在提供中继服务的时候,优先尝试连接这些节点;如果不做设置,EdgeMesh也会寻找合适的节点执行中继功能,分散减轻单个节点的中继访问负担。

▍1.2 分布式动态中继连接场景

如图所示,位于上海的边缘应用A和B通过中继互相通信,需要把流量转发到处于北京数据中心里的relay节点,数据传输在远距离的两地之间绕了一圈,导致服务时延较长,用户体验较差。非常遗憾的是,边缘计算场景下集群规模经常横跨多地或者是多区域部署,如果中继节点距离请求服务的节点非常遥远,就会造成极大的延迟,影响用户的体验。这个情况尤其是在中继连接对象与自己不在相邻地理位置下的时候,体现得尤为明显。

为了能够优化这部分的体验,覆盖远距离服务场景,EdgeMesh新版本考量就近中继的原则,用户可以根据集群节点的地理位置分布情况,支持选择一个地理位置适中的relay节点。当应用需要中继连接服务的时候,edgemesh-agent就会动态优先选择就近的relay节点作为中继来提供网络连接服务,以此缩短中继服务的时延。

▍1.3 私有局域网网络自治场景

如图所示,在老版本的EdgeMesh的代码实现中,edgemesh-agent必须保持与云上中继服务edgemesh-server的连接,当局域网内的节点离线后,导致edgemesh-agent断开与中继节点的连接,断连节点上的服务就彻底失去流量代理的能力了,这在部分私有局域网网络内或者是网络情况波动较大的环境当中会给用户造成较大的困扰。

为了能够优化这部分的问题,提高网络应用连接的稳定性,EdgeMesh 新版本考量了分布式管理及网络自治的想法,让EdgeMesh能够通过mDNS机制保障私有局域网网络内或者是离线局域网内节点之间的相互发现和转发流量,维持应用服务的正常运转。针对这部分场景需求,用户并不需要再单独设置任何的参数来启用此功能,该功能一般面对两种情形进行服务维持:a. 在刚部署EdgeMesh的时候,部分节点就已经在私有局域网下,那这个局域网内的节点依旧可以通过EdgeMesh来相互之间访问和转发流量。

b. 在集群正常运转过程当中,部分节点离线后,这部分节点依旧可以通过EdgeMesh来维持相互之间的网络连接和流量转发。

▍2.1 基本原理介绍

在EdgeMesh v1.12版本中,社区将edgemesh-server的能力合并到了edgemesh-agent的EdgeTunnel模块当中,使得具备中继能力的edgemesh-agent能够自动成为中继服务器,为其他节点提供内网穿透和中继转发的功能,新老系统架构对比如下:

EdgeMesh高可用特性的主要实现原理是:当集群内有节点具备中继能力时,其上的edgemesh-agent会承担起中继节点的角色,来为其他节点提供内网穿透和流量中继转发的服务。在集群初始化或者是有节点新加入集群时,EdgeMesh系统会基于mDNS机制发现局域网内的节点并作记录,同时DHT机制会发现跨局域网的其他节点并对其发起连接建立请求,这样当集群内跨局域网的两节点需要连接的时候,中继节点就可以为它们提供流量中继和协助内网穿透的服务。

EdgeMesh高可用特性的核心功能如上图所示,集群当中A节点与B节点通过R1中继节点连接来提供服务,当R1节点无法提供中继服务的时候,A、B节点可以通过高可用特性自动切换到中继节点R2并重新建立连接。在这个过程当中用户几乎感受不到网络连接的变化。接下来我将简单介绍不同情况下使用EdgeMesh高可用特性的方式。

▍2.2 部署时启用高可用特性

您可以通过以下配置方法,在安装EdgeMesh时启用高可用特性,配置过程当中您可以依据集群连接的需求配置中继节点的地址:

# 启用高可用特性
helm install edgemesh --namespace kubeedge \
--set agent.relayNodes[0].nodeName=k8s-master,agent.relayNodes[0].advertiseAddress="{1.1.1.1}" \
https://raw.githubusercontent.com/kubeedge/edgemesh/main/build/helm/edgemesh.tgz
  • relayNodes 参数是中继节点表,类型为 []relayNode,您可以通过配置它来指定集群中应该承担中继节点角色的edgemesh-agent。
  • relayNode.nodeName 参数使用节点名的方式来指定relay节点,这必须与K8s的节点名相同,您可以通过 kubectl get nodes 查看您的k8s节点名。
  • relayNode.advertiseAddress 参数用于指定relay节点的地址,其应当与节点在K8s集群当中的节点地址一致, 如果您购买了公有云的公网IP并挂载到此relay节点上,则 relayNode.advertiseAddress 参数最好应该填写该公网IP地址。

需要注意的是:设置中继节点的数量由 relayNodes[num] 中索引值 num 来规定,num 取值从 0 开始,relayNodes[0] 表示中继节点1。

更多的安装配置信息请详见:

  • helm安装:

快速上手 | EdgeMesh

  • 手动安装:

快速上手 | EdgeMesh

▍2.3 运行时添加新中继节点

如果您在使用EdgeMesh高可用特性时,想要在集群当中添加新的中继节点,可以通过修改 edgemesh-agent-cfg 当中的 relayNodes 参数来达到目的,以下为具体修改配置的方式:

kubectl -n kubeedge edit configmap edgemesh-agent-cfg
# 进入config 文件当中进行编辑
apiVersion: v1
data:
 edgemesh-agent.yaml: |-
   modules:
 edgeProxy:
       enable: true
 edgeTunnel:
       enable: true
       # 设置添加或者是修改为新的中继节点
 relayNodes:
       - nodeName: R1
 advertiseAddress:
         - 1.1.1.1
       - nodeName: R2   <------  在此配置新增节点
 advertiseAddress:
         - 192.168.5.103

之后您可以使用 kubeadm join 或者 keadm join 添加加新的中继节点R2,接着通过以下操作查看添加的中继节点是否正常运行:

# 查看节点是否正常添加
kubectl get nodes
NAME         STATUS   ROLES                  AGE    VERSION
k8s-master   Ready    control-plane,master   249d   v1.21.8
k8s-node1    Ready    <none>                 249d   v1.21.8
ke-edge1     Ready    agent,edge             234d   v1.19.3-kubeedge-v1.8.2
ke-edge2     Ready    agent,edge             5d     v1.19.3-kubeedge-v1.8.2
R2           Ready    agent,edge             1d     v1.19.3-kubeedge-v1.8.2 <------ 新节点
# 查看中继节点的 edgemesh-agent 是否正常运行
kubectl get all -n kubeedge -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
pod/edgemesh-agent-59fzk   1/1     Running   0          10h   192.168.5.187   ke-edge1     <none>           <none>
pod/edgemesh-agent-hfsmz   1/1     Running   1          10h   192.168.0.229   k8s-master   <none>           <none>
pod/edgemesh-agent-tvhks   1/1     Running   0          10h   192.168.0.71    k8s-node1    <none>           <none>
pod/edgemesh-agent-tzntc   1/1     Running   0          10h   192.168.5.121   ke-edge2     <none>           <none>
pod/edgemesh-agent-kasju   1/1     Running   0          10h   192.168.5.103   R2           <none>           <none> <------ new edgemesh-agent running on R2

▍2.4 运行时转化节点成中继

如果您在集群运行过程当中,想要将一些已有节点转化为中继节点,只需要修改 edgemesh-agent-cfg 当中的 relayNodes 参数即可, 以下为具体修改配置的方式:修改完此配置后,需要重启R2节点(转化节点)上的edgemesh-agent。在这个过程当中,假设新设置的节点有中继能力,那么在重新Tunnel模块运行时会执行以下逻辑:

  • edgemesh-agent会读取configmap里的中继节点表relayNodes,检查自己是否被用户设置为中继节点。如果在relayNodes中读取到R2存在,则表明R2被设置为默认初始的中继节点。
  • R2节点上的edgemesh-agent会尝试成为relay ,启动对应的中继功能。
  • 如果发现该节点没有中继能力(一般挂载了公网IP的节点会具备中继能力),那么该节点还是不能承担起中继节点的角色,造成这个结果的原因可能是该节点的advertiseAddress并不能让所有节点访问。

以上就是EdgeMesh高可用架构的原理以及应用场景的介绍了,此次课题结项完成了开源之夏的所有产出要求,也同时作为KubeEdge v1.12新版本的一个重要特性发布,非常高兴能够为开源社区及KubeEdge的开发和完善做出贡献。于我个人而言,当初是在测试5G边缘架构时认识到了KubeEdge, 并为其设计以及功能设想所折服,这与我理想的边缘网络智能架构有诸多的相似之处,也成为我参与开源之夏的契机。在项目开发当中,从功能设计、实现方案到代码编写,各类问题层出不穷,主要是校内知识和研发方式与开源社区及工业环境脱节导致的问题,不过这些困难都在老师社区的帮助和自身努力之下逐一解决了,也是在这个过程当中领我体会到了开源工作中各社区之间相互借鉴推进,各个开发者之间相互帮助交流的强大,也更加理解到优秀的社区环境以及高效的社区例会机制能够快速同步各处开发进度,修正不合理的开发方向和想法,集思广益的同时步步为营,这样让我更加向往社区的工作了。

就EdgeMesh发展设想而言,此次开发已经实现了当初设想的目的,但在参与社区例会,了解整个开源项目的发展之中,许多的想法和创新也随之涌现,是否能够引入ebpf、Webassembly等新兴技术来优化甚至是革新EdgeMesh提供的网络服务;是否可以将人工智能引入到边缘集群的管理和自治当中,让人工智能作为基础建设的一部分,这些设想都让人热血沸腾,忍不住想要参与到社区的开发和研究当中。就我个人而言,未来也会更多地参与到社区的开发和研究当中,一方面我原本所期盼的将科研成果转化为产业价值的目标,已通过开源之夏初见眉目;另一方面,诸多的设想和创新还未能够与大家交流,还未能够得到实践和测试;这些都不断鼓励着我更加深入到社区项目的研发当中。最后非常感谢王杰章老师的悉心教导,可以说老师的耐心沟通和鼓励指导是项目能够成功推进的重要动力;同时还要感谢开源之夏能够给予我们机会参与到实际的开发当中,走出了高校学术的楼阁,尽管此次开源之夏已经结束,但我们的开源之旅却正要开始。

附:KubeEdge社区贡献和技术交流地址

网站: https://kubeedge.io

Github地址: https://github.com/kubeedge/kubeedge

Slack地址: https://kubeedge.slack.com

邮件列表: 

https://groups.google.com/forum/#!forum/kubeedge

每周社区例会: https://zoom.us/j/4167237304

Twitter: https://twitter.com/KubeEdge

文档地址: https://docs.kubeedge.io/en/latest/

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机视觉OpenCV基础】实验二 基元检测

实验二 基元检测 计算机视觉OpenCV基础实验合辑&#xff08;实验1234扩展&#xff09; 资源下载地址&#xff1a; https://download.csdn.net/download/weixin_53403301 合辑&#xff1a;&#xff08;加在下载地址后面&#xff09; /87113581 讲义&#xff08;包括理论、图例、…

[附源码]SSM计算机毕业设计火车售票系统论文JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

antd table 表格滚动高度适配

文章の目录问题产生背景如何解决写在最后问题产生背景 在开发一个后台管理系统&#xff0c;某一页面用到了table表格&#xff0c;产品的需求是&#xff1a; table表格无论展示多少条数据&#xff0c;表头和分页信息要展示出来 此时我们一定首先想到了table表格的 scroll 属性…

【设计模式】原型模式

原型模式属于创建型模式&#xff0c;主要作用是利用一个原型对象的克隆方法&#xff0c;在保证性能的情况下创建多个重复的对象&#xff0c;本质就是通过克隆一个原有的对象来复制出一个新对象。 文章目录原型模式的介绍使用场景原型模式的实现类图实现方法第一步&#xff0c;编…

一文解决 Go 安装和常用环境变量的配置

一文解决 Go 安装和常用环境变量的配置下载链接Windows 操作系统下安装Linux 操作系统下安装安装多个 Go 版本常用环境变量的解释结尾耐心和持久胜过激烈和狂热。 下载链接 官网&#xff1a;https://golang.org/dl中国大陆的镜像站点&#xff1a;https://golang.google.cn/dl/…

跨境电商卖家只青睐亚马逊?其实你不知道,“备胎”早已选好!(Starday)

跨境电商平台作为一个新的国际贸易形态&#xff0c;打破传统贸易形态的方式&#xff0c;将互联网与外贸交易相结合&#xff0c;从而大大降低外贸的运营成本&#xff0c;因此在这两年逐渐燃爆电商行业&#xff0c;让许多行业的人趋之若鹜&#xff0c;从观察中我们可以发现&#…

线性插值方法

插值&#xff0c;通俗来说当在一个离散的事件中&#xff0c;想知道某一个位置确定的值时&#xff0c;就可以利用插值方式计算得到&#xff0c;即利用已知数据估计未知位置数值。插值的方式有很多&#xff0c;下面介绍几种常用的插值方式。 一、最近邻插值(Nearest Neighbour …

矩阵分析:特征值分解都在这里了

矩阵分析&#xff1a;特征值分解前置知识空间变换伸缩旋转对称矩阵对称矩阵对角化正交矩阵向量的基基变换不同基下的向量变换逆矩阵不同基下的空间变换内积的几何意义特征值、特征向量特征值分解代码前置知识 空间变换 伸缩 一个矩阵其实就是一个线性变换&#xff0c;因为一个…

借道元宇宙 一汽-大众揽巡打造沉浸式上市体验

11月18日&#xff0c;一汽-大众以元宇宙科技为载体&#xff0c;举行了行业首场元宇宙游戏形式的“巡梦之旅”线上虚拟发布会&#xff0c;宣布旗下“硬核大五座SUV”揽巡Tavendor正式上市。全新揽巡共提供330TSI 精英巡行版、330TSI 豪华巡逸版、380TSI 四驱R-Line 巡游版、380T…

代码库制作与使用

静态库 假定有以下目录结构&#xff0c;main.c 为src测试文件&#xff0c;所以要调用src目录下的四个文件。我们可以把src打包成一个静态库供main.c使用 tree 命令展示目录结构制作 1.先把目标代码编译生成.o文件 需要包含头文件&#xff0c;否则会报错&#xff0c;使用-I来…

dB family cheat sheet: dB, dBW, dBm, dBi, dBc, etc

目录 1. dB 2. dBi 3. dBW和dBm 4. dBc(Decibel relative to carrier power level) 5. dBuV(dB over 1 microvolt), dBmV(dB over 1 millivolt) 6. 功率、电压、匹配阻抗 7. dBFS 1. dB dB用于表示功率之间的对数比率&#xff0c;所以它没有单位&#xff0c;其定义为&am…

【2022.11最新】Python疫情数据采集 + 可视化展示

嗨害大家好鸭&#xff01;我是小熊猫 最近我又又又在家里居家办公了 闲来无事&#xff0c;用python采集一下 再做个可视化 康康现在疫情如何 源码、资料素材电子书点击这里 知识点: 1. 爬虫基本流程 2. requests 发送请求 3. re 正则表达式 4. json 结构化数据解析 5. pyech…

【深度学习】CycleGAN开源项目学习笔记 | 完整流程 | 报错总结 | pytorch

文章目录前言一、下载项目&#xff0c;文件结构观察二、数据集下载三、训练3.1、训练初体验3.2、命令行输入参数3.3、继续训练命令四、预测4.1、使用自己训练完的权重文件进行预测4.2、使用网上的预训练文件进行预测前言 你敢想象&#xff0c;就是这么一个简单的开源网站&…

南卡电容笔和绿联哪款更好用?性价比高的电容笔推荐

随着生活节奏逐渐加快&#xff0c;从而Apple Pencil的出现引来了不少热度&#xff0c;不过Apple Pencil由于价格昂贵&#xff0c;让不少用户望而止步。然而现在出现了平替电容笔&#xff0c;而且品牌众多&#xff0c;有很多百元左右的平替电容笔&#xff0c;性能和配置都做的不…

适合运动的耳机有哪些?六款相当不错的运动耳机分享

户外运动是现代青年最常见的一种生活方式&#xff0c;无论是在公交地铁上&#xff0c;还是晚上散步的公园里&#xff0c;都能看到很多人在运动&#xff0c;然而他们在做运动的时候都会佩戴上一款运动耳机&#xff0c;音乐能够让我们沉醉于运动中。也越来越多人会问&#xff0c;…

一款可以阻止网络钓鱼诈骗的解决方案?

“你继承了一笔财富。要转账&#xff0c;我需要你的银行账户凭证。” 你是否也遇见过此类的电话诈骗话术。 根据2022年数据泄露调查报告&#xff0c;25%的数据泄露涉及网络钓鱼。 这是怎么发生的&#xff1f;参与网络钓鱼的欺诈者一般都是心理方面的高手。他们知道如何营造紧…

蓄电池电压检测单元 电池监控模块 24路电池电压采样模块电源检测

24路巡检单元的主要功能是对串联蓄电池组的单电池电压进行实时在线巡回检测&#xff0c;并智能分析电池的使用状况&#xff0c;根据用户设置不同的上下限、平均偏差自动判断并输出告警。本电池巡检单元主要应用于发电厂、变电站或其它行业中的直流电源、UPS电源的蓄电池组的电压…

载紫杉醇D-α-生育酚聚乙二醇1000琥珀酸酯/纳米粒包裹紫杉醇的肝素纳米粒

下面整理了载紫杉醇D-α-生育酚聚乙二醇1000琥珀酸酯/纳米粒包裹紫杉醇的肝素纳米粒&#xff0c;一起看&#xff01; 包裹紫杉醇的肝素纳米粒制备方法&#xff1a; 以肝素为原料制备生物素化包裹紫杉醇的肝素纳米粒,动态光散射仪测定其粒径及电位,透射电镜观察其形态,紫外分光…

cuda 编程:矩阵运算讲解

本文主要介绍用CUDA实现矩阵运算(C A x B)的几个基本方法&#xff0c;帮助大家理解矩阵在GPU上面的运算与CPU上的有何异同&#xff0c;通过实践上手CUDA的优化计算&#xff0c;相比基础方法&#xff0c;能提速10倍以上。 本文内容涉及到CUDA矩阵1D运算,2D运算,共享内存,CUBLAS…

808. 分汤 : 挺有意思的 DP 题

题目描述 这是 LeetCode 上的 808. 分汤 &#xff0c;难度为 中等。 Tag : 「数学」、「动态规划」、「线性 DP」 有 A 和 B 两种类型 的汤。一开始每种类型的汤有 n 毫升。有四种分配操作&#xff1a; 提供 100ml 的 汤A 和 0ml 的 汤B 。提供 75ml 的 汤A 和 25ml 的 汤B…