阿里云与华为云边缘 K8S 使用对比总结

k8s技术圈

共 4501字,需浏览 10分钟

 · 2021-03-15

想把Docker容器应用推到边缘节点跑起来,所以尝试使用了一下两大公有云边缘方案:(1)华为云的IEF服务,(2)阿里云的ACK@Edge服务。只是体验的总结,做个记录,无孰优孰劣之分,仅技术交流。如果有什么说的不对,也别迁怒。

本人的一台小电脑,想作为边缘节点,然后将Docker镜像,从云端推至边缘节点跑起来。

节点信息:Jetson Nano,4U4G,ARM64位,Ubuntu18.04系统,带一个英伟达的128核Maxwell架构GPU。可以正常执行docker,nvidia-docker,cuda程序等功能。

这里尝试使用并总结了一下两大公有云边缘方案:(1)华为云的IEF服务,(2)阿里云的ACK@Edge服务。总结的不对的地方,可以知会我及时修正。

1、边缘方案共同点

  1. 主打基于“K8s+Docker容器”的事实标准 进行构筑的云边方案。
  2. 其中Master在云端,Slaver节点在边端。
  3. 管理 “边端节点/边端应用”是要收费的。

2、阿里云ACK@Edge

产品介绍:https://cn.aliyun.com/solution/cloudnative/edgecomputing

主打原生支持kubernetes与docker生态的云边方案

2.1 集群使用编排服务(ROS)进行自动化

边缘集群是使用阿里云资源编排服务(ROS)进行部署的,虽说这样会使得容器团队在实现K8s集群自动化时,定制流程不太方便;但这也是有好处:可以使用真实的业务述求,去改进另一个云服务(从整个云来说是正收益的:再难吃的狗粮,自己吃)。

华为云也有编排服务(AOS),但是华为云的容器集群(CCE),并不使用编排服务创建复杂的集群。也许这对AOS来说,永远是个矛盾的话题:我(AOS)是做自动化的,但是你(CCE)说你的自动化场景我支撑不了,可是我(AOS)又需要你的场景来完善我的自动化能力。。。

2.2  边端节点,直接注册到Master

有些集群添加节点是2步:先到master登记,然后slaver节点连到master进行注册。(如SGE,或者 华为云边缘服务IEF)

有些集群则只需要1步:slaver节点主动连接master进行注册。(如K8s,或者阿里云的这个边缘服务)

1)获取注册节点的方法:

个人感觉,1步操作,更简单。节点主动注册至Master,也比较符合平常理解。

当然阿里云边缘这个配置页面也有不足:比如这里的配置项,每一个配置项的作用未做说明(没说明什么情况下什么插件可以取消,因为我本意是想尽量少的安装东西),担心失败又不得不全部选择。如果这里可以对参数做一层UI的封装渲染,用户体验会更好。

事实上,这里我就趟了几次坑,在下一章节描述。

2.3      安装边缘节点,稍有不顺

安装步骤,非常简单,一条安装指令搞定。安装过程中会联网下载安装包。

但是安装的鲁棒性略弱,直接描述躺过的坑。

1)   选择K8s集群的Kube-proxy实现类型,不要默认的ipvs,而应选择 iptables。原因是我的小节点 内核没有 ip_vs_wrr 模块,会导致安装失败。

2)安装配置阶段,我把kube-proxy和flannel这2插件删了,只保留了coredns插件时,最终安装会失败。原因是coredns插件会依赖前面2个插件(这里可以考虑提前检查并提示用户)。

3)manageRuntime选项,是指“是否重新安装Docker”的意思。默认配置,会在安装过程将我节点上好用的Docker给卸载了,但是新的Docker又是安装失败。

4)重新配置,这次选择不重装Docker。结果还是失败:Unsupport cgroup driver cgroupfs…

经询问是 cgroup 会有内存泄漏的问题,所以cgroupdriver需要选择 systemd 类型。

这里重新配置Docker的runtime配置为使用 systemd,具体见:https://help.aliyun.com/knowledge_detail/123771.html?spm=5176.11065259.1996646101.searchclickresult.f1d02d4c5FAW9m

最终节点注册至云端:

这里也要提一下,卸载功能,还是非常方便的。一条 reset命令,节点就恢复原样了。

2.4   应用管理简单,完全兼容K8s

创建应用,就是普通的K8s参数,对于懂K8s的人来说无难度。

也能通过 kubectl 查询容器信息,好评。

2.5 CloudShell太好用了吧

一般云服务,想了解集群的情况,除了使用Console,还会有cli命令行。

ACK@Edge使用原生的 Kubectl 作为其 cli。并且还提供了一个叫做 CloudShell 的控制台,直接可以使用,直呼太好用了吧!

点击上面的按钮,就直接可以使用 k8s 的客户端cli,一个字:方便。

都不用下载安装(因为不同的K8s版本,需要下载不同版本的cli,所以这里不用下载就能用,体验不错)

2.6 远程执行 exec -it,支持

可以直接从云端,登录边缘容器查询or调试,挺好用的。

2.7  费用按照节点大小收

管理费用,按照边缘节点大小进行收费:

基本上,我这个4核的ARM节点,一个月:4核 * 0.2元 * 30天 = 24元。感觉还行~

