暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

k8s | 速览 · 容器发展简史

王咚咚编辑部 2021-08-12
848

总第010
撰文王咚咚
出品王咚咚编辑部



前半场


容器(containers)这个词汇,最早只是操作系统级虚拟化(OS-level virtualization)的一些实现方案的专有名称。只不过在当下的语境里,这两个概念基本上已经等同了。“操作系统级虚拟化”指的是系统允许存在多个“用户空间(user space)”,这些空间与外界隔离,如同沙箱(sandbox)一样,在其中运行的进程只能访问到被分配的资源(包括存储、网络、计算能力等),从隔离空间内的进程视角来看,它的运行环境与普通的操作系统并没有区别。


这类技术最早可以追溯到1979年,由贝尔实验室发布的Unix第七(Seventh Edition Unix,或称Version 7 Unix)。这一版的Unix系统新增了chroot系统调用,它的功能是将当前进程及其子进程“视角下”的系统根目录修改为一个特定的路径。chroot命令将目标进程约束在了一个限制性的文件系统内,这个自定义的文件目录就会被该进程识别为系统根目录“/”,相当于加了一层“天花板”,隔绝了文件目录的外部世界。


chroot功能为系统级软件的开发和测试提供了很大的便利,因为对于复杂的系统级应用,每一次构建或测试都可能“污染”环境,有了chroot后,就可以方便地“销毁”和“重置”依赖环境了,也不用担心意外情况会破坏操作系统。


2000年FreeBSD v4.0推出了jail机制, 它进一步扩展了传统Unix上的chroot。除了提供完全的文件系统沙箱功能(由于chroot缺乏安全性设计,根进程是可以脱出限制目录的,所以chroot的文件系统沙箱功能算不上是完全的)jail还进一步实现了网络与运行空间的隔离。jail是“监狱”的意思,虽然有点难听,但比起“沙箱”这个词则更为形象直观。据说,后来“越狱(Jailbreaking)”这个名词就是来源于此。


在2004年,Oracle Solaris推出了Solaris Containers功能,jail与Solaris  Containers分别是历史上第一和第二个商用的操作系统级虚拟化工具。而Linux也分别于2001年和2005年推出了功能类似的Linux-VServerOpenVZ,不过它们未进入Linux kernel,需要通过内核补丁的方式安装后才能使用。


2006年,Google的工程师(当时是Paul Menage 和Rohit Seth,后来Tejun Heo又进行了重写)开源了process containers,它作为容器技术的基础功能,目标是实现虚拟机一般的资源分配管理能力。该功能于次年合并入Linux kernel,并在2008年1月跟随2.6.24版本正式发布。由于container这个专有名词在Linux kernel中已经被占用,为了避免混淆,这个功能被命名为“控制组(control groups)",它的缩写就是我们现在熟知的“cgroups”。

2008年,Linux推出了完整的“操作系统级虚拟化”功能LXC(Linux Containers),它的实现基于kernel的特性cgroups(资源管理)与namespace(视图隔离)。LXC是docker早期功能的基石,直到0.9版本引入了libcontainer,LXC成为了可选项,1.8版本时LXC被标为deprecated,从1.10版本开始彻底取消对LXC的支持。


后半场


2006年AWS(Amazon Web Service)推出EC2等弹性计算服务,正式宣告了云计算商业化时代的到来。此后很长的时间内,相比于IaaS(Infrastructure as a Service,基础设施即服务)业务的飞速发展,PaaSPlatform-as-a-Service,平台即服务)业务却一直不温不火,毕竟用户不喜欢过于受限的、缺乏掌控的环境,传统PaaS。


2013年3月,一个在PaaS领域默默无名的公司dotCloud,宣布开源自己的容器引擎Docker,没想到从此开创了一个时代。Docker凭借轻量化、标准化,特别是image等开创性的设计优势,从一个更贴近用户实际的角度出发,迅速获得了市场的认可,形成了围绕Docker的开源社区。可以说,Docker颠覆了PaaS,也可以说,Docker重新定义了PaaS。


我们常说的IaaS、PaaS、SaaS,实际上是来自于云服务模型(Cloud Service Models)的概念。我其实不建议从这个视角对Docker和Kubernetes进行过度解读,因为随着时代的发展,PaaS的含义也在不停发生改变,我们很难找到一个清晰的轮廓去界定它们,这种状态正如吴晓波如下一段话所表达的那样:


呈现在我眼前的......宛如正在进化中的生命体,我们对它过往的经历所知不详,更被它正在发生的进化所吸引和裹挟。

—— 吴晓波 《腾讯传(1998-2016)》


Kubernetes在官方文档中也提到,它不是一个“传统的”、“包含一切”的PaaS系统。



