深度解析KubeEdge 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安装:https://edgemesh.netlify.app/zh/guide/#helm-安装
手动安装:https://edgemesh.netlify.app/zh/guide/
▍2.3 运行时添加新中继节点如果您在利用EdgeMesh高可用特性时,想要在集群当中添加新的中继节点,可以通过修正 edgemesh-agent-cfg 当中的 relayNodes 参数来达到目的,以下为详细修正配置的办法:
kubectl -n kubeedge edit configmap edgemesh-agent-cfg# 进入config 文件当中进行编辑apiVersion: v1data: 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 nodesNAME STATUS ROLES AGE VERSIONk8s-master Ready control-plane,master 249d v1.21.8k8s-node1 Ready <none> 249d v1.21.8ke-edge1 Ready agent,edge 234d v1.19.3-kubeedge-v1.8.2ke-edge2 Ready agent,edge 5d v1.19.3-kubeedge-v1.8.2R2 Ready agent,edge 1d v1.19.3-kubeedge-v1.8.2 <------ 新节点# 查看中继节点的 edgemesh-agent 是否正常运行kubectl get all -n kubeedge -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESpod/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.ioGithub地址: https://github.com/kubeedge/kubeedgeSlack地址: https://kubeedge.slack.com邮件列表:https://groups.google.com/forum/#!forum/kubeedge每周社区例会: https://zoom.us/j/4167237304Twitter: https://twitter.com/KubeEdge文档地址: https://docs.kubeedge.io/en/latest/
点击下方,第一韶光理解华为云新鲜技能~
华为云博客_大数据博客_AI博客_云打算博客_开拓者中央-华为云
本文系作者个人观点,不代表本站立场,转载请注明出处!