陈奇网络工作室

优客德无服务器容器实例立方体的研发实践之路

本文的内容

显示

1.

立方体诞生的背景

2.

技术选择

2.1.

操作过程中容器的选择

2.2.

集装箱管理服务

2.3.

集装箱调度服务

3.

优化和改进

3.1.

容器镜像

3.2.

使用公共云资源

3.3.

集装箱操作环境

3.4.

K8s变换

4.

立方体的未来前景

4.1.

推荐阅读

老刘的博客对UCloud打造的无服务器容器实例Cube做了很多介绍,比如文章《UCloud优刻得Serverless容器服务产品Cube免费公测》,《还在用云主机建站?容器Cube三步搭建WordPress站点》,《优刻得docker容器化产品Cube快速上手使用教程》,《优刻得推出Serverless容器实例Cube快杰版,计算性能提升16%》。魔方产品团队经历过怎样的研发过程?在本文中,老刘带你看看UCloud的无服务器容器实例Cube的研发实践。

立方体诞生的背景

随着云原生技术的普及和落地,容器技术越来越多地应用于企业的生产环境中。Kubernetes作为容器安排的事实上的标准,在企业服务中被广泛使用。2018年,UCloud容器团队推出了Kubernetes产品UK8S,该产品基于UCloud公有云环境,无缝集成了UCloud IaaS层的计算、网络和存储服务,使客户能够快速获取可用于生产的Kubernetes集群,并具备灵活控制集群的能力。

但是,在推广UK8S产品和接触客户的过程中,容器团队也收到了一些用户的反馈:

维护Kubernetes集群增加了额外的负担;用户不仅需要后端资源来管理应用,也无法实现以应用为中心的业务管理。

Kubernetes系统复杂,学习曲线陡峭,要求客户团队有一定的技术储备;对于使用过容器但没有尝试过Kubernetes的客户也是如此。他们一方面需要了解Kubernetes的技术体系,另一方面需要修改应用架构以适应Kubernetes。

希望有一个现成的容器产品,可以直接通过容器拉起应用,不需要等待虚拟机准备好再部署应用,从而缩短应用准备就绪的等待时间。

为了解决上述用户问题,容器团队开发了新的无服务器容器产品Cube,目前处于公测阶段。除了降低用户使用容器的门槛,该产品还具有以下特点:

1.免运维:没有维护资源的负担,也不需要在意运营地点。应用程序是中心,容器图像是应用程序打包标准。

2.按需付费:根据应用程序实际使用的资源付费。

3.自动扩容收缩:基于海量资源,提供API,可以按需拉起关闭应用,自动调度资源。

4.高可用性:产品本身具有高可用性,并提供应用程序自我修复能力。

技术选择

在实现Cube产品功能的过程中,容器团队需要解决几个技术问题:

操作过程中容器的选择

公有云产品必须考虑多租户隔离。与UK8S产品基于云主机的隔离不同,Cube产品直接在主机物理机上运行容器。标准docker实现的容器无法实现同一台主机上不同用户和不同容器之间的强隔离,因此Cube产品需要一个具有虚拟机强隔离和容器快速启动特性的容器运行时解决方案。

容器团队注意到AWS开放了轻量级虚拟机鞭炮,具有资源占用少、启动速度快、易维护等诸多优点,并且已经在实际生产环境中使用,非常符合Cube业务场景,所以最终采用了基于鞭炮轻量级虚拟机的容器运行时方案。从下面两张图可以看出,通过对云计算场景的特殊简化和优化,与目前主流的虚拟化组件qemu相比,鞭炮在启动速度和内存消耗上优势明显。

VMM启动时间和内存使用情况比较

集装箱管理服务

还有很多支持虚拟机容器运行时的容器管理服务开源解决方案,比如containerd/cri-o,kata-container a

Kubernetes已经成为集装箱调度事实上的标准,功能丰富,可扩展性好。因此,容器团队采用Kubernetes作为基本调度框架,并根据产品需求进行了相关修改。最终的基本服务架构如下:

优化和改进

虽然采用开源解决方案可以加快开发进度,但要满足产品需求仍有一些问题需要解决,主要包括以下几个方面:

容器镜像

