开源云计算技术总的来说经历了两代发展,第一代是基于虚拟机的开源云计算技术,以OpenStack和KVM为代表,第二代是基于容器的开源云计算技术,以Kubernetes和Docker为代表。总的来说,Kubernetes是管理容器的工具,OpenStack是管理VM的工具。
OpenStack和KVM
OpenStack是由NASA(美国国家航空航天局)和Rackspace合作研发并发起的项目,目前已经拥有非常完善的生态。OpenStack基金会吸引了许多国际大企业的加入,2015年7月Google也加入了OpenStack基金会。
KVM ( Kernel-based Virtual Machine)是一种基于Linux内核的开源虚拟化技术,可以代替VMWare公司的ESXi技术。
KVM 是 Linux 的一部分,KVM 于2006年首次公布,并在一年后合并到主流 Linux 内核版本中,Linux 2.6.20 及其更新版本都包括 KVM。KVM 可将 Linux 转变为虚拟机监控程序,使主机能够运行多个隔离的虚拟环境(VM)。
KVM作为OpenStack默认的虚拟机管理程序,大约有95%的OpenStack平台由KVM驱动。OpenStack + KVM成为了应用最多的开源虚拟机管理方案。
如上图所示,KVM是最底层的虚拟机监控程序(hypervisor),用来模拟CPU的运行,由于KVM缺少了对网络和I/O的支持,所以没法直接用它。QEMU-KVM是一个完整的模拟器,是构建于KVM上,提供了完整的网络和I/O支持。
Openstack不会直接控制QEMU-KVM,它会通过一个叫 Libvirt 的库去间接控制。Libvirt是用于管理虚拟化平台的开源的API,后台程序和管理工具,可以用于管理KVM、Xen、VMware ESX、QEMU和其他虚拟化技术。
K8S的诞生
Kubernetes这个单词来自于希腊语,含义是舵手或领航员。K8S是它的缩写,用“8”字替代了“ubernete”这8个字符。K8S和Google的关系更大,K8S的前身就是Google自己捣鼓了十多年的Borg系统。前文《云原生技术:CNCF的首位毕业生Kubernetes 》曾经介绍过。
在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。在Borg系统中,每时每刻都在处理来自众多应用程序所提交的成百上千的Job, 对这些Job进行接收、调度、启动、停止、重启和监控。
作为Google的竞争技术优势,一开始并不打算将Borg开源。但当Tiwtter打造出属于自己的Borg系统(Mesos)时, Google也审时度势推出了来源于自身技术理论的开源工具。在2014年6月由Google公司正式公布K8S并宣布开源。
同年7月,微软、Red Hat、IBM、Docker、CoreOS、Mesosphere和Saltstack等公司,相继加入K8S。之后的一年内,VMware、HP、Intel等公司,也陆续加入。K8S项目来源于Borg,可以说是凝聚了Borg设计思想的精华,也吸取了Borg系统中的经验和教训。
Docker技术起源于2013年3月,是基于LXC为基础构建的容器引擎,通过namespace和cgourp实现了资源隔离和调配,使用分层存储来构建镜像。它基于Google公司推出的Go语言实现。关于Docker及容器技术可以参考前文《容器运行时:从Docker到Containerd 》。
K8S和Docker这一套技术组合经常配合使用。不过近期K8S停止了对Docker容器运行时的支持,默认支持的容器运行时是Containered。前文《云原生技术:K8S弃用Docker是怎么回事 》曾经介绍过这件事,感兴趣的朋友可以翻一下。
总结
Openstack的定位是IaaS平台,主要适用于搭建私有云以及基于私有云的使用的场景。K8S的定位是PaaS平台,尤其适合微服务应用的部署。