Linux容器的發(fā)展及其未來趨勢(shì)

linux容器是一種在單個(gè)linux主機(jī)上提供多個(gè)獨(dú)立linux環(huán)境的操作系統(tǒng)級(jí)虛擬化技術(shù)。與虛擬機(jī)(vm)不同,容器不運(yùn)行專用客戶操作系統(tǒng)。相反,它們共享主機(jī)操作系統(tǒng)內(nèi)核,并利用客戶操作系統(tǒng)庫來提供所需的操作系統(tǒng)功能。由于沒有專用操作系統(tǒng),容器的啟動(dòng)速度比vm快得多。

Linux容器的發(fā)展及其未來趨勢(shì)

容器利用Linux內(nèi)核特性,如名稱空間、Apparmor、SELinux概要文件、chroot和CGroups,來提供類似VM的隔離環(huán)境。Linux安全模塊確保從容器訪問主機(jī)和內(nèi)核的權(quán)限得到適當(dāng)管理,以避免任何入侵活動(dòng)。此外,如果容器可以在相同的CPU體系結(jié)構(gòu)上運(yùn)行,則容器可以從其主機(jī)操作系統(tǒng)運(yùn)行不同的Linux發(fā)行版。

通常,容器提供了基于各種Linux發(fā)行版創(chuàng)建容器映像的方法、用于管理容器生命周期的API、用于與API交互的客戶端工具、獲取快照的特性、以及將容器實(shí)例從一個(gè)容器主機(jī)遷移到另一個(gè)容器主機(jī)等。

以下是從維基百科和其他來源提取的容器歷史簡(jiǎn)短摘要:

1979年-chroot容器的概念早在1979年就開始使用unix chroot。這是一個(gè)UNIX操作系統(tǒng)系統(tǒng)調(diào)用,用于更改進(jìn)程的根目錄,并將其作為子文件到文件系統(tǒng)中的新位置,該位置僅對(duì)給定進(jìn)程可見。此功能的想法是為每個(gè)進(jìn)程提供隔離的磁盤空間。1982年晚些時(shí)候,這被添加到BSD。

2000年-FreeBSD Jails FreeBSD Jails是由Derrick T. Woolworth在2000年為R&D Associates for FreeBSD推出的早期容器技術(shù)之一。它是一個(gè)類似于chroot操作系統(tǒng)的系統(tǒng)調(diào)用,包括用于隔離文件系統(tǒng)、用戶、網(wǎng)絡(luò)的其他進(jìn)程沙盒功能。因此,它可以為每個(gè)Jails、自定義軟件安裝和配置等提供分配IP地址的方法。

2001年-Linux VServer Linux VServer是另一種jail機(jī)制,可用于安全地分區(qū)計(jì)算機(jī)系統(tǒng)上的資源(文件系統(tǒng),CPU時(shí)間,網(wǎng)絡(luò)地址和內(nèi)存)。每個(gè)分區(qū)稱為安全上下文,其中的虛擬化系統(tǒng)稱為虛擬專用服務(wù)器。

2004年-Solaris容器 Solaris Containers是針對(duì)x86和SPARC系統(tǒng)推出的,首次于2004年2月在Solaris 10的build 51 beta版中公開發(fā)布,隨后在Solaris 10,2005的第一個(gè)完整版本中發(fā)布。Solaris Container是系統(tǒng)資源控制和邊界的組合區(qū)域提供的分離。區(qū)域在單個(gè)操作系統(tǒng)實(shí)例中充當(dāng)完全隔離的虛擬服務(wù)器。

2005年-OpenVZ OpenVZ與Solaris Containers類似,并使用修補(bǔ)的Linux內(nèi)核來提供虛擬化,隔離,資源管理和檢查點(diǎn)。每個(gè)OpenVZ容器都有一個(gè)獨(dú)立的文件系統(tǒng),用戶和用戶組,進(jìn)程樹,網(wǎng)絡(luò),設(shè)備和IPC對(duì)象

