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官方下载,然后傻瓜式安装. 安装成功以后再 ...
随机推荐
- burp-suite(Web安全测试工具)教程
Burp Suite 是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程.所有的工具都共享一个能处理并显示HTTP 消息,持久性,认证,代 ...
- 将本地代码上传到云效git存放
前提已开通云效账号,然后进行云效首页的研发---代码 创建git组 创建git库 生成https://code.aliyun.com/test-demo1/v1的git库 准备将本地的test-dem ...
- Unity动态构建mesh绘制多边形算法流程分析和实践
前言 先说一下,写这篇博文的动机,原文的博主代码写的十分潇洒,以至于代码说明和注释都没有,最近恰逢看到,所以以此博文来分析其中的算法和流程 参考博文:https://blog.csdn.net/lin ...
- 段间跳转之TSS段
TR寄存器,TSS描述符,TSS段 TR寄存器与普通的段寄存器一样都有可见部分和不可见部分.TR的可见部分为16位为其段选择子,不可见部分是32位的TSS基地址和16位的大小. TSS描述符存在GDT ...
- XAML 属性元素,标记扩展和注释
这节来讲一下XAML中的属性元素,标记扩展,和注释. 属性元素 一般的,我们想要对一个标签的属性赋值,可以直接在标签内部键入属性名给其赋值,如我们给button的Content属性赋值: <Bu ...
- Flutter 2.2 更新详解
Flutter 2.2 版已正式发布!要获取新版本,您只需切换到 stable 渠道并更新目前安装的 Flutter,或前往 flutter.cn/docs/get-started 从头开始安装. 虽 ...
- zimbra启用SMTP认证
zmprov modifyServer {{ you domain }} zimbraMtaTlsAuthOnly FALSE zmcontrol restart 查看对应配置 zmprov getS ...
- [刷题] 257 Binary Tree Paths
要求 给定一棵二叉树,返回所有表示从根节点到叶子节点路径的字符串 示例 ["1->2->5","1->3"] 思路 递归地返回左右子树到叶子节 ...
- CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存
CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存来自:互联网 时间:2020-03-22 阅读:114以下情况可能造成Linux内存占用过高服务配置存在直接分配错误,或隐性分 ...
- vipivp常用linux命令
基础安装 # CentOS sudo yum install epel-release 命令行Tips 进程及端口 # 查看端口占用情况 netstat -ap | grep 端口号 # 查看某一 ...