2013年10月dotCloud更名为Docker, Inc.,并于次年出售dotCloud原有的PaaS业务。这时的Docker雄心勃勃,它寄希望从容器技术出发,拓展出更广泛的产品和商业空间。


2014年12月,Docker发布了Docker Swarm,目标是解决主机集群的容器调度问题。接着,Docker发布了Docker compose和Docker Machine,前者实现了单主机下的容器编排功能,后者解决了多平台下容器运行环境的问题。从这个“三板斧”中就可以看出,Docker谋求的是打造完整的、平台级的、生态化的产品,而不是屈居于较底层的解决方案。但是,想打造上层平台级产品的远不止Docker一家,随着CoreOS、RedhatGoogle等厂商加入竞争中来,使得Docker渐渐难以招架。


Docker Swarm发布的半年前,也就是2014年6月,在容器领域已经深耕多年的Google,正式发布了Kubernetes,这是Google内部的大规模集群管理系统Borg的开源版,如今Kubernetes已经成为容器领域事实上的行业标准


本身依靠开源社区飞速发展的Docker,在占据市场有利地位之后,渐渐走上了“一家独大”的道路,引起了容器这条赛道上其他人的忧虑


Google2015年4月领投了CoreOS公司1200万美元,目的是借由CoreOS自研的容器引擎Rocket(简称rkt)制衡Docker,Kubernetes也宣布支持rkt。


2015年7月,为了避免恶性竞争的扩大化,相关厂商之间达成共识,由Docker牵头建OCI(Open Container Initiative,开放容器倡议),并交由非盈利性的、中立的Linux基金会( Linux Foundation)管理。OCI致力于建立标准化的容器运行时规范(Runtime Specification)容器镜像规范(Image Specification)。OCI的成果是,Docker将容器运行时Libcontainer的管理权交给基金会,改造为runC项目,作为规范的实现。 


在同一个月,由Google领衔、Redhat等云计算厂商参与(华为云也是22个初始会员之一),建立起云原生计算基金会(Cloud Native Computing Foundation),它同样隶属于Linux基金会。CNCF的口号是“为云原生软件建立可持续的生态系统(Building sustainable ecosystems for cloud native software)”,目标是以Kubernetes为基石,建立起一个高质量的云原生基础设施的开源社区。



2016年,kubernetes与CNCF生态进入了高速发展期。这一年,kubernetes更新到1.5版本,推出了我们现在熟知的kubeadm等工具。Prometheus项目也在这一年正式加入CNCF,它后来成为了容器监控事实上的标准。也是这一年,出现了一款现象级手机游戏Pokemon Go,为了应对全球狂热的游戏玩家的负载压力,它运行在当时最大规模的Kubernetes集群上,系统超过了1000个node。


2017年,Docker将高级容器运行时containerd(控制runC的守护进程,用于管理环境内的容器)捐赠给CNCF,它后来成为生态中运用最广泛的容器运行时。同年,Docker项目改名为moby,继续由开源社区进行维护,Docker则转变为了商业产品,主要服务于付费的企业用户(仍存在一个包含基础功能的免费ce版)。这一年,随着Docker公司完成了战略性的大调整,Docker彻底退出头部竞争的舞


2020年,在各项条件成熟之后,kubernetes v1.20标明,kubernetes 内部的CRI(容器运行时接口,container runtime interface)开始弃用Docker,并将在后续版本中正式移除对Docker的支持,用户可以选择containerd或cri-o进行代替。


当我们回望历史,再去看待kubernetes移除Docker这件事的时候,一切就显得那么合情合理了。一方面,Docker本身是不支持CRI的,所以原来kubernetes为了支持Docker就需要加一个docker-shim组件进行转接,如今移除Docker可以让系统整体更整洁,为开源社区减少了不必要的维护负担。更重要的是,随着OCI和CNCF的持续茁壮成长,kubernetes已经不再需要Docker这个“外人”了。


CNCF截至目前已有接近600家会员公司,其中不乏中国公司的身影。仅在23个铂金级会员中,就能看到阿里云、京东云、华为云、火山引擎4家中国公司。


CNCF在2020进行了一次云原生应用的调查,收集到共计1324 份有效样本,来自欧洲、北美、亚洲等主要地区,其中有 30% 以上是 5000 人规模以上企业,60% 以上为 100 人规模企业和组织。其中有 30% 以上是 5000 人规模以上企业,60% 以上为 100 人规模企业和组织。


这次调查的数据显示:在生产中应用容器的比例从上一年的 84% 增长到92%,相比 2016 年增长了 300%。生产中应用 Kubernetes 的比例从上一年的 78% 增长到 83%。




立足小城,侧耳听风

2021年,陪你聊聊云原生、交互设计、技术管理

文章转载自王咚咚编辑部,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论