2006年-流程容器 Process Containers于2006年在Google實(shí)施,用于限制、統(tǒng)計(jì)和隔離進(jìn)程集合的資源使用(CPU、內(nèi)存、磁盤I/O、網(wǎng)絡(luò)等)。后來,它被重命名為控制組,以避免Linux內(nèi)核上下文中“容器”一詞的多重含義混淆,并合并到Linux內(nèi)核2.6.24中。這顯示了谷歌在容器技術(shù)上的早期參與,以及他們是如何做出貢獻(xiàn)的。

2007年-控制組 如前所述,控制組AKA cgroup是由Google實(shí)現(xiàn)的,并于2007年添加到Linux內(nèi)核中。

2008年-LXC LXC代表Linux容器,它是Linux容器管理器的第一個(gè)、最完整的實(shí)現(xiàn)。它是使用cgroup和Linux名稱空間實(shí)現(xiàn)的。LXC是在liblxc庫中交付的,并為python 3、Python 2、lua、Go、ruby和Haskell中的API提供了語言綁定。與其他容器技術(shù)不同,LXC在Vanilla Linux內(nèi)核上工作,不需要任何補(bǔ)丁。今天LXC項(xiàng)目由佳能有限公司贊助并在此托管。

2011年-守望者 Warden在2011年由CloudFoundry實(shí)施,在初始階段使用LXC,后來又用自己的實(shí)現(xiàn)取而代之。與LXC不同,Warden并沒有與Linux緊密結(jié)合。相反,它可以在任何可以提供隔離環(huán)境的操作系統(tǒng)上工作。它作為守護(hù)程序運(yùn)行,并提供用于管理容器的API。

2013年-lmctfy lmctfy是Google容器的開源版本,提供Linux應(yīng)用程序容器。谷歌啟動(dòng)了這個(gè)項(xiàng)目的目的是提供有保證的性能,高資源利用率,共享資源,過度承諾以及容器的近零開銷。今天kubernetes使用的cadvisor工具是由lmctfy項(xiàng)目啟動(dòng)的。lmctfy的最初版本于2013年10月發(fā)布,2015年,Google決定向libcontainer提供核心lmctfy概念和抽象。結(jié)果現(xiàn)在LMCTFY沒有進(jìn)行積極的開發(fā)。

libcontainer項(xiàng)目最初由docker啟動(dòng),現(xiàn)在已經(jīng)轉(zhuǎn)移到Open Container Foundation

2013年-Docker 截至2016年1月,Docker是最受歡迎和最廣泛使用的容器管理系統(tǒng)。它是作為一個(gè)名為dotCloud的平臺(tái)即服務(wù)公司的內(nèi)部項(xiàng)目開發(fā)的,后來改名為Docker。與Warden類似,Docker在初始階段也使用了LXC,后來用它自己的libcontainer庫替換了LXC。與任何其他容器平臺(tái)不同,Docker引入了用于管理容器的整個(gè)生態(tài)系統(tǒng)。這包括一個(gè)高效的分層容器映像模型,一個(gè)全局和本地容器注冊(cè)表,一個(gè)干凈的REST API,一個(gè)CLI等。在稍后階段,Docker還主動(dòng)實(shí)現(xiàn)了一個(gè)名為Docker Swarm的容器集群管理解決方案。

2014年-Rocket Rocket是一個(gè)與Docker非常相似的項(xiàng)目,用于修復(fù)他們?cè)贒ocker中發(fā)現(xiàn)的一些缺陷。CoreOS提到,他們的目標(biāo)是提供比Docker更嚴(yán)格的安全和生產(chǎn)要求。更重要的是,它是在AppContainer規(guī)范上實(shí)現(xiàn)的,是一個(gè)更加開放的標(biāo)準(zhǔn)。除了Rocket,CoreOS還開發(fā)了Docker和Kubernetes使用的其他幾種與容器有關(guān)的產(chǎn)品。