不过,这里也需要指出,ACK@Edge在云端必须要有一台额外ECS,这也会消耗一笔费用(按4U8G算,是1.4/小时)。同时,Pro版集群管理费用0.64 /小时(标准版免费),也是一笔开销。

3、华为云IEF

产品介绍:https://www.huaweicloud.com/product/ief.html

也是主打原生支持kubernetes与docker生态的云边方案

3.1 边缘集群不需提前创建,随时可用

因为集群是逻辑的,所以并不需要提前创建,也就省略了一个大步骤。

至少拥有边缘集群这件事上,华为云不需要任何等待。阿里云的 ACK@edge创建一个边缘集群,需要等好久~

有利有弊吧,如果华为IEF,也可以提供 kubectl 或者其他cli的话,那么显然不需要创建集群Master,更方便实惠。(说明云服务实现逻辑多租的能力更强)。

3.2 边端节点,先登记,再注册

IEF属于2步注册节点门派,新增节点需要2步:

1)云端Master先登记。

然后2)边端节点,进行实际的连接注册。

3.3 安装、卸载,挺方便

按照下载的2个文件,以及提供的命令,进行安装操作。过程中需要联网下载安装包,整体比较顺利。当节点上的agent启动&注册至云端时,云端的节点状态就变为OK。

遇到的问题,主要就是一开始选了GPU卡,导致节点安装失败。然后重新安装会一直失败,原因是节点的加解密的物料,没有清理干净。需要手动删除所有残留。

当然,卸载也非常方便,一条uninstall命令就可以干净地还原节点,这一点必须好评点赞。

3.4 英伟达GPU也有级别

可怜我的边缘节点,带的英伟达GPU属于是最低端的GPU(Jetson Nano平台,带128核的Maxwell架构的GPU),不过它也是可以执行cuda,nvidia-docker等基本功能的,基本属于麻雀虽小五脏俱全那种。按理来说,Docker功能都正常,应该支持才对。

不过在IEF里面,这种GPU是不支持的(至少在登记的时候)。嗯,它要求边缘节点带T4,P4这种比较高级的英伟达GPU。额,IOT边缘节点表示要不起。

所以在登记边缘节点的时候,只能选择为不带GPU的节点。

3.5 应用管理简单方便

基本上,应用启动、管理等界面,与CCE服务(华为托管版K8s)的Deployment一致,比较好理解。

3.6 远程执行 exec -it ?不支持

K8s很牛逼的一个功能,就是使用 exec -it 直接从Master登录到任意节点的App容器里面,查看&执行调试功能。

不过IEF暂时未提供该功能,想使用exec -it,需要自己登录到边缘节点上面执行Docker命令。目前Master云端这边是不支持的。相对而言,这一点不是很方便,毕竟边缘节点在后期并不一定容易登录(比如它跑在某些奇怪的边缘)。

当然,如果能从云端Master远程连接节点进行操作,那也还是方便的。不过这个也还暂不支持。目前想操作App,只能自己主动连到边缘节点。

另外提一点:IEF目前不兼容 kubectl 客户端,也未提供自己的 cli 操作工具。

3.7 费用按照App数量收

收费模式是按照App数量来算的,如下:

按照我4核的节点,上面跑4个容器好了。

一个月:4App * 1.56元 * 24H * 30天 = 4492元。普通开发者直呼要不起~

(虽然有套餐包可以买,不过算下来一个容器基本 1000元/月 的价格)

3.8 其他

IEF提供了丰富的消息管理能力,比如MQTT,EventBus什么的。不过因为没有需求用到这些功能,所以并未尝试使用。

另外,还提供了边缘函数服务,同样原因未使用。

4、对比总结

仅对操作过的特性做个对比表格

(不是完整能力的对比,所以闻过则喜,闻过则喜,闻过则喜)

对比项阿里云 ACK@Edge华为云 IEF
收费维度节点大小App数量
4U4G节点,1个月费用24元 /节点1123元 /App
管理集群费用0元 /集群0元 /集群
Docker容器支持OKOK
节点Agent资源消耗较大(标准kubelet)较小(定制版kubelet)
GPU卡支持部分部分
兼容Kubernetes的API
提供kubectl/命令行
远程登录容器调试
边缘自治能力
消息管理(如MQTT)
端设备管理



总结:

  • 如果管理的边缘节点较多,那么按照节点数量进行收费会更划算。
  • 如果集群管理App容器较多(2个以上),感觉还是按照节点数量收费更划算。
  • 如果边缘节点资源真的非常有限,那么安装定制过的agent,更省资源。
  • 如果需要端侧设备等更精细粒度管理,可以选择适合自己的款式。
  • 判断自己是否需要Kubernetes标准API能力,选择合适的款式。

就我个人使用场景来说,系统实现是否侵入的修改K8s并不关心,但兼容K8s标准API,则是个强需求。原因是:我已有的系统,调用K8s的API启动容器功能已经写好了。那么当场景拓展为要投任务到边缘节点,至少不用重新开发调用API。


本文为作者原创投稿文章,原文地址: https://bbs.huaweicloud.com/blogs/246358


K8S 进阶训练营


 点击屏末  | 即刻学习
浏览 122
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报