云原生技術(shù):云計(jì)算管理平臺(tái)OpenStack與K8S
開(kāi)源云計(jì)算技術(shù)總的來(lái)說(shuō)經(jīng)歷了兩代發(fā)展,第一代是基于虛擬機(jī)的開(kāi)源云計(jì)算技術(shù),以O(shè)penStack和KVM為代表,第二代是基于容器的開(kāi)源云計(jì)算技術(shù),以Kubernetes和Docker為代表??偟膩?lái)說(shuō),Kubernetes是管理容器的工具,OpenStack是管理VM的工具。
OpenStack和KVM
OpenStack是由NASA(美國(guó)國(guó)家航空航天局)和Rackspace合作研發(fā)并發(fā)起的項(xiàng)目,目前已經(jīng)擁有非常完善的生態(tài)。OpenStack基金會(huì)吸引了許多國(guó)際大企業(yè)的加入,2015年7月Google也加入了OpenStack基金會(huì)。
KVM ( Kernel-based Virtual Machine)是一種基于Linux內(nèi)核的開(kāi)源虛擬化技術(shù),可以代替VMWare公司的ESXi技術(shù)。
KVM 是 Linux 的一部分,KVM 于2006年首次公布,并在一年后合并到主流 Linux 內(nèi)核版本中,Linux 2.6.20 及其更新版本都包括 KVM。KVM 可將 Linux 轉(zhuǎn)變?yōu)樘摂M機(jī)監(jiān)控程序,使主機(jī)能夠運(yùn)行多個(gè)隔離的虛擬環(huán)境(VM)。
KVM作為OpenStack默認(rèn)的虛擬機(jī)管理程序,大約有95%的OpenStack平臺(tái)由KVM驅(qū)動(dòng)。OpenStack + KVM成為了應(yīng)用最多的開(kāi)源虛擬機(jī)管理方案。
如上圖所示,KVM是最底層的虛擬機(jī)監(jiān)控程序(hypervisor),用來(lái)模擬CPU的運(yùn)行,由于KVM缺少了對(duì)網(wǎng)絡(luò)和I/O的支持,所以沒(méi)法直接用它。QEMU-KVM是一個(gè)完整的模擬器,是構(gòu)建于KVM上,提供了完整的網(wǎng)絡(luò)和I/O支持。
Openstack不會(huì)直接控制QEMU-KVM,它會(huì)通過(guò)一個(gè)叫 Libvirt 的庫(kù)去間接控制。Libvirt是用于管理虛擬化平臺(tái)的開(kāi)源的API,后臺(tái)程序和管理工具,可以用于管理KVM、Xen、VMware ESX、QEMU和其他虛擬化技術(shù)。
K8S的誕生
Kubernetes這個(gè)單詞來(lái)自于希臘語(yǔ),含義是舵手或領(lǐng)航員。K8S是它的縮寫(xiě),用“8”字替代了“ubernete”這8個(gè)字符。K8S和Google的關(guān)系更大,K8S的前身就是Google自己搗鼓了十多年的Borg系統(tǒng)。前文《云原生技術(shù):CNCF的首位畢業(yè)生Kubernetes 》曾經(jīng)介紹過(guò)。
在Google內(nèi)部,容器技術(shù)已經(jīng)應(yīng)用了很多年,Borg系統(tǒng)運(yùn)行管理著成千上萬(wàn)的容器應(yīng)用。在Borg系統(tǒng)中,每時(shí)每刻都在處理來(lái)自眾多應(yīng)用程序所提交的成百上千的Job, 對(duì)這些Job進(jìn)行接收、調(diào)度、啟動(dòng)、停止、重啟和監(jiān)控。
作為Google的競(jìng)爭(zhēng)技術(shù)優(yōu)勢(shì),一開(kāi)始并不打算將Borg開(kāi)源。但當(dāng)Tiwtter打造出屬于自己的Borg系統(tǒng)(Mesos)時(shí), Google也審時(shí)度勢(shì)推出了來(lái)源于自身技術(shù)理論的開(kāi)源工具。在2014年6月由Google公司正式公布K8S并宣布開(kāi)源。
同年7月,微軟、Red Hat、IBM、Docker、CoreOS、Mesosphere和Saltstack等公司,相繼加入K8S。之后的一年內(nèi),VMware、HP、Intel等公司,也陸續(xù)加入。K8S項(xiàng)目來(lái)源于Borg,可以說(shuō)是凝聚了Borg設(shè)計(jì)思想的精華,也吸取了Borg系統(tǒng)中的經(jīng)驗(yàn)和教訓(xùn)。
Docker技術(shù)起源于2013年3月,是基于LXC為基礎(chǔ)構(gòu)建的容器引擎,通過(guò)namespace和cgourp實(shí)現(xiàn)了資源隔離和調(diào)配,使用分層存儲(chǔ)來(lái)構(gòu)建鏡像。它基于Google公司推出的Go語(yǔ)言實(shí)現(xiàn)。關(guān)于Docker及容器技術(shù)可以參考前文《容器運(yùn)行時(shí):從Docker到Containerd 》。
K8S和Docker這一套技術(shù)組合經(jīng)常配合使用。不過(guò)近期K8S停止了對(duì)Docker容器運(yùn)行時(shí)的支持,默認(rèn)支持的容器運(yùn)行時(shí)是Containered。前文《云原生技術(shù):K8S棄用Docker是怎么回事 》曾經(jīng)介紹過(guò)這件事,感興趣的朋友可以翻一下。
總結(jié)
Openstack的定位是IaaS平臺(tái),主要適用于搭建私有云以及基于私有云的使用的場(chǎng)景。K8S的定位是PaaS平臺(tái),尤其適合微服務(wù)應(yīng)用的部署。