2016年-windows容器 微軟還主動(dòng)在2015年為基于Windows的應(yīng)用程序(稱為Windows容器)向microsoft Windows Server操作系統(tǒng)添加容器支持。這將與Microsoft Windows Server 2016一起發(fā)布。通過這種實(shí)現(xiàn),Docker可以在Windows上本地運(yùn)行Docker容器,而無需運(yùn)行虛擬機(jī)來運(yùn)行Docker(早期的Docker使用Linux VM在Windows上運(yùn)行)。

截至今天,業(yè)界有一個(gè)重要的趨勢(shì),即從VM遷移到容器以部署軟件應(yīng)用程序。其主要原因是與VM相比,容器提供的靈活性和低成本。谷歌多年來一直使用容器技術(shù)與Borg和Omega容器集群管理平臺(tái)大規(guī)模運(yùn)行Google應(yīng)用程序。更重要的是,Google通過實(shí)施cgroup和參與libcontainer項(xiàng)目為容器空間做出了貢獻(xiàn)。在過去幾年中,Google可能已經(jīng)在使用容器的性能,資源利用率和整體效率方面獲得了巨大的收益。最近,微軟沒有在Windows平臺(tái)上進(jìn)行操作系統(tǒng)級(jí)虛擬化,立即采取措施在Windows Server上實(shí)現(xiàn)對(duì)容器的本機(jī)支持。

在生產(chǎn)環(huán)境中,Docker、Rocket和其他容器平臺(tái)不能在單個(gè)主機(jī)上運(yùn)行,原因是它們暴露于單個(gè)故障點(diǎn)。當(dāng)一個(gè)容器集合在單個(gè)主機(jī)上運(yùn)行時(shí),如果主機(jī)失敗,在該主機(jī)上運(yùn)行的所有容器也將失敗。為了避免這種情況,需要使用容器主機(jī)集群。解決這個(gè)問題的第一個(gè)最開放源碼的容器集群管理平臺(tái)之一是apache Mesos。它最初是作為一個(gè)研究項(xiàng)目在加州大學(xué)伯克利分校開發(fā)的,后來在2012年左右轉(zhuǎn)移到了阿帕奇(Apache)。Google采取了類似的步驟來實(shí)現(xiàn)一個(gè)先進(jìn)的、開放源碼的容器集群管理系統(tǒng),名為Kubernetes。Docker還啟動(dòng)了一個(gè)名為Docker Swarm的解決方案。今天,這些解決方案還處于非常早期的階段,可能需要幾個(gè)月才能完成全部功能集,并在生產(chǎn)環(huán)境中廣泛應(yīng)用。

微服務(wù)是另一項(xiàng)突破性的技術(shù),而不是一種使用容器進(jìn)行部署的軟件體系結(jié)構(gòu)。微服務(wù)是一個(gè)Web服務(wù)的輕量級(jí)實(shí)現(xiàn),與標(biāo)準(zhǔn)Web服務(wù)相比,它的啟動(dòng)速度非常快。這是通過在一個(gè)服務(wù)中打包一個(gè)功能單元并將其嵌入到一個(gè)輕量級(jí)的Web服務(wù)器二進(jìn)制文件中來實(shí)現(xiàn)的。

通過考慮上述事實(shí),我們可以預(yù)測(cè),在未來幾年內(nèi),容器可能會(huì)占用虛擬機(jī),有時(shí)可能會(huì)完全取代它們。去年,我與一些企業(yè)合作,在POC層面實(shí)施基于容器的解決方案。很少有人想接受挑戰(zhàn)并將其投入生產(chǎn)。隨著容器集群管理系統(tǒng)變得更加成熟,這可能會(huì)很快發(fā)生變化。

原文標(biāo)題《The Evolution of Linux Containers and Their Future》

作者:Imesh Gunaratne

譯者:lemon

不代表云加社區(qū)觀點(diǎn),更多詳情請(qǐng)查看原文鏈接

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享