容器技术发展史
一、Jail时代
1979年,贝尔实验室发明了chroot;当一个系统软件编译完成之后,整个测试环境的变量便会发生变化;chroot就是将一个进程的文件系统进行隔离,将不同进程的的根目录发生改变;这种被隔离出来的新环境就像是监狱一样,所以被命名为Chroot Jail(监狱),后续信息就全部放到了Jail中;这种模式只是隔离了文件;
FreeBSD Jail不仅仅进行了文件系统的隔离,并且扩充了独立的进程和网络空间;
Linux Server也是一种监狱机制,对文件系统,网咯地址,内存进行了分区;
Solaris Containers对系统资源进行了隔离,并添加了快照和隔离能力;
总结:就是对进程相关的资源,内存,网络进行了隔离;
二、云时代
2006年Goolge 101计划提出了云的概念;当数据量比现在多1000乃至更多倍时,需要使用大量的基础设备,各大商业公司支持了云服务器提供给用户去购买;此时不仅仅需要进行进程隔离,还需要对资源进行控制;
2006年Google推出了cgroups主要用来进行资源的控制(CPU、内存、磁盘I/O、网络),最终合并到了Linux中,其实在Linux2.4版本中就出现了命名空间技术实现隔离;
2008年LXC推出,是Linux容器管理器的第一个、最完整的实现。使用cgroups和Linux命名空间实现;同时还使用了Borg(kubernetes的前身)对容器进行编排和调度;LXC和Borg就相当于是最早的docker和k8s;
2013年docker推出风靡全球,不仅仅使用了资源控制 和资源隔离,还解决了分发问题;
三、云原生时代
云原生其实就是微服务化、容器化,并且支持devops理念;devops理念就是,可以以快速自动化部署大批服务和升级;
2013年Docker公司不满现状,开始生态扩张,CoreOS(专为容器设计的操作系统)终止与Docker的合作;
2014年Google发布容器编排引擎Kubernetes(k8s),完成了对生态的闭环;同年CoreOS发布了开源容器引擎Rocket,Google投资支持了CoreOS k8s技术,从此形成了两大容器派系;
2015年Docker也推出了Swarm容器编排组件;
容器迭代更新较快影响较大,于是在2015年与CoreOS、Google、RedHat等公司共同宣布Docker公司将Libcontainer捐出,改名为RunC 项目,由一个中立的基金会管理,并且共同制定了一套容器与镜像的规范和标准,成立了OCI组织;
同年Google 联合 Linux 基金会成立 CNCF (Cloud Native Computing Foundation)云原生计算基金会。旨在构建云原生基础设施。K8S 是第一个纳入进来的项目,像后续有名的监控设施 Prometheus,配置设施 ETCD 都加入进来。CNCF 组织解决的是应用管理及容器编排问题。和 OCI 共同制定了一系列行业事实标准。
2016年发布了CRI标准。Google 就和红帽主导了 CRI 标准,用于 k8s 和特定的容器运行时解耦。CRI(Container Runtime Interface 容器运行时接口)本质上就是 k8s 定义的一组与容器运行时进行交互的接口,所以只要实现了这套接口的容器运行时都可以对接 k8s。但是这个适合 Docker 还是事实标准,并 CRI 并没有话语权,但是又必须支持 Docker,所以就有了 dockershim,dockershim 的本质其实就是 k8s 对接 docker 的一个 CRI 的实现。
同年Docker捐献containerd给CNCF;Google为了将containerd加入到cri标准,开发了cri-containerd,用来完成k8s与容器之间的交互;
2016年,CRI-O发布,使得k8s支持直接运行容器,不需要通过容器引擎,此时容器更加纯粹,更加关心如何封装云原生程序;docker放弃Swarm,将所有容器编排功能和集群管理技术内置到了docker中,而Google则是让用户参与到k8s项目的每一层,所以最终k8s获胜;最终k8s成为了编排标准;
2017年,最终运行时标准为,containerd作为标准CRI;