阿里云与华为云边缘 K8S 使用对比总结
想把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、边缘方案共同点
主打基于“K8s+Docker容器”的事实标准 进行构筑的云边方案。 其中Master在云端,Slaver节点在边端。 管理 “边端节点/边端应用”是要收费的。
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容器支持 | OK | OK |
节点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 进阶训练营