当前位置: 首页 > Linux

Docker与k8s的恩怨(一)——CloudFoundry

时间:2023-04-06 22:11:44 Linux

成为PaaS的前浪转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,为开发者赋能。大家可能在工作中或多或少接触过Docker,那么你知道Docker和容器化背后的原理是什么吗?容器化技术风靡全球,为何只有Docker被大家熟知?后Docker时代,谁是云原生时代的王者?我们相信本系列文章将帮助您回答这些问题。“被嫌弃”的物理服务器在云时代之前,开发者要想搭建一个在线站点,就必须自己维护物理服务器。但随着业务的发展,大型服务器的数量逐渐增多,随之而来的硬件、场地和维护成本也不断增加。对于面向C端的站点来说,网络热点事件是随机的,流量的变化是不可控的,站点遇到流量暴增是在所难免的。如果此时没有备份服务器,突如其来的大流量很可能压垮整个站点。但是,在没有突发事件的情况下,备用服务器的采购和维护成本也不容忽视。(传统运维艺术:网上祭祖,图片来自网络)哪里有问题,哪里就有商机。有人认为,如果买一批服务器放在外网,安排专人管理,然后根据用户的需要出租出去,不就解决了这个问题吗?至此,一场云计算的好戏正式上演。虚拟机仍然“超重”。云计算时代的大幕已经拉开,各大厂商纷纷登场。让我们先简单回顾一下。2006年,亚马逊成立AWS,从云存储业务做起。2008年,云计算起步。2009年,阿里云成立。最新数据显示,在2020年IaaS市场份额调查中,阿里云位列全球第三、亚太第一;排名前两位的是亚马逊和微软,市场份额为9.5%,超过了谷歌的6.1%、亚马逊的40.8%、微软的17%。国内市场份额为40%,华为云以18%紧随其后。2010年,OpenStack由NASA发布。OpenStack是一种IaaS架构,可以用来构建自己的私有云,允许任何人自己创建和提供云计算服务。相比之下,AWS和阿里云都是自研架构,OpenStack是开源的。因此,如果公司需要,可以接入OpenStack,构建自己的私有云。(当然,前提是你需要具备OpenStack的核心开发能力)。2010年到2013年间,全球云计算份额被AWS和OpenStack瓜分。此时,云计算技术本质上是虚拟化技术,将硬件资源作为基础设施提供给用户,简称IaaS。简单理解,IaaS就是通过虚拟化技术将一个大型服务器拆分成多个小型虚拟服务器来提供服务,类似于在机器上安装一个虚拟机。(主要云计算玩家入驻时间,图片来自网络)然而,IaaS时代的虚拟机还是过于笨重。每个虚拟机都需要消耗CPU、内存等计算资源来支撑应用程序的运行。无论应用程序多么小,系统的开销都是固定成本。如何为IaaS减肥,将虚拟机系统的开销降到最低?2013年开始,云计算正式进入PaaS时代。在PaaS时代,云计算销售的单位已经从虚拟机变成了应用运行平台。因此,云供应商提供更多的服务和更高的资源利用率。什么是平台即服务?让我们用一个简单的例子来解释。如果我们现在是一家饼干店的老板,采用IaaS模式意味着我们需要使用别人的厨房、锅炉、煤气,自己做馅料和饼干。如果是PaaS,我们做饼干的面粉、馅料、调料都是别人提供的,我们只需要烤饼干就可以了。云厂商应该如何构建一套有用的PaaS服务?借力开源项目已经成为各厂商的共识。CloudFoundry开启PaaS开源时代。PaaS的核心是平台。在最先出现在开发者眼中的PaaS开源项目中,最著名的当属vmware创立的CloudFoundry。与IaaS为云端虚拟机提供服务不同,基于CloudFoundry的云计算可以提供应用托管功能。开发者只需要使用简单的命令如:cfpush"myapplication"就可以将项目打包成压缩包上传到CloudFoundry服务器。而CloudFoundry会开启自己的调度器,在一组云主机中找到一台满足用户需求的主机(系统版本、性能、数量),然后通过容器化技术在主机上创建一个容器,并下载压缩包在容器,解压运行,最终成为对外提供服务的应用程序。另外,CloudFoundry平台为这些应用项目提供分发、容灾、监控、重启等服务(这也是我们为用户提供的核心服务)。这种托管服务解放了开发者的生产力,让他们不再需要关心应用的运维状况,而是专心开发自己的应用。而这就是PaaS,平台即服务的“初心”。(CloudFoundry提供的服务)这里有同学会问,什么是容器?容器是一种用于解决多个应用程序资源冲突和隔离问题的技术。Linux上的命名空间机制和cgroups命令都可以用来做资源隔离和限制,这些都是容器技术。容器技术不是由Docker创建的。在Docker兴起之前,它已经被其他公司商业化了。但是为什么现在大家说起容器都会想到Docker呢?这引发了CloudFoundry的消亡。从CloudFoundry到DockerCloudFoundry看似和我们现在使用的云函数没有太大区别,但2021年的现实是CloudFoundry已死。我们在网上看了很多文章,结合我们开发MovableType公有云的经验,我们认为这个项目的致命缺陷集中在它的打包机制上。CloudFoundry的核心组件是应用程序打包和分发机制,这也是开发者接触最多的功能。CloudFoundry为每一种主流语言都定义了一套封装方法,这些方法之间没有规则。但也正是这种打包功能成为了CloudFoundry的软肋,被用户诟病。开发人员必须为每种语言、每个框架甚至应用程序的每个版本维护一个包。也可能会出现本机运行成功,但是包上传后运行失败的情况。当情况最糟糕时,开发人员花在调试云平台系统上的时间比开发新软件的时间还多。CloudFoundry本来是一个为开发者赋能的技术,却对开发者如此不友好。当开发者的抱怨累积到一定程度,想要在PaaS浪潮的中心站稳脚跟的CloudFoundry被后起之秀Docker“红牌开除”也就顺理成章了。最初,Docker是由一家名为dotCloud的公司开发的容器项目(由SolomonHex于2010年创立,由YCombinator孵化)。当CloudFoundry为封装问题苦苦挣扎时,Docker却在悄悄积蓄力量,并在开源后的几个月内迅速崛起,成为不可忽视的PaaS技术解决方案,受到云服务开发者的关注。搞笑的是,在Docker刚开源的时候,CloudFoundry的首席产品经理JamesBayer在社区做了一个详细的对比,告诉用户Docker和CloudFoundry一样,只是一个使用Namespace和Cgroups技术的沙箱.没什么可担心的。事实上,Docker确实像他说的那样采用了这种“传统”的技术方案,但与CloudFoundry相比,Docker做了一个小小的创新,体现了SolomonHex的远见。从2010年开始,他开始考虑应用打包的一致性和可复用性,并提出了创新的解决方案,最终对CloudFoundry造成了毁灭性的打击。解决方案是Docker镜像。(Docker,图片来自官网)刚刚开源的Docker迅速流行起来。幼稚的小鲸鱼,通俗易懂的文档,三分钟部署一个Nginx集群的口号,DockerImage的“微不足道的创新”,让Docker风靡了整个世界。PaaS领域。Docker的法宝:Docker镜像成功的关键在于Docker镜像几乎完美解决了CloudFoundry在打包方面的软肋。所谓镜像,其实就是一个压缩包,只不过相对于CloudFoundry的执行文件+启动脚本的打包结果,镜像为用户提供了一个完整的运行环境。每个映像都可以指定操作系统版本。可以构建程序执行的文件结构,单个图像可以完全共享并在多个地方使用。此外,Docker还为开发者提供了完整的镜像制作流程,与编程语言和框架无关。开发者只需要根据这个过程定制相应程序所需的操作系统环境即可。总之,Docker镜像完美解决了两个问题:1.本地环境和服务器环境的区别2.同一个镜像可以被所有机器复用从这一刻起,PaaS市场已经完全被Docker占据了。总结本文是系列文章的第一期。我们回顾了IaaS替代物理服务器、基于IaaS构建PaaS的发展路线。在构建PaaS的时候,我们经历了CloudFoundry的没落,也见证了Docker的成功。但是,仅仅依靠Docker是否可以搭建出一个完整的PaaS服务呢?我们的MovableType公有云版本最终选择了哪种技术方案?云计算的故事还没有讲完,敬请期待下一期的精彩内容。