边缘计算平台,旨在将边缘端靠近数据源的计算单元纳入到中心云,实现集中管理,将云服务部署其上,及时响应终端请求。然而,成千上万的边缘节点散布于各地,例如银行网点、车载节点、加油站等基于一些边缘设备管理场景,服务器分散在不同城市,无法统一管理,为了优化集群部署以及统一管理,特探索边缘计算场景方案。
边缘计算框架在 Kubernetes 系统里,需要解决下面的问题:
KubeEdge是首个基于Kubernetes扩展的,提供云边协同能力的开放式智能边缘平台,也是CNCF在智能边缘领域的首个正式项目。KubeEdge重点要解决的问题是:
KubeEdge的架构如下所示:
KubeEdge架构上清晰地分为三层,分别是:云端、边缘和设备层。
KubeEdge的云端进程包含以下2个组件:
Kubernetes maser运行在云端,用户可以直接通过kubectl命令行在云端管理边缘节点、设备和应用,使用习惯与Kubernetes原生的完全一致,无需重新适应。
KubeEdge的边缘进程包含以下5个组件:
KubeEdge 边云网络访问依赖EdgeMesh:
云端是标准的Kubernetes集群,可以使用任意CNI网络插件,比如Flannel、Calico;可以部署任意Kubernetes原生组件,比如Kubelet、KubeProxy;同时云端部署KubeEdge云上组件CloudCore,边缘节点上运行KubeEdge边缘组件EdgeCore,完成边缘节点向云上集群的注册。
EdgeMesh包含两个组件:EdgeMesh-Server和每个节点上的EdgeMesh-Agent。
EdgeMesh-Server工作原理:
EdgeMesh-Agent工作原理:
根据官方文档《Deploying using Keadm | KubeEdge》进行部署测试
类型 | ip | 系统版本 | 架构 | 集群版本 | 端口开放 |
---|---|---|---|---|---|
云端 | 47.108.201.47 | Ubuntu 18.04.5 LTS | amd64 | k8s-v1.19.8 + kubeedge-v1.8.1 | 开放端口 10000-10005 |
边缘 | 172.31.0.153 | Ubuntu 18.04.5 LTS | arm64 | kubeedge-v1.8.1 |
实践结论:
根据官方文档部署,边缘节点可以正常加入集群,可以正常部署服务至边缘节点,部署edgemesh测试服务访问,边缘可以通过svc访问云端服务,但是云端无法通过svc访问边缘,边缘节点服务之间无法通过svc进行访问。
SuperEdge是腾讯推出的Kubernetes-native边缘计算管理框架。相比openyurt以及kubeedge,SuperEdge除了具备Kubernetes零侵入以及边缘自治特性,还支持独有的分布式健康检查以及边缘服务访问控制等高级特性,极大地消减了云边网络不稳定对服务的影响。
组件功能总结如下:
云端除了边缘集群部署的原生Kubernetes master组件(cloud-kube-APIServer,cloud-kube-controller以及cloud-kube-scheduler)外,主要管控组件还包括:
边端除了原生Kubernetes worker节点需要部署的kubelet,kube-proxy外,还添加了如下边缘计算组件:
根据官方文档《superedge/README_CN.md at main · superedge/superedge (github.com)》部署测试
类型 | ip | 系统版本 | 架构 | 集群版本 | 端口开放 |
---|---|---|---|---|---|
云端 | 47.108.201.47 | Ubuntu 18.04.5 LTS | amd64 | k8s-v1.19.8 + kubeedge-v1.8.1 | 开放端口 10000-10005 |
边缘 | 172.31.0.153 | Ubuntu 18.04.5 LTS | arm64 | kubeedge-v1.8.1 |
实践结论:
根据官方文档部署,边缘节点可以正常加入集群,但是无法部署服务至边缘节点,提了issue未回复,其他测试未再进行
OpenYurt的架构设计比较简洁,采用的是无侵入式对Kubernetes进行增强。在云端(K8s Master)上增加Yurt Controller Manager, Yurt App Manager以及Tunnel Server组件。而在边缘端(K8s Worker)上增加了YurtHub和Tunnel Agent组件。从架构上看主要增加了如下能力来适配边缘场景:
只根据官方文档了解其架构,未进行部署测试
K3S是CNCF官方认证的Kubernetes发行版,开源时间较KubeEdge稍晚。K3S专为在资源有限的环境中运行Kubernetes的研发和运维人员设计,目的是为了在x86、ARM64和ARMv7D架构的边缘节点上运行小型的Kubernetes集群。K3S的整体架构如下所示:
事实上,K3S就是基于一个特定版本Kubernetes(例如:1.13)直接做了代码修改。K3S分Server和Agent,Server就是Kubernetes管理面组件 + SQLite和Tunnel Proxy,Agent即Kubernetes的数据面 + Tunnel Proxy。
为了减少运行Kubernetes所需的资源,K3S对原生Kubernetes代码做了以下几个方面的修改:
官方文档:https://docs.rancher.cn/docs/k3s/installation/install-options/_index
k3s server—192.168.15.252
k3s agent—192.168.15.251
注意点:server一定要有免密登录agent权限!!!
K3S部署Kubernetes集群,创建集群的https证书,Helm部署rancher,通过rancher的UI界面手动导入Kubernetes集群,使用Kubernetes集群。
安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
#写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get -y update
#安装Docker-CE
sudo apt-get -y install docker-ce
在rancher中文文档中推荐了一种更轻量的Kubernetes集群搭建方式:K3S,安装过程非常简单,只需要服务器能够访问互联网,执行相应的命令就可以了
k3s server主机执行命令,执行完成后获取master主机的K3S_TOKEN用于agent节点安装(默认路径:/var/lib/rancher/k3s/server/node-token)
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--docker" sh -s - server
k3s agent主机执行命令,加入K3S集群
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--docker" K3S_URL=https://192.168.15.252:6443 K3S_TOKEN=K10bb35019b1669197e06f97b6c14bb3b3c7c7076cd20afe1f550d6793d02b9eed8::server:9599c8b3ffbbd38b7721207183cd6a62 sh -
http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh是国内的加速地址,可以正常执行。
执行完毕后,在server服务器上验证是否安装K3S集群成功。
img
上述四种开源方案,其中KubeEdge、SuperEdge、OpenYurt,遵循如下部署模型:
是一种完全去中心化的部署模式,管理面部署在云端,边缘节点无需太多资源就能运行Kubernetes的agent,云边通过消息协同。从Kubernetes的角度看,边缘节点 + 云端才是一个完整的Kubernetes集群。这种部署模型能够同时满足“设备边缘”和“基础设施边缘”场景的部署要求。
所以先基于这三种方案对比如下:
项目 | 华为KubeEdge | 阿里OpenYurt | 腾讯SuperEdge |
---|---|---|---|
是否CNCF项目 | 是(孵化项目) | 是(沙箱项目) | 否 |
开源时间 | 2018.11 | 2020.5 | 2020.12 |
侵入式修改Kubernetes | 是 | 否 | 否 |
和Kubernetes无缝转换 | 无 | 有 | 未知 |
边缘自治能力 | 有(无边缘健康检测能力) | 有(无边缘健康检测能力) | 有(安全及流量消耗待优化) |
边缘单元化 | 不支持 | 支持 | 支持(只支持Deployment) |
是否轻量化 | 是(节点维度待确认) | 否 | 否 |
原生运维监控能力 | 部分支持 | 全量支持 | 全量支持(证书管理及连接管理待优化) |
云原生生态兼容 | 部分兼容 | 完整兼容 | 完整兼容 |
系统稳定性挑战 | 大(接入设备数量过多) | 大(大规模节点并且云边长时间断网恢复) | 大(大规模节点并且云边长时间断网恢复) |
设备管理能力 | 有(有管控流量和业务流量耦合问题) | 无 | 无 |
初步结论:
对比这三种方案,KubeEdge和OpenYurt/SuperEdge的架构设计差异比较大,相比而言OpenYurt/SuperEdge的架构设计更优雅一些。而OpenYurt和SuperEdge架构设计相似,SuperEdge的开源时间晚于OpenYurt,项目成熟度稍差。但是根据业界已经落地的生产方案,KubeEdge使用度及成熟度较高,同时OpenYurt/SuperEdge 开源时间较晚,还未进入CNCF孵化项目,同时结合实践过程中的测试情况,考虑KubeEdge。
接下来,再针对KubeEdge和K3s进行对比:
K3S的部署模型如下所示:
K3S会在边缘运行完整的Kubernetes集群,这意味着K3S并不是一个去中心化的部署模型,每个边缘都需要额外部署Kubernetes管理面,因此该部署模型只适合资源充足的“基础设施边缘”场景,并不适用于资源较少的“设备边缘”的场景;同时集群之间网络需要打通;为了管理边缘Kubernetes集群还需要在上面叠加一层多集群管理组件。
相关对比如下:
项目 | KubeEdge | K3s |
---|---|---|
是否CNCF项目 | 是 | 是 |
开源时间 | 2018.11 | 2019.2 |
架构 | 云管边 | 边缘托管 |
边缘自治能力 | 支持 | 暂无 |
云边协同 | 支持 | 依赖多集群管理 |
原生运维监控能力 | 部分支持 | 支持 |
与原生K8s关系 | k8s+addons | 裁剪k8s |
iot设备管理能力 | 支持 | octopus |
所以综合对比来看,建议选用k3s。