当前位置: 首页 > Linux

只需6步,即可构建云原生操作系统原型

时间:2023-04-06 23:19:16 Linux

编者按:过去的三年是基础软件领域不平凡的三年,也是动荡不安的三年。随着国际形势和产业格局的变化,想必大家已经充分感受到了云原生和操作系统这两个话题的热度。那么当云原生和操作系统这两个热门话题相遇时会发生什么?本文整理自2022阿里巴巴开源开放周技术演讲,让作者带我们走进这场技术盛宴。本次分享的主题围绕三个方面:首先,简单介绍龙蜥云原生SIG(SpecialInterestGroup)的前世今生。我们为什么要成立CloudNativeSIG?你想解决什么样的问题?它是如何解决这些问题的?接下来,我们将进一步分享如何基于开源社区和组织,从零开始,一步步搭建一个云原生操作系统的原型。最后介绍一下CloudNativeSIG的运行机制,诚挚邀请大家参与龙蜥CloudNativeSIG的建设。1.龙蜥社区云原生SIG回顾自己在操作系统和云原生这两个领域的一些经历是非常有意义的,因为它让我可以从不同的角度来看待这两个领域的发展。基于我在操作系统和云原生领域的专业经验,最近我开始思考云原生和操作系统的关系?如何促进这两个领域的共同发展?因此,我和产业伙伴一起推动了龙蜥云原生SIG的成立,为龙蜥云原生操作系统的开发做准备。上面说了龙蜥云原生操作系统,大家可能很好奇,什么是云原生?云原生和操作系统是什么关系?我们如何构建云原生操作系统?云原生是一种充分利用云基础设施开发软件应用的模式,即站在巨人的肩膀上,充分利用成熟稳定的云基础设施开发、发布、运行和维护一个应用程序,保证应用的安全性我们的应用程序。对弹性、性能、容器、成本等诸多方面的要求。(图/龙蜥云原生系统架构)如上图所示,是一个典型的云原生系统架构,由四部分组成:第一、最底层是云原生基础设施。它提供了很多虚拟机、服务器等物理资源,也提供了很多告警、日志等服务。其次,在此之上,龙蜥会构建一套云原生管控。云原生控制器主要提供定义云原生应用的机制,以及一些云原生应用的通用框架,如服务网格和类似的服务框架。当然,云原生管控系统的核心是云原生编排系统,负责感知底层资源,调度底层资源服务于云原生应用,最终调度云原生应用到特定的云原生节点上来执行。第三个系统是云原生节点系统。它的功能看似很简单,只需要负责高效执行调度到本节点的云原生应用即可,但实际上这个任务并不简单。第四层是云原生应用。该层负责实现用户的业务逻辑和交付业务服务。如上所述:一个简单的节点系统其实并不简单,它也面临着很多挑战。为什么?因为从最初的无状态应用到大数据、AI、数据库等各种严肃应用的云原生化,业务对云原生节点体系提出了严苛的要求。比如如何保证我们节点的资源利用率?如何保证云原生应用的QoS?如何隔离多个应用程序之间的故障?并保证每个应用程序的数据安全?这些挑战都是云原生节点系统需要面对和解决的问题。如前所述,云原生节点体系面临诸多技术挑战。您可能还意识到,这些挑战恰恰是操作系统擅长的领域。于是,我们自然而然地产生了需要构建云原生节点系统的想法。一个方便、易用、完整的云原生操作系统。那么如何构建这个系统呢?基于以上考虑,我们成立了DragonLizardCloudNativeSIG。DragonlizardCloudNativeSIG有三大核心定位,分别是桥接器、组件和系统。首先DragonLizardCloudNativeSIG是一个桥梁,或者说是大家坐在一起聊天的地方,让我们交流用户的需求,业务的挑战,我们会邀请上游技术社区的核心开发者参与到这个过程中,让我们看看上游社区能为我们的应用和业务提供什么样的帮助和解决方案。另一方面,CloudNativeSIG还将负责拉动DragonLizard社区内的其他相关技术SIG。例如,我们将与机密容器SIG、高性能存储SIG、容器网络SIG、容器OSSIG合作,打造易用的云原生操作系统。当然,CloudNativeSIG的具体交付物是稳定易用的云原生组件和系统。2.从零开始构建云原生操作系统接下来,我将与大家一起基于开源社区和开源组件,从零开始构建一个云原生操作系统的原型。第一步,我们需要为云原生应用定制一个容器优化的操作系统。当然,为了您的方便,您也可以使用现有的操作系??统来支持云原生应用,但是我们会面临操作系统体积庞大、安装维护耗时等问题。随着系统运行的时间越来越长,整个系统中操作系统的版本越来越碎片化,版本越来越多,我们也会面临系统维护难的问题。更重要的是,由于传统操作系统内置的软件较多,也导致了较大的安全风险暴露。随着云原生应用的普及,应用占比越来越大,值得为云原生应用打造专属的操作系统。基于这种考虑,CloudNativeSIG使用安全的Rust语言从头开发了一个新的容器优化操作系统,我们称之为LifseaOS。LifseaOS会内置很多云原生需要的组件,免去用户选择安装配置各种云原生组件的麻烦。同时,这些组件将以只读方式安装和使用,从而避免在运行过程中被恶意软件篡改的风险。此外,为了简化大规模集群的运维,LifseaOS提供了基于API的运维控制接口,这意味着整个系统中的节点也可以通过编程进行运维。当然,这样的系统看起来是深度定制的,但是DragonLizard也提供了非常强大的定制能力。例如,用户可以根据自己的业务需求,在LifseaOS系统中添加必要的组件,修改相应的配置,让我们的操作系统真正适应各种用户场景的需求。第二步是在操作系统之上,我们需要一个可以运行容器的运行时。传统上,云原生与容器有着非常密切的关系,也就是说云原生是通过容器诞生的。Linux操作系统通过提供cgroup和命名空间等机制来支持原生的RunC容器。这样的容器运行时具有资源利用效率高、使用方便、弹性强等诸多优点。随着大数据、AI、数据库等重I/O应用的云原生化,传统Linux云原生容器的短板逐渐暴露。例如,安全隔离能力不够,应用之间出现性能干扰等。基于这样的考虑,我们开发了基于硬件虚拟化的安全容器。安全容器的核心能力是提供单向保护。它可以保护基础设施免受云原生应用程序的干扰,同时提供安全的故障配置和性能。隔离方面。在安全容器之上,我们进一步开发了机密容器。机密容器相对于安全容器有一个巨大的改进,即它们将单向保护演变成双向保护,不仅可以保护基础设施免受应用程序容器的干扰,还可以保护应用程序免受基础设施的干扰.因为我们知道数据是用户的核心资产,那么用户的数据上云后,我们如何保护我们的核心资产呢?机密容器为我们提供了一个很好的解决方案。基于硬件数据保护机制,我们可以保证用户数据对基础设施透明,基础设施看不到用户数据,从而保证用户数据的安全和隐私。可能当你看到这三种云原生操作的时候,你肯定会担心,我的系统为什么要集成这么多runtime,用起来多麻烦?这里有一个好消息要分享给大家,您再也不用为多个容器运行时的使用和运维而烦恼了。因为我们基于containerd打造了统一的管理、控制、运维接口,让大家可以根据业务需求选择需要的容器运行时。比如我需要高效的资源利用,我会选择原生容器;我希望实现多重保护,那么我可以选择一个安全的容器;我需要保护我的财务数据,然后我可以选择一个机密容器。所有这些都可以通过简单地修改容器配置来实现。当我们有了操作系统和云原生运行时,我们能顺利把应用做成云原生吗?答案是:还没有。第三步,提供多种云原生存储技术解决方案。当我们真正将一些应用迁移到云原生,尤其是安全容器和机密容器时,我们会发现存储性能成为一个巨大的挑战。我们如何应对这些挑战?继续给大家带来好消息。CloudNative为我们提供了一种对数据进行分类的机制。因为云原生展示把用户数据分为只读数据、临时数据、我的用户业务需要持久化的数据。根据用户获取数据的不同方式,我们可以提供不同的技术方案。比如对于只读数据,DragonLizardCloudNativeSIG提供了非常完善的解决方案。基于virtiofs、Nydus和EROFS内核文件系统,我们打造了一套可以同时支持云原生容器、安全容器和机密容器的存储解决方案,从而实现高效的存储性能。但是对于用户业务数据,我们如何提升性能呢?DragonLilyCloudNativeSIG还为您提供了名为Fluid的数据编排组件,可以根据用户使用数据的方式展示和定义数据集,然后使用不同的技术方案优化不同的数据集。比如对于只读用户数据,我们可以使用刚才提到的Nydus、EROFS或者Fluid等技术方案来提升性能。对于可写的用户数据,可以采用阿里的JindoFS、Intel的SPDK等技术来提高可写数据的性能。当我们有了运行时和存储解决方案的范围后,下一步就是要面对容器网络互联这个最复杂的问题了。这里还在探索中,因为这个领域比较复杂,很高大上。众所周知,在混合云的条件下,我们将面临千变万化的网络环境。如何为这些网络环境提供云延伸网络解决方案?如何实现IaaS和PaaS的网络互通?如何让我们的底层网络基础设施满足高速创建和销毁云原生应用的需求?这些都是我们目前面临的挑战。我们仍在与社区合作伙伴一起定义这些问题并寻求相应的技术解决方案。非常欢迎大家参与DragonLizard云原生SIG网络相关技术的讨论和建设。我们现在有了一个完整的计算和存储网络云原生系统,我们如何使用它呢?下一步,我们需要一个ACNS(AnolisCloud-NativeSuite),DragonLizardCloud-NativeSuite。基于阿里的ACK系统,AnolisCloudNativeSIG开源了一套ACNS(AnolisCloud-NativeSuite),名称为ACKDistro,是AnolisCloud-NativeSuite。基于这样一个龙力云原生套件,你可以很方便的迁移你的应用,因为这个版本已经通过了阿里云的生产验证,我们会在生产版本和开源版本之间保持足够的同步,让大家使用最新的k8s技术可以尽快上手,所以有了DragonLizard云原生套件,每个人都可以轻松使用云原生技术实现和部署自己的云原生应用。但是下一步我们会发现,即使我们把我们的应用做了云原生,我们节点的资源利用率还是不够高,那怎么办呢?不同的应用程序对资源有不同的要求。有的需要大量的CPU算力,有的需要很大的IO带宽,有的需要及时响应。我们可以通过技术手段将这些应用混合部署到一个节点上,从而充分利用这个节点上的各种资源。这就是我们所说的混合系统。2022年初,阿里云开源了Koordinator的业务混合编排系统,其核心是增强k8s调度系统以支持业务分发。这也是我们根据多年在阿里系统的生产经验开发出来的系统,现在分享给大家。更进一步,当我们可以从软件层面进行业务分发时,会发现从硬件层面来看,资源占用还是不够高。Intel这里提供的基于硬件的优化调??度组件叫做CRIResourceManager,即可以根据业务特点和硬件配置,深度优化业务调度能力。最后一步,当我们有了这样一个系统,我们如何安装部署呢?想象一下,当我们面对一个1000台虚拟机的集群,需要部署一个云原生系统时,我们该怎么办?各种软件需要一个一个安装吗?不,你不需要那样做。龙蜥社区为您提供了sealer一键集群打包分发系统。也就是说,你可以为整个集群做一个镜像,然后把这个集群镜像分发到上千台机器上。下一步,当我需要分发节点时,很多软件包的分发对我来说可能会成为一个非常大的挑战。我们还提供DragonflyP2P文件分发系统。这样的P2P分发系统可以用来分发软件包、软件库、容器镜像操作系统、AI模型数据等。从我们的实际生产经验来看,P2P可以极大的提升云原生系统的数据分发能力。以上介绍了DragonLizardOS对云原生应用的支持。那么云原生技术对操作系统有没有影响呢?答案是肯定的。因为操作系统本身也是一种软件,我们采用分发云扩展软件的方式来分发操作系统,这也给我们带来了很大的想象空间。例如,我们可以使用内核EROFS文件系统和FsCache系统来实现操作系统数据的按需加载,也可以基于Nydus定义一个新的软件包格式。我们还可以使用管理容器镜像的技术来管理操作系统镜像,以提高可用性和安全性。总之,云原生技术还可以从另一个方面反向推动操作系统本身的演进。从而实现云原生与操作系统的协同开发、共同进步、共同演进。3、龙蜥云原生SIG的运行机制最后说一下龙蜥云原生SIG的运行机制。经过上面介绍的6大步骤,我和大家一起从零开始搭建了一个云原生操作系统的原型。当然,大家都知道这个原型还是很粗糙的,还有很多东西等着大家一起去打造。如果我对CloudNativeSIG感兴趣,如何参与?很简单,龙蜥云原生SIG的核心运行机制就是圆桌会议机制。也就是说,只要你对社区、任何话题、任何技术、任何使用场景感兴趣,都可以参与SIG,一起来讨论我们面临的问题和我们可能的技术解决方案。以及我们的研发进度,同时龙蜥云原生SIG也会坚持桥接的定位。因为龙力CloudNativeSIG在上游社区有很多核心开发者,只要大家参与到这个社区中,我们就能在上游和用户之间架起一个非常顺畅的桥梁,让大家共同努力,共同推动整个社区的发展。云原生底层系统。最后,诚挚邀请大家一起参与龙蜥云原生SIG的建设。相关链接:龙力云原生SIG地址:https://openanolis.cn/sig/clo...2022阿里巴巴开源开放周演讲视频:https://openanolis.cn/video/#...——完——