KubeEdge架构问题汇总
Q1 :KubeEdge云和边的数据协同有什么优势?
A : K8s的原生架构中, Node (Kubelet) 是通过List-watch机制主动与Master通信。List-watch机制有几个特点:1.事件传输没有ACK类的校验机制,要依赖数据中心稳定的网络保证不丢事件 2. 每次网络断开,Node侧都会从新执行List操作(取回所有数据),要依赖数据中心稳定的网络保证长连接不频繁断开,否则对Master及网络都是很大的损耗。
在边缘场景下,众所周知网络都是很不稳定的,包括丢失数据、连接断开等。针对不稳定的网络,在KubeEdge云边协同的设计中:
我们把List-watch中的事件取出来,加了ACK校验机制,只有边缘收到数据且回复ACK信息,云端才认为发送成功,反之则进行重试。
在网络断开(确认节点离线)后,云端会将待同步数据持久化,等到边缘节点上线,再将缓存的待发送数据逐一下发。
针对未发送的消息实时检查合并去重,避免网络震荡。
KubeEdge的云边协同机制不仅保证了云和边之间数据的可靠传输,也避免了网络不稳定时重新List造成的网络压力。
Q2 :KubeEdge目前是如何解决边缘节点自治能力的?
A : KubeEdge会边缘将收到的应用、设备元数据都进行本地持久化。相比Kubelet在内存中缓存对象的方式,可以有效保证节点离线、故障恢复时的业务自治和快速自愈。
Q3 :边缘节点离线后,依赖数据多次变更,边缘应用和云端数据的最终一致是怎么保证的?
A : KubeEdge目前的应用管理等操作都需要通过K8s master进行,针对边缘节点离线场景主要提供自治的能力,即本地持久化的数据仅用于管理节点上的应用和设备,云边通信恢复时,节点将同步云依据来自CloudCore的最新消息更新本地元数据。这里稍有不同的是边缘设备管理,对设备期望状态的设置需要通过Device CRD中的Desired State来操作(从云到边),而设备实际状态的上报会体现在Reported State中(从边到云),两个方向的数据同步不会冲突。
Q4 :KubeEdge与K3s的区别是什么?
A : 首先是架构选型问题,K3s选择的是在边缘运行整个K8s集群的方案,不具备云边协同的能力;其次K3s虽然对K8s做了轻量化,但整体资源要求仍然较高,无法运行在IOT Hub、工业网关等小型设备中。
KubeEdge针对边缘场景的优化包括:
针对边缘网络不稳定的情况,增加了云边数据协同的可靠性传输、边缘元数据持久化,减少了网络不稳定造成的压力震荡,实现了边缘离线自治的能力,在云边断联、节点故障恢复时保证业务不受影响。
针对边缘资源不足的情况,对Kubelet进行轻量化裁剪,支持在256MB的设备上运行。
针对复杂多样的边缘设备管理,KubeEdge定义了一套通用的设备管理API(K8s CRD)以及设备协议解耦层,用户可以方便地使用KubeEdge进行管理各种边缘设备。
Q5 :中心K8s对边缘节点的管理主要操作有哪些?
A : KubeEdge运行在K8s完整的应用调度、管理能力之上,意味着KubeEdge的云端不负责应用的调度、管理,只是将调度到边缘节点的应用、设备元数据下发到边缘。KubeEdge在云端的核心组件是CloudCore,包含EdgeController、DeviceController、CloudHub三个模块,EdgeController、DeviceController负责将应用、设备元数据下发到边缘,同时将来自边缘的节点状态、应用状态、设备状态刷新到K8s集群中;CloudHub负责直接与边缘通信。
Q6 :新版本边缘节点的service还是仅支持hostPort吗,nodeport是否支持?
A :从KubeEdge 1.1版本开始集成了CRI,意味着用户可以使用CNI插件来配置网络,不再限制于hostport。NodePort是K8s中服务访问的概念,需要通过Kube-proxy来配置,目前在边缘端还不支持。另外KubeEdge提供了EdgeMesh实现边缘应用间的互访。
Q7 :边缘节点的Docker容器镜像是从整个云-边k8s系统统一的镜像仓库拉取的吗?
A :只要边缘端能够访问到的镜像仓库,都能够用来拉取镜像。
Q8 :PPT里提到"KubeEdge 用于将容器化应用程序编排功能扩展到Edge的主机。" 那么,是把云上的应用下沉到edge、还把终端设备上的应用提升到edge呢?
A :KubeEdge作为应用管理平台时,可以在云端统一管控,既可以把应用部署到云端节点,也可以部署到边缘节点。用户可以根据自身需求,将云端的部分业务下沉到边缘。如果需要将终端设备上的应用部署到边缘节点,也可以通过KubeEdge来部署。
Q9 :边缘侧的各个应用是怎么通信的?比如一个做sql过滤的应用和另一个做数据分析的应用是通过hub统一转发的,还是应用间就同步了,亦是通过mqtt等协议?同步异步消息分别怎么实现的?
A :目前KubeEdge中使用EdgeMesh机制来做边缘端应用的互访,不需要通过hub与mqtt转发,在EdgeMesh实现应用互通的前提下,同步异步消息依赖用户应用自身的机制。
Q10 :KubeEdge节点和普通节点都在 kubectl get node 中获取到,这两者有什么区别?
A :没有本质区别,KubeEdge的边缘组件会将Node通过云边协同通道注册到K8s Master,唯一的不同是普通节点由Kubelet直接访问Master完成节点注册,KubeEdge是通过云边协同通道注册,API都是一致的。
Q11:KubeEdge的 modbus协议是用什么设备调试的?
A:目前开发调试中使用modbus slave来调试。
Q12 :KubeEdge的安全层是怎么做的?
A :KubeEdge云边协同使用了安全的WebSocket通道。对于应用间的安全互访要依赖用户自己配置安全证书等。
Q13 :KubeEdge边缘节点能管理GPU设备吗?
A :边缘节点可以通过DevicePlugin来管理GPU设备。
KubeEdge架构问题汇总的更多相关文章
- hadoop生态系统主要架构图汇总
1 hadoop1.0时期架构 2 hadoop2.0时期架构 3 hdfs架构 [Active Namenode]:主 Master(只有一个),管理 HDFS 的名称空间,管理数据块映射信息:配置 ...
- 微服务&spring cloud架构系列汇总
为了方便查找,把微服务&微服务架构之spring cloud架构系列文章按时间正序整理了一下,记录如下: 1. 微服务架构之spring cloud 介绍 2. 微服务架构之spring ...
- Spring Cloud搭建微服务架构----文章汇总
Spring Cloud搭建微服务架构----前言 原文地址:https://my.oschina.net/u/1000241/blog/882929 Spring Cloud搭建微服务架构----使 ...
- 我的前端架构(jquery)汇总
目录 我的前端架构之一--页面作用域 我的前端架构之二--统一扩展Js方法 我的前端架构之三 -- 页面规范 我的前端架构之四 -- UI控件 我的前端架构之五 -- 一些方案实现 判断对象是否是 e ...
- KubeEdge,一个Kubernetes原生边缘计算框架
KubeEdge成为第一个Kubernetes原生边缘计算平台,Edge和云组件现已开源! 开源边缘计算正在经历其业界最具活力的发展阶段.如此多的开源平台,如此多的整合以及如此多的标准化举措!这显示 ...
- KubeEdge v0.2发布,全球首个K8S原生的边缘计算平台开放云端代码
KubeEdge开源背景 KubeEdge在18年11月24日的上海KubeCon上宣布开源,技术圈曾掀起一阵讨论边缘计算的风潮,从此翻开了边缘计算和云计算联动的新篇章. KubeEdge即Kube+ ...
- KubeEdge边缘自治设计原理
这一篇内容主要是KubeEdge中边缘节点组件EdgeCore的原理介绍. KubeEdge架构-EdgeCore 上图中深蓝色的都是kubeedg自己实现的组件,亮蓝色是k8s社区原生组件.这篇主要 ...
- 支持边云协同终身学习特性,KubeEdge子项目Sedna 0.3.0版本发布!
摘要:随着边缘设备数量指数级增长以及设备性能的提升,边云协同机器学习应运而生,以期打通机器学习的最后一公里. 本文分享自华为云社区<支持边云协同终身学习特性,KubeEdge子项目Sedna 0 ...
- 剖析虚幻渲染体系(12)- 移动端专题Part 2(GPU架构和机制)
目录 12.4 移动渲染技术要点 12.4.1 Tile-based (Deferred) Rendering 12.4.2 Hierarchical Tiling 12.4.3 Early-Z 12 ...
- 边缘计算 KubeEdge+EdgeMash
简介 KubeEdge是面向边缘计算场景.专为边云协同设计的业界首个云原生边缘计算框架,在 Kubernetes 原生的容器编排调度能力之上实现了边云之间的应用协同.资源协同.数据协同和设备协同等能力 ...
随机推荐
- Reactor And Gev 详解 通俗易懂
reactor 详解 在类似网关这种海量连接, 很高的并发的场景, 比如有 10W+ 连接, go 开始变得吃力. 因为频繁的 goroutine 调度和 gc 导致程序性能很差. 这个时候我们可以考 ...
- Rust变量用法与特征
变量用法与特征 变量绑定 let a = "hello world" 为何不用赋值而用绑定呢(其实你也可以称之为赋值,但是绑定的含义更清晰准确)?这里就涉及 Rust 最核心的原 ...
- MySQL数据库中配置文件 read_only 参数的有关说明
1.对于MySQL单实例数据库和master库,如果需要设置为只读状态,需要进行如下操作和设置: 将MySQL设置为只读状态的命令(可以登录mysql执行下面命令, 或者在my.cnf配置文件中添加& ...
- k8s日志架构和基本日志
如果一个容器崩溃了.一个Pod被驱逐了.或者一个节点停机了,您通常仍然需要访问您应用程序的日志.为此,您需要一个生命周期与节点.Pod.容器相对独立的存储空间来存储应用程序日志和系统日志. 此时,我们 ...
- 天翼云主机某一IP多次登录失败导致IP被锁无法登录,天翼云主机莫名其妙无法远程登陆
情况说明: 直接使用该IP通过ssh远程连接失败,但是先通过ssh远程连接其他主机上,然后在这个主机上再ssh刚才连接失败的主机,就能登陆上. 说明,root用户不是被锁了, 而是远程登陆IP被锁了 ...
- 设置HTTP请求自动跳转HTTPS
第一种方式,分两种情况: 第一种情况:修改Nginx安装目录/conf/nginx.conf文件 server { listen 80; server_name localhost; #将localh ...
- 使用coverlet统计单元测试的代码覆盖率
单元测试是个好东西, 可以在一定程度上兜底 虽然写单元测试这件事情非常麻烦 但是好的单元测试可以显著提高代码质量, 减少bug, 避免无意中的修改导致其他模块出错 写测试用例的过程中, 靠人力去确保所 ...
- 面向制造企业普适性ERP、MES类产品为什么那么难找?
标准化与个性化之间的矛盾怎么可能通过普适性的ERP.MES系统来解决?为什么难?就跟你找一套适合所有人穿的衣服一样难,事实上这个比找衣服更难!人与人之间高矮胖瘦各不相同.肤色体型各有差异,把同一套衣服 ...
- 虚拟线程 - VirtualThread源码透视
前提 JDK19于2022-09-20发布GA版本,该版本提供了虚拟线程的预览功能.下载JDK19之后翻看了一下有关虚拟线程的一些源码,跟早些时候的Loom项目构建版本基本并没有很大出入,也跟第三方J ...
- .Net WebApi 中的 FromBody FromForm FromQuery FromHeader FromRoute
在日常后端Api开发中,我们跟前端的沟通中,通常需要协商好入参的数据类型,和参数是通过什么方式存在于请求中的,是表单(form).请求体(body).地址栏参数(query).还是说通过请求头(hea ...