Docker与k8s的恩怨情仇(一)—成为PaaS前浪的Cloud Foundry
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
大家在工作中或许或多或少都接触过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和aliyun都是自研架构,OpenStack是开源的。所以公司如果需要,完全可以接入OpenStack搭建自己的私有云。(当然前提需要有OpenStack核心开发能力)。
- 2010-2013年之间,云计算的全球份额被aws和OpenStack瓜分。
这时的云计算技术,本质都是虚拟化技术,将硬件资源作为基础设施提供给用户,简称IaaS。简单理解,IaaS就是将一个很大的服务器,通过虚拟化技术拆分成多个小的虚拟服务器,提供服务,类似于在本机装了虚拟机。
(云计算主力玩家的进场时间,图片来自网络)
但是,IaaS时代的虚拟机还是太过于笨重了。每一台虚拟机都需要消耗CPU、内存等计算资源才能支撑应用的运行。即便应用再小,系统的开销都是固定的成本。如何为IaaS减肥,让虚拟机系统的开销降到最低?
2013年开始,云计算正式进入了PaaS时代。PaaS时代,云计算所销售的单元,从虚拟机变成了应用运行平台。于是,云厂商提供的服务更多,资源利用率也更高了。
什么是PaaS?我们用一个通俗的例子来解释。如果我们现在是一个烧饼店老板,采用IaaS模式意味着我们需要用别人厨房、锅炉、煤气,自己和面做馅料,做烧饼。如果是PaaS,我们烧饼的面粉、馅料和调料都是别人提供好了,我们只需要把饼烤熟。
云厂商该如何构建一套好用的PaaS服务呢?借力开源项目,成为各厂商的共识。
Cloud Foundry开启PaaS开源时代
PaaS的核心是平台。最早出现在开发者视野中的PaaS开源项目中,vmware创立的Cloud Foundry是知名度最高的。与IaaS提供云上虚拟机的服务方式不同,基于Cloud Foundry的云计算能够提供应用托管的功能。开发者只需要通过一条简单的命令比如:cf push "我的应用",就可以将项目打成一个压缩包,上传到Cloud Foundry服务器。而Cloud foundry会开启自己的调度器,在一群云主机中找到满足用户需求的主机(系统版本、性能、个数),然后通过容器化技术,在主机上创建一个容器,在容器中下载压缩包,解压并运行,最终成为一个对外提供服务的应用。
此外,Cloud Foundry平台对这些应用项目提供分发,灾备,监控,重启等等服务(这也是我们提供给用户的核心服务)。这种托管服务解放了开发者的生产力,让他们不用再关心应用的运维状况,而是专心开发自己的应用。而这就是PaaS的“初心”,平台即服务。
(Cloud Foundry提供的服务)
这里就会有同学问了,容器是什么?容器是用来解决多个应用资源冲突与隔离性问题的技术。Linux上的namespace机制和cgroups命令都能用做资源隔离和限制,这些都是容器技术。
容器技术并不是Docker创建的,在Docker兴起之前,就已经被其他公司商用了,但是为什么现在一谈起容器,所有人第一时间想到的就是Docker呢?这就要提到Cloud Foundry的死亡。
从Cloud Foundry到Docker
Cloud Foundry似乎已经和我们现在使用的云功能区别不大,但2021年的现实情况却是Cloud Foundry已经死了。
我们看过互联网上很多文章,再结合我们活字格公有云开发的经验,我们认为这个项目的致命缺陷集中它的打包机制上。
Cloud Foundry最核心的组件就是应用的打包和分发机制,也是开发者打交道最多的功能。Cloud Foundry为每一种主流的语言都定义了一套打包的方式,这些方式之间毫无章法。但就是这个打包功能,成了Cloud Foundry的软肋,一直为用户所诟病。开发者不得不为每一种语言,每一种框架,甚至是每个版本应用维护一个打好的包,还有可能出现本机运行成功,打了个包上传上去之后就无法运行的情况。情况最严重的时候,开发者在调试云平台系统上花的时间都已经比开发一个新软件的时间要长了。
本来是为赋能开发者的而生的技术,Cloud Foundry却对开发者如此不友好。当开发者的抱怨积累到一定程度,想要在PaaS浪潮中央站稳脚跟的Cloud Foundry被后起之秀Docker“红牌罚出局”也就顺理成章了。
最初,Docker是一个当时还叫dotCloud的公司(2010年由所罗门海克斯创建,Y Combinator孵化)开发的容器项目。在Cloud Foundry困于打包问题时,Docker正在悄悄积蓄力量,在开源后的短短几个月内就迅速崛起,成为一个不容忽视的PaaS技术方案,吸引了云服务开发者的眼球。
滑稽的是,在Docker刚开源的时候,Cloud Foundry的首席产品经理 James Bayer就在社区做了一次详细的对比,告诉用户Docker和Cloud Foundry一样,都是使用了Namespace和Cgroups技术的沙箱而已,没什么值得关注的。
事实上,Docker也确实就和他所说的一样,采用了这个“传统”的技术方案,但是Docker与Cloud Foundry相比,做了一点小小的创新,体现了所罗门海克斯的远见。从2010他就开始考虑应用打包的一致性与复用性问题,并提出了创新的解决方案,最终对Cloud Foundry造成了毁灭性的打击。这个解决方案就是Docker镜像。
(Docker,图片来自官网)
刚开源的Docker迅速爆火,憨态可掬的小鲸鱼,对用户友好的文档,三分钟部署一个Nginx集群的宣传语,以及Docker Image这个 “微不足道的创新”,让Docker席卷整个PaaS领域。
Docker的制胜法宝:镜像
Docker成功的关键,在于Docker镜像几乎完美地解决了Cloud Foundry在打包方面的软肋。
所谓的镜像,其实也是一个压缩包,但是比起Cloud Foundry那种执行文件+启动脚本的打包结果,镜像提供给用户的是一套完整的运行环境,每一个镜像都可以指定操作系统版本,内部可以构建程序执行的文件结构,并且一份镜像可以完全共享在多处使用。
此外,Docker还给开发者提供了一套完善的镜像制作流程,这套流程与编程语言和框架无关。开发者只需要按照该流程,定制对应程序所需要的运行的操作系统环境即可。
总之,Docker 镜像完美解决了两个问题:
1.本地环境和服务器环境的差异
2.同一份镜像可以让所有的机器进行复用
从这一刻开始,PaaS的市场已经完全是Docker的天下。
小结
本文是系列文章的第一期,我们一起回顾了IaaS取代物理服务器,基于IaaS构建PaaS的发展路线。在构建PaaS时,我们经历了Cloud Foundry的衰败,见证了Docker的成功。
但是,只依靠Docker就能构建起完整的PaaS服务吗?我们的活字格公有云版最终选择了哪个技术方案?云计算的故事还没有讲完,敬请期待下期精彩内容。
Docker与k8s的恩怨情仇(一)—成为PaaS前浪的Cloud Foundry的更多相关文章
- Docker与k8s的恩怨情仇(三)—后浪Docker来势汹汹
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上一节我们为大家介绍了Cloud Foundry等最初的PaaS平台如何解决容器问题,本文将为大家展示Doc ...
- Docker与k8s的恩怨情仇(七)—— “服务发现”大法让你的内外交互原地起飞
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 第一章:Docker与k8s的恩怨情仇(一)-成为PaaS前浪的Cloud Foundry 第二章:Dock ...
- Docker与k8s的恩怨情仇(二)—用最简单的技术实现“容器”
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上次我们说到PaaS的发展历史,从Cloud Foundry黯然退场,到Docker加冕,正是Docker& ...
- Docker与k8s的恩怨情仇(四)-云原生时代的闭源落幕
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在本系列前几篇文章中,我们介绍了从Cloud Foundry到Docker等PaaS平台的发展迭代过程.今天 ...
- Docker与k8s的恩怨情仇(五)——Kubernetes的创新
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上节中我们提到了社区生态的发展使得Kubernetes得到了良性的发展和传播.比起相对封闭的Docker社区 ...
- Docker与k8s的恩怨情仇(六)—— “容器编排”上演“终结者”大片
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在上节中,我们为大家介绍了Pod的基础内容,Kubernetes如何站在上帝视角上处理容器和容器之间的关系. ...
- Docker与k8s的恩怨情仇(八)——蓦然回首总览Kubernetes
在系统介绍了如何实际部署一个K8S项目后,作为本系列文章的最后一篇,我们一起来看看Kubernetes集群内容总览,再对一些更深层次的功能进行总结. Kubernetes总览 下图是一个k8s的总览结 ...
- [你必须知道的.NET]第一回:恩怨情仇:is和as
本文将介绍以下内 容: • 类型转换 • is/as操作符小议 1. 引言 类型安全是.NET设计之初重点考虑 的内容之一,对于程序设计者来说,完全把握系统数据的类型安全,经常是力不从心的问题.现在, ...
- Win10 for Docker 安装 K8S
win 10 docker安装K8S中遇见的一些问题,记录下来方便自己以后避免采坑. 安装步骤: 1.安装Docker for windows.在docker官方下载,然后傻瓜式安装. 安装成功以后再 ...
随机推荐
- Windows核心编程 第十二章 纤程
第1 2章 纤 程 M i c r o s o f t公司给Wi n d o w s添加了一种纤程,以便能够非常容易地将现有的 U N I X服务器应用程序移植到Wi n d o w s中.U N I ...
- Win64 驱动内核编程-12.回调监控进线程创建和退出
回调监控进线程创建和退出 两个注册回调的函数:PsSetCreateProcessNotifyRoutine 进程回调PsSetCreateThreadNotifyRoutine 线程回调分 ...
- Portswigger web security academy:Stored XSS
Portswigger web security academy:Stored XSS 目录 Portswigger web security academy:Stored XSS Stored XS ...
- XCTF-web_python_template_injection
web_python_template_injection 这里涉及到flask的ssti漏洞(服务端模板注入). 简单点说就是,在使用flask/jinja2的模板渲染函数render_templa ...
- 【JavaScript】JS从入门到深入(复习查漏向
[JavaScript]JS从入门到深入(复习查漏向 pre 精细得学过一遍JS后才发现,原来之前CTF中有些nodejs的题目以及一些游戏题的payload就变得很好理解了. 基础知识 ECMASc ...
- java8中的日期和时间API
一.背景 jdk 1.8 之前, Java 时间使用java.util.Date 和 java.util.Calendar 类. Date today = new Date(); System.out ...
- Mybatis 遍历 List<Map<String,Object>>
在上一篇博客中总结了MyBatis Plus 实现多表分页模糊查询(链接在最后).返回类型是编写一个专门的vo类.这次是返回List < Map > 前言 编写一个专门的vo返回类,主 ...
- C++ primer plus读书笔记——第14章 C++中的代码重用
第14章 C++中的代码重用 1. 使用公有继承时,类可以继承接口,可能还有实现(基类的纯虚函数提供接口,但不提供实现).获得接口是is-a关系的组成部分.而使用组合,类可以获得实现,但不能获得接口. ...
- Unreal: Dynamic load map from Pak file
Unreal: Dynamic load map from Pak file 目标:在程序运行时加载自定义 Pak 文件,并打开指定关卡,显示其中的完整 map 内容 Unreal 的 Pak 文件内 ...
- [bug] docker:write /var/lib/docker/tmp/GetImageBlob613162680: no space left on device
原因 分区空间不够,无法安装镜像 参考 https://www.cnblogs.com/elizwy/p/7722898.html https://blog.csdn.net/TinyJian/art ...