【华为云技术分享】iSulad轻量化容器实践解析
容器应用带来的困扰
容器应用在2019年迎来新的一轮浪潮,全球整体容器市场规模以高达30%的速度高歌猛进,大多数企业开始全面拥抱容器化,容器的规模、密度愈加扩大。
根据Sysdig 2019年容器使用报告统计,在企业内部容器规模方面,9%的企业用户容器规模已经达到5000以上;在容器密度方面,与2018年相比,每台主机中的容器密度提高了100%,从15个增加到了30个,其中最大节点密度已经达到250个。
- 本统计数据来自sysdig-2019-container-usage-report
在这样的应用规模下,也许大家有类似的经历:
- 当部署高密度容器节点或资源敏感环境时,容器的基础设施资源占用超乎了想象;
- 当大规模应用拉起或突发流量时,原本觉得够用的并发速度却成为了瓶颈;
面对这两个问题,是否有什么解决方案么?本文将和大家一起探讨一下解决这两个问题的一些“心路历程”。
重新造个“轮子”?!
上述两个问题在大规模容器化应用的过程中不断出现,并且随着IoT、边缘计算产业的兴起变得愈发紧迫:边缘节点资源敏感,留给容器基础设施的资源屈指可数,一个更轻量、更快速的容器引擎呼之欲出。
接下来我们想分享一下应用过程中的一些尝试:
首先考虑“能否对开源容器引擎软件进行轻量化改造”,沿着这个思路,我们尝试过对Docker容器引擎进行了裁剪和精简化,例如去除不需要的功能、组件结构优化等,甚至对Golang本身编译进行优化,但是效果不甚理想。因为我们的使用范围并不只是服务器等通用场景,我们的容器甚至会运行在端侧的嵌入式设备上,单单裁剪容器引擎其实也并不能完全满足我们的要求。
另外,由于覆盖云、IoT、边缘计算等多个场景,我们的裁剪和轻量化并不能通用适配所有场景,因此需要维护多个容器引擎版本,这对我们的升级和维护造成了不少麻烦。
这时候,一个大胆的想法涌入了我们的脑海,是不是可以重新造个“轮子”!对于软件工程师来说,没有什么是比重新造个“轮子”更棒了!
对, 那我们就重新造一个“大一统”的容器引擎!
千呼万唤,iSulad来了
2017年,iSula容器团队开始了重新开发一个容器引擎的计划,并在2018年开始在华为内部分产品进行替代。
2019年,我们针对CRI接口进行了一次大范围的重构和补全,并最终决定将它与openEuler操作系统一并开源出来。
现在的iSulad项目的目标是成为通用的端、边、云平台一体的容器引擎,可提供统一的架构设计来满足云、IoT、边缘计算等多个场景的应用。
最后,我们的小蚂蚁iSulad终于出生了!
看到这里,同学们可能会有点疑惑,iSulad到底是啥呢?
iSula 在居住中南美洲亚马逊丛林的巴西原住民眼里,它是一种非常强大的蚂蚁,学术上称为“子弹蚁”,因为被它咬一口,犹如被子弹打到那般疼痛,它是世界上最强大的昆虫之一。
iSula为全量的容器软件栈,包括引擎、网络、存储、工具集与容器OS;iSulad 作为其中轻量化的容器引擎,可以为多种场景提供最灵活、最稳定、最安全的底层支撑,与子弹蚂蚁"小个头、大能量"的形象不谋而合。
iSulad的特点:
- 轻
- iSulad的第一个使用场景是在端侧设备上,你很难想象在一个智能摄像头上会使用容器来达到快速、简单切换算法应用部署的功能,在那样严苛的资源要求环境下,iSulad (Light Mode)本身占用资源极低(<15M),并结合特殊的轻量化镜像,达成极致的资源占用的效果。
- 当然,在通用场景下,iSulad也有着不错的轻量化表现。iSulad将端侧的优秀实践继承到通用服务器场景,利用轻量化的lxc运行时以及极其轻量的monitor进程,简化了整个调用链路
- 快
- 随着Serverless的快速兴起,Serverless Container也成为云计算的一个重要的基础设施。为了满足Serverless Container的诉求,iSulad进行了一系列的尝试和努力:
- )iSulad采用C/C++语言实现,具备运行速度快、底噪低等特性,且LXC运行时优秀的并发设计也为iSulad并发性能提供了基石;
- )架构设计上,除了启动容器部分需要通过fork/exec的方式,其他部分均使用调用函数库的方式加快执行速度;通过将镜像和rootfs部分独立为服务,以及优化镜像模块元数据的隔离性,实现了不同镜像和rootfs之间的操作完全隔离。
- 易
- 根据Sysdig的统计,当前79%的用户仍在使用Docker作为其主力容器引擎
- sysdig-2019-container-usage-report
- 应用的迁移一直是一个很令人头疼的问题,iSulad为了使开发者迁移方便,正在筹备开发一系列迁移工具,帮助开发者将自己的应用平滑迁移到iSulad上来。
- 更激动的是,iSulad很快就会支持热迁移啦,那时候就能更便捷的迁移开发者的应用了。
- 灵
- iSulad针对不同的使用场景提供不同的模式供大家组合切换,开发者可以根据自己的使用需要灵活配置切换注重性能的performance模式和注重资源占用的light模式。
- iSulad支持多种不同的容器形态,iSulad内置支持系统容器、安全容器和普通容器以及轻量化容器支持。
iSulad应用实测
经过上文的介绍,是不是想看看iSulad的实际效果呢?
- 在内存资源占用方面,100容器启动情况下,iSulad比Docker所占用的内存资源消耗下降68%。
- 在并发启动速度方面,100容器并发情况下,iSulad比Docker要快上35%:
更多信息
想要进一步了解iSulad项目并参与iSulad项目吗?
欢迎来我们的社区玩儿哦~
openEuler开源社区:https://openeuler.org
iSulad项目源码:https://gitee.com/openeuler/iSulad