在标准容器映像实现中,映像通过分层结构存储在主机上。创建容器时,容器运行时会在镜像层之上创建一个可写层,并将其装载到主机上,以供容器实例使用。但是,多维数据集容器并不直接在主机上运行,也不需要在主机上挂载容器根目录。因此,容器团队修改了cri-o中镜像层的相关实现,将容器可写层直接挂载到轻量级虚拟机中作为块设备,而不是主机,减少了主机对立方体容器的干扰。

另外,为了解决新镜像拉取慢导致的容器实例启动慢的问题,容器团队提出了镜像远程挂载的解决方案。容器映像以块设备的形式存储在缓存集群中。当需要在这个镜像上生成容器实例时,首先将容器镜像以远程挂载的形式挂载到主机上,然后在主机上创建一个可写层,在容器运行时生成容器实例。同时,后台会将远程镜像同步到本地主机,进一步加快读取速度,降低集群风险。上述方法可以将主机上第一次获取映像的时间缩短到3s以内,并且有进一步优化的空间。目前这个功能是以图片缓存产品的形式提供给用户的,并且正在逐渐融入到普通的图片拉取过程中。

使用公共云资源

网络方面,Cube容器的网络模型与云主机基本相同。相关网络功能以cni插件的形式实现后,Cube容器就可以很好的连接到公有云vpc网络。

在存储方面,Cube container目前支持两种类型的存储:可以多点读写的网络文件系统nfs和只能单点读写的云硬盘udisk。在文件存储功能方面,Cube产品实现了轻量级虚拟机自动挂载nfs的功能。用户只需在配置文件中指定挂载点和挂载参数,就可以直接使用容器中的网络文件系统,并且可以在vpc网络中同时支持用户自建的nfs和UCloud公有云产品ufs。在块设备功能上,容器团队扩展了鞭炮块设备的实现。通过增加对vhost-user协议的支持,Cube轻量级虚拟机可以直接连接spdk服务,从而实现高性能rssd云硬盘的挂载和使用。

集装箱操作环境

为了减少额外资源的消耗,容器团队在容器管理服务和容器运行时方面做了大量的优化工作。

容器团队修改了cri-o的架构来管理容器组,并采用了单个pod对应于单个shim的模型。通过用一个shim管理pod中的所有容器,可以显著减少shim的资源消耗,并且可以简化容器管理。对于轻量级虚拟机,容器团队也对kernel/rootfs/init进程进行了全面的精简和优化,只保留最基本的功能,以加快启动速度,减少安全攻击面,降低资源消耗。此外,容器团队还在轻量级虚拟机中构建了infracontainer的实现,Cube可以作为pod运行,而不必挂载额外的infra container。

K8s变换

作为一个通用的集装箱调度框架,Kubernetes可以满足大多数集装箱管理的需要。但对于Cube的具体使用场景,容器团队还是需要对k8s组件做一些修改。在控制面上,容器团队采用了自定义调度器,可以更好地满足多租户场景下任务优先级、调度速度和资源管理的需求。在主机节点上,针对Cube容器运行时的特点,容器团队精简了一些不需要kubelet实现的功能,

完成上述开发改造后,魔方产品成功上线,取得了良好的效果。后续的Cube产品会继续沿着帮助用户提高效率、降低开支、简化维护、节约成本的思路迭代更新。在容器性能方面,容器团队将继续优化轻量级虚拟机的IO路径,减少虚拟化和管理组件的性能损失,确保用户容器实例的稳定高效运行。在服务管理方面,将在Cube的产品层面引入多种容器管理控制器,实现Cube实例直接访问Kubernetes集群的能力,为用户提供多层次的资源调度方式,方便用户根据实际需求进行管理和维护。

转载自UCloud科技

西部数码代理(chenqinet.cn)是工信部批准的正规老牌云服务商,拥有ISP、云牌照、IDC、CDN全业务资质。自成立以来,二十多年来一直专注于域名注册,虚拟主机云服务器,企业邮箱,企业网站建立等互联网基础服务!

公司开发的云计算平台以便捷、高效、高性价比、意想不到的售后优势占领市场,跻身国内前三的接入服务商,为国内超过50万家网站提供高速稳定的托管服务!先后荣获中国高新技术企业、中国优秀云计算服务商、中国十大IDC企业、中国最受欢迎云服务商等称号!

目前西部数码代理高性能云服务器在售,最低仅售48元!

http://zhuji.chenqinet.cn/cloudhost/

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3