UCloud优刻得Serverless容器实例Cube的研发实践之路

作者:发布时间:2020-08-28 08:36

Cube诞生布景

跟着云原生技能的推行及落地,容器技能在企业出产环境中的运用比重越来越大。Kubernetes作为容器编列的事实规范,在企业服务中被很多选用。UCloud优刻得容器团队在2018年推出了Kubernetes产品UK8S, 这款产品依据UCloud优刻得公有云环境完成,无缝集成了UCloud IaaS层核算、网络及存储的服务,使客户能够快速获取到出产可用的Kubernetes集群,并具有灵敏操控集群的才能。

但在UK8S产品推行及接入客户过程中,UCloud优刻得容器团队也连续收到一些用户反应的问题:

>保护Kubernetes集群增加了额定的担负;用户除了管运用还需求后端资源,并未能完成以运用为中心的事务办理。

>Kubernetes体系较为杂乱,学习曲线比较峻峭,需求客户团队有必定技能储备;关于现已运用了容器但没有测验Kubernetes的客户也是如此,一方面需求了解Kubernetes的技能体系,另一方面需求修正运用架构适配Kubernetes。

>期望能有一款即开即用的容器产品,经过容器直接拉起运用,不需求等候虚拟机安排妥当再布置运用,缩短运用安排妥当等候时刻。

为处理上述用户问题,UCloud优刻得容器团队开发了一款新的serverless容器产品Cube,现在正处在公测阶段。除了下降用户运用容器的门槛,该产品还具有以下特性:

1. 免运维:没有保护资源担负,不需求关怀运转方位,以运用为中心,以容器镜像为运用打包规范。

2. 按需付费:依照运用实践运用资源付费。

3. 主动扩缩容:依据海量资源,供给API,可按需拉起和封闭运用,主动调度资源。

4. 高可用:产品本身高可用,一起供给运用自愈才能。

技能选型

在完成Cube产品特性的过程中,容器团队需求处理几个技能问题:

1. 容器运转时的选型

公有云产品必定要考虑多租户阻隔问题。不同于UK8S产品以云主机为根底构建的阻隔性,Cube产品则直接在宿主物理机上运转容器。规范docker完成的容器并不能完成同台宿主机上不同用户不同容器之间的强阻隔,因而Cube产品需求一款一起具有虚拟机强阻隔性和容器快速发动特色的容器运转时计划。

UCloud优刻得容器团队注意到AWS开源了轻量级虚拟机firecracker,具有资源占用少、发动速度快、易于保护等许多长处,并已用于实践出产环境,十分契合Cube事务场景,因而终究选用了以firecracker轻量级虚拟机为根底的容器运转时计划。从下面两张图能够看出,经过对云核算场景特别的精简和优化, firecracker相关于现在干流的虚拟化组件qemu在发动速度和内存耗费方面有显着的优势。

VMM发动时刻和内存占用比照

2. 容器办理服务

支撑虚拟机容器运转时的容器办理服务也有多种开源计划,例如containerd/cri-o,kata-container和firecracker-containerd等。经过比较,容器团队挑选了cri-o + firecracker-containerd的组合。这二者在功用上能够满意单机容器办理的需求,并且和其他选型比较,代码架构愈加明晰,调用链路简单明了,便于后续依据产品需求定制和改造。

3. 容器调度服务

Kubernetes现已成为了容器调度的事实规范,具有丰厚的功用和杰出的可扩展性。因而容器团队选用Kubernetes作为根本调度结构,并依据产品需求做相关改造,终究根本的服务架构如下所示:

优化改善

尽管选用开源计划能够加速开发进度,但为满意产品需求仍需处理一些问题,首要包含以下几个方面:

1. 容器镜像

在规范的容器镜像完成中,镜像是经过分层结构存储在宿主上的。当创立容器时,容器运转时会在镜像层之上创立一个可写层,并挂载在宿主上供容器实例运用。但Cube容器并不是直接在宿主上运转的,也不需求在宿主上挂载容器根目录。因而容器团队修正了cri-o中镜像层的相关完成,直接将容器可写层以块设备的办法挂载到轻量级虚拟机中而非宿主上,减低了宿主对Cube容器的搅扰。

别的,为了处理新镜像拉取缓慢导致的容器实例发动慢的问题,容器团队提出了镜像长途挂载的处理计划。将容器镜像以块设备的方法存储在缓存集群,当需求在此镜像上生成容器实例时,先将容器镜像经过长途挂载的方法挂载到宿主上,然后容器运转时会在宿主上创立一层可写层生成容器实例。一起后台会将长途镜像同步到宿主本地,进一步加速读取,下降集群危险。上述办法可使宿主上初次获取镜像的时刻缩短至3s以下,并有进一步优化空间。现在这一功用以镜像缓存的产品方法供给给用户运用,并正在逐渐整合到一般镜像拉取过程中。

2. 运用公有云资源

网络方面,Cube容器的网络模型和云主机的根本相同。在将相关网络功用以cni插件的方法完成之后,Cube容器就能够很好的接入到公有云vpc网络中。

存储方面,Cube容器现在支撑了两种类型的存储:能够多点读写的网络文件体系nfs和仅单点读写的云硬盘udisk。在文件存储功用上,Cube产品完成了在轻量级虚拟机中主动挂载nfs的功用,用户只需在配置文件中指定好挂载点和挂载参数,就能直接在容器中运用网络文件体系,并能够一起支撑vpc网络内用户自建的nfs和UCloud公有云产品ufs。在块设备功用上,容器团队扩展了firecracker块设备的完成。经过添加对vhost-user协议的支撑,Cube轻量级虚拟机能够直接对接到spdk服务,然后完成了对高功能的rssd型云硬盘挂载和运用。

3. 容器运转环境

为了削减额定资源耗费,容器团队在容器办理服务和容器运转时上做了很多优化作业。

UCloud优刻得容器团队修正了cri-o办理容器组的架构,选用了单pod对应单shim的模型。经过一个shim办理一个pod内悉数容器,能够明显的下降shim资源耗费,简化容器办理。关于轻量级虚拟机,UCloud优刻得容器团队也对kernel/rootfs/init进程等做了充分地精简优化,只保留了最根本的功用,以加速发动速度,减小安全攻击面,下降资源耗费。别的,容器团队还在轻量级虚拟机中内置了infra container的完成,Cube作为pod运转时能够不用挂载额定的infra容器。

4. k8s改造

Kubernetes作为一个通用的容器调度结构,能够满意大部分容器办理的需求。但针对Cube特定的运用场景,容器团队仍需对k8s组件做一些改造。在操控面,容器团队选用了自定义的调度器,能够更好的满意多租户场景下使命优先级,调度速度,资源办理的需求。在宿主节点上,鉴于Cube容器运转时的特色,UCloud优刻得容器团队精简了一些不需求kubelet完成的功用,例如在宿主上挂载configmap/volume目录,运转cni插件,搜集特定目录日志等,增强了容器与宿主之间的阻隔安全性。

Cube未来展望

在完成了上述开发改造后,Cube产品成功上线,并获得杰出作用。后续Cube产品会持续沿着协助用户提高功率、下降开支、简化保护、节省本钱的思路持续迭代更新。在容器功能方面,UCloud优刻得容器团队会持续优化轻量级虚拟机IO途径,削减虚拟化及办理组件的功能损耗,保证用户容器实例安稳高效运转。在服务办理方面,Cube产品层面会推出多种的容器办理操控器,并完成Cube实例直接接入Kubernetes集群的才能,为用户供给多层次的资源调度办法,便利用户按实践需求办理保护。

推荐产品
推荐新闻: