作為一個(gè)軟件工程師,工程師或工程師,系統(tǒng)集成商,甚至網(wǎng)絡(luò)工程師,你肯定聽過這樣一句話,用容器、或者的方式來描述一種新技術(shù)已經(jīng)成為一種流行?!啊环N系統(tǒng)級(jí)別的虛擬化技術(shù),允許存在多個(gè)隔離的用戶空間實(shí)例……”
當(dāng)然,作為軟件工程師、工程師或工程師、系統(tǒng)集成商或網(wǎng)絡(luò)工程師,多個(gè)獨(dú)立用戶空間實(shí)例的存在對(duì)你有不同的意義。
但是,從廣義上講,容器提供了一種機(jī)制,允許將應(yīng)用程序(軟件、庫和配置文件等)打包并部署到宿主機(jī)的隔離環(huán)境(用戶空間)中。
每個(gè)容器都獨(dú)立運(yùn)行,但如果容器之間需要進(jìn)行通信。必須為容器之間構(gòu)建通信通道,并在操作系統(tǒng)層面上管理這些通道。通道的連通性有兩個(gè)要素:網(wǎng)絡(luò)拓?fù)溆糜谧R(shí)別各個(gè)容器和是否有權(quán)限建立連接。
隨著更好的安全性、監(jiān)控、自我修復(fù)和可伸縮性機(jī)制的加入,容器在微服務(wù)領(lǐng)域大放異彩,特別是在開發(fā)和部署方面。
但我們是如何走到這一步的呢?這種神秘而又不為人所知的技術(shù)是如何突然出現(xiàn),并在短短幾年內(nèi)主導(dǎo)云計(jì)算、高并發(fā)應(yīng)用和微服務(wù)部署的呢?事實(shí)證明,所有舊的技術(shù)都將變成新的技術(shù)。
故事開始于很久以前,確切地說是1979年。在第7版的Unix系統(tǒng)開發(fā)過程中。那時(shí)候,我還是個(gè)愛惹麻煩的六歲小孩。
在Unix的開發(fā)過程中,引入了一個(gè)稱為系統(tǒng)調(diào)用的新特性。 Kirk 博士建議Bill Joy在1982年3月18日(4.2BSD發(fā)布前17個(gè)月)添加了它。
這個(gè)新系統(tǒng)調(diào)用的本質(zhì)是允許將進(jìn)程及其子進(jìn)程的根目錄更改為文件系統(tǒng)中的新位置。這是文件系統(tǒng)級(jí)別進(jìn)程隔離的開始,即為每個(gè)進(jìn)程隔離文件訪問。系統(tǒng)調(diào)用于1982年正式添加到BSD中。但再次談到就是18年后。
在2000年的最后幾個(gè)月,另一特性出現(xiàn): jails。1999年,經(jīng)生產(chǎn)環(huán)境應(yīng)用后,Poul- Kamp正式將該功能引入到中,并首次在 4.0中發(fā)布,因此許多后代都支持該功能。
主機(jī)托管提供商創(chuàng)建 jails的動(dòng)機(jī)是,出于安全和易于管理的需要,對(duì)其不同客戶的服務(wù)實(shí)現(xiàn)明確的分離。 jails允許系統(tǒng)管理員將一個(gè)計(jì)算機(jī)系統(tǒng)劃分為幾個(gè)獨(dú)立的、較小的系統(tǒng)(稱為jails),并能夠?yàn)槊總€(gè)系統(tǒng)分配單獨(dú)的IP地址和系統(tǒng)配置。
2001年, Gélinas開始了一個(gè)新的項(xiàng)目,其目的是在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)一個(gè)監(jiān)獄機(jī)制,為計(jì)算機(jī)系統(tǒng)提供安全的分區(qū)資源,即文件系統(tǒng)、CPU、網(wǎng)絡(luò)地址和內(nèi)存。沒有進(jìn)程可以對(duì)自己分區(qū)外的分區(qū)發(fā)起拒絕服務(wù)或其他攻擊。Linux 就是此次項(xiàng)目的結(jié)果。
可以通過為Linux內(nèi)核打補(bǔ)丁的方式實(shí)現(xiàn)Linux 操作系統(tǒng)虛擬化機(jī)制。最后一個(gè)穩(wěn)定版補(bǔ)丁是在2006年發(fā)布。根據(jù)維基百科,最近的穩(wěn)定發(fā)布版是2.6.22.19-vs2.2.0.7,發(fā)布于2008年3月14日。最新的預(yù)覽版本是4.9.195-vs2.3.9.8,發(fā)布于2019年10月5日。
在2004年2月的早些時(shí)候,Sun 發(fā)布了容器(包括 zone),作為x86和SPARC系統(tǒng)的操作系統(tǒng)虛擬化技術(shù)實(shí)現(xiàn)。容器的第一個(gè)公開測(cè)試版結(jié)合了系統(tǒng)資源控制和區(qū)域邊界分離,從而能夠利用快照和ZFS克隆等特性。
每個(gè) zone都有自己的節(jié)點(diǎn)名,可以訪問虛擬或物理網(wǎng)絡(luò)接口,并為其分配存儲(chǔ)空間。除了部分配置所需的磁盤存儲(chǔ)之外,對(duì)給定區(qū)域沒有最低的專用硬件要求,它不需要專用的CPU、內(nèi)存、物理網(wǎng)絡(luò)接口或主機(jī)總線適配器。盡管可以為特定的區(qū)域分配特定資源。
是一種用于Linux的操作系統(tǒng)虛擬化技術(shù),它使用一個(gè)經(jīng)過修補(bǔ)的Linux內(nèi)核來進(jìn)行虛擬化、隔離、資源管理和檢查。這些代碼并沒有作為官方Linux內(nèi)核的一部分發(fā)布,但是它的后代在我們的故事中扮演了至關(guān)重要的角色。
2014年,時(shí)任高級(jí)軟件工程師的Kir 在上發(fā)表了一篇博文,他說:“事實(shí)上,早在1999年我們的工程師開始將容器技術(shù)添加到Linux內(nèi)核2.2中。嗯,當(dāng)時(shí)還不叫容器,而稱之為虛擬環(huán)境。這在新技術(shù)中經(jīng)常發(fā)生,只是術(shù)語有所不同而已。(術(shù)語一詞是在2004年由Sun 提出的)。
2000年,他們已經(jīng)將實(shí)驗(yàn)代碼移植到Linux內(nèi)核2.4.,并在2002年1月發(fā)布了 v2.0。隨著時(shí)間的推移,更多的功能被添加進(jìn)來,比如實(shí)時(shí)遷移功能。但是直到2005年,他們才意識(shí)到使用自由開源軟件模式將極大地提高項(xiàng)目的實(shí)用性。因此,作為一個(gè)獨(dú)立的實(shí)體誕生了,作為商業(yè)版的補(bǔ)充(后來更名為 Cloud , 縮寫為PCS)。
2006年,谷歌啟動(dòng)了 項(xiàng)目。該技術(shù)主要由Paul 和Rohit Seth領(lǐng)導(dǎo),旨在限制、計(jì)算和隔離進(jìn)程的資源使用,例如CPU、內(nèi)存、磁盤I/O和網(wǎng)絡(luò)。
2007年, 被重新命名為 或,并最終合并到Linux內(nèi)核v2.6.24中。
2008年,LXC([LinuX ]( LinuX ))是第一個(gè)完整的Linux容器管理器實(shí)現(xiàn)。通過使用和Linux命名空間實(shí)現(xiàn)。它在一個(gè)Linux內(nèi)核工作,不需要任何額外的補(bǔ)丁。LXC結(jié)合了和Linux命名空間,為應(yīng)用程序提供了一個(gè)獨(dú)立的運(yùn)行環(huán)境。
LXC通過創(chuàng)建自己的進(jìn)程和網(wǎng)絡(luò)空間提供虛擬環(huán)境,而不是創(chuàng)建一個(gè)完全的虛擬機(jī)。早期版本的使用LXC作為容器執(zhí)行驅(qū)動(dòng)程序(引擎),盡管LXC在v0.9中是可選的,官方支持最終在 v1.10的發(fā)布中被刪除了。、IBM和谷歌負(fù)責(zé)LXC的內(nèi)核級(jí)工作,由Eric 等人領(lǐng)導(dǎo)。而命名空間團(tuán)隊(duì)則由 , Serge , 等人領(lǐng)導(dǎo)。
2011年,Cloud 啟動(dòng)了項(xiàng)目。在早期階段使用LXC,但后來用它自己的實(shí)現(xiàn)替換了LXC??梢宰鳛槭刈o(hù)進(jìn)程運(yùn)行,并為容器管理提供高級(jí)API,從而在任何操作系統(tǒng)上隔離環(huán)境。作為客戶機(jī)-服務(wù)器模型開發(fā),用于跨多個(gè)主機(jī)管理容器集合。還包括一個(gè)管理、命名空間和進(jìn)程生命周期的服務(wù)。
以Go語言對(duì)進(jìn)行重新編碼的形式發(fā)布,并為Diego提供了容器技術(shù)。反過來,這也是Cloud 的未來架構(gòu)。是一個(gè)平臺(tái)無關(guān)的高級(jí)API,用Go編寫,用于容器創(chuàng)建和管理,具有可插入的后端,可用于許多不同的平臺(tái)和運(yùn)行時(shí)。
2013年,Let Me That For You()作為谷歌的開源項(xiàng)目,提供Linux應(yīng)用程序容器。應(yīng)用程序可以被容器感知,創(chuàng)建和管理自己的子容器。
2015年,谷歌開始將的核心概念貢獻(xiàn)給,就停止了對(duì)項(xiàng)目的開發(fā)維護(hù)工作?,F(xiàn)在是Open 的一部分。是一段與Linux內(nèi)核(如和命名空間)交互的代碼。
是一種Linux容器(LXC)技術(shù),增加了高級(jí)API,提供了一種輕量級(jí)的虛擬化解決方案,可以獨(dú)立運(yùn)行Unix進(jìn)程。它于2013年3月發(fā)布,提供了可預(yù)測(cè)、安全、可重復(fù)、自動(dòng)化的部署軟件(工作負(fù)載)。
它是一種可重復(fù)的、輕量級(jí)的虛擬化解決方案,因?yàn)椤八谶M(jìn)程級(jí)別上是隔離的,而且它有自己的文件系統(tǒng)”。高級(jí)API允許系統(tǒng)管理員在容器上執(zhí)行許多操作:如啟動(dòng)、停止、復(fù)制、等待、提交、附加標(biāo)準(zhǔn)流、列出文件系統(tǒng)更改等。
最初是作為一個(gè)開源平臺(tái)發(fā)布的,名稱是。在僅僅幾個(gè)月的最初版本,大量的開發(fā)人員對(duì)產(chǎn)生了極大的興趣和測(cè)試教程。2013年9月和Red Hat達(dá)成戰(zhàn)略合作伙伴,并在2014年4月15號(hào)正式對(duì)外公布。
因?yàn)楹蚏ed Hat的良好關(guān)系,甚至得到了谷歌、亞馬遜、微軟等商業(yè)公司的更多支持,進(jìn)一步增強(qiáng)了其在容器化領(lǐng)域的影響力。
使用了標(biāo)準(zhǔn)容器概念,它包含一個(gè)軟件組件及其所有依賴項(xiàng),二進(jìn)制文件、庫、配置文件、腳本、虛擬環(huán)境、jar、gem、tar包等等。并且可以在任何支持的x64位Linux內(nèi)核上運(yùn)行。此類容器可以部署在筆記本電腦、分布式基礎(chǔ)設(shè)施、云上,保護(hù)其環(huán)境并使其適用于廣泛的用途,持續(xù)部署、Web部署、數(shù)據(jù)庫集群、SOA等等。
當(dāng)在2013年出現(xiàn)時(shí),容器的受歡迎程度激增。即使在今天,和容器的使用率一直是齊頭并進(jìn)的,甚至有時(shí)它們就表示同一個(gè)意思。2014年6月宣布發(fā)布1.0版本時(shí),該軟件的下載量已達(dá)到驚人的275萬次。
但這一勢(shì)頭并不意味著是所有容器管理平臺(tái)的王者。許多用戶很快指出缺乏安全性,因?yàn)樗褂昧艘粋€(gè)中央守護(hù)進(jìn)程。等公司以此為線索,提供了自己的具有競(jìng)爭力的容器管理軟件,以確保用戶獲得更可靠、更安全的平臺(tái)。用戶還發(fā)現(xiàn)缺少編排工具,這促使了的崛起。
盡管存在缺陷,還是在亞馬遜的幫助下穩(wěn)步前進(jìn),亞馬遜發(fā)布了彈性計(jì)算云(EC2)容器服務(wù)。這使用戶能夠更好地在亞馬遜托管的EC2實(shí)例集群中運(yùn)行容器。
正如之前所做的那樣,在最初的階段也使用了LXC,在以后的版本中用自己的庫替換了原有的容器管理器。但毫無疑問,為容器管理提供了一個(gè)完整的生態(tài)系統(tǒng)。
隨著以容器為基礎(chǔ)的應(yīng)用程序的迅速和廣泛應(yīng)用,系統(tǒng)變得更加復(fù)雜,面臨的風(fēng)險(xiǎn)也增加了。這為容器安全奠定了基礎(chǔ),在2016年,像dirty COW這樣的安全漏洞進(jìn)一步推動(dòng)了這種想法。
這導(dǎo)致了一種轉(zhuǎn)變,在容器應(yīng)用程序和微服務(wù)開發(fā)的每個(gè)階段中,安全性變得異常重要。
2017年初,有大量的工具涌現(xiàn),使容器管理變得容易。
就是一個(gè)明顯的例子。自2016年云原生計(jì)算基金會(huì)(CNCF)采用該技術(shù)以來,、Azure、AWS和公司就宣布了它們對(duì)的支持和兼容性,可以運(yùn)行在它們自己的基礎(chǔ)設(shè)施上并與之集成。
隨著環(huán)境和市場(chǎng)的持續(xù)成長,一些工具已經(jīng)開始定義容器生態(tài)標(biāo)準(zhǔn)。Ceph和REX-Ray定義了容器存儲(chǔ)標(biāo)準(zhǔn),成為了容器網(wǎng)絡(luò)的默認(rèn)實(shí)現(xiàn)。在CI/CD持續(xù)集成/持續(xù)交付方面,完全改變了和大規(guī)模構(gòu)建和部署應(yīng)用程序的方式。
2017年末,容器生態(tài)系統(tǒng)變得獨(dú)一無二,因?yàn)樗怯烧麄€(gè)社區(qū)共同努力以及對(duì)開源項(xiàng)目的支持所推動(dòng)的。公司在2017年將項(xiàng)目捐贈(zèng)給CNCF就是一個(gè)很好的例子。同時(shí),CNCF也接納了的rkt容器運(yùn)行時(shí)。
回到2014年12月,發(fā)布了rkt容器,作為的替代品,提供了應(yīng)用程序容器鏡像的另一種標(biāo)準(zhǔn)格式、容器運(yùn)行時(shí),以及容器發(fā)現(xiàn)和檢索協(xié)議。
的rkt容器的出現(xiàn),使用戶有了更多的選擇,并促成了容器社區(qū)的良性循環(huán)。
谷歌在2003-2004年左右引進(jìn)了Borg系統(tǒng)。一開始只是一個(gè)小規(guī)模的項(xiàng)目,只有3-4個(gè)人。
Borg是一個(gè)大型內(nèi)部集群管理系統(tǒng),用于運(yùn)行數(shù)十萬個(gè)作業(yè),來自數(shù)千個(gè)不同的應(yīng)用程序,并且跨許多集群,每個(gè)集群最多有數(shù)萬臺(tái)機(jī)器。
隨著Borg的引入,谷歌也隨之推出了Omega集群管理系統(tǒng)。Omega是一款靈活、可伸縮的調(diào)度器,可用于大型集群。谷歌在2017年推出了作為Borg的開源版本。在短時(shí)間內(nèi),變得越來越成熟。
2015年7月21日 v1.0發(fā)布。在發(fā)布的同時(shí),谷歌與Linux基金會(huì)合作,成立了云原生計(jì)算基金會(huì)(CNCF)。CNFC表示,其目標(biāo)是建立可持續(xù)的生態(tài)系統(tǒng),并圍繞一系列高質(zhì)量的項(xiàng)目建立一個(gè)社區(qū),這些項(xiàng)目將成為微服務(wù)架構(gòu)的一部分。
發(fā)展迅速,支持越來越復(fù)雜的應(yīng)用程序類別,允許大量企業(yè)過渡到混合云和微服務(wù)。在2017年哥本哈根的上,公司宣布他們也將支持。
微軟的Azure和亞馬遜的AWS也很快推出了自己的服務(wù),分別為AKS和EKS,旨在與ECS競(jìng)爭。也是CNCF的第一個(gè)項(xiàng)目,并擁有越來越多的第三方系統(tǒng)集成服務(wù)提供商。
2018年,容器化最終成為現(xiàn)代軟件基礎(chǔ)設(shè)施的基礎(chǔ)。有史以來第一次被大量企業(yè)使用。截至2018年初,上的項(xiàng)目擁有超過1500名貢獻(xiàn)者,是最重要的開源社區(qū)之一,擁有超過27000顆星星。到2020年7月初,這個(gè)數(shù)字已經(jīng)增長到超過62000顆。
令人難以置信的受歡迎程度,讓更多的企業(yè),如AWS、、谷歌、Azure、、和都開始提供基于的管理平臺(tái)。
基礎(chǔ)設(shè)施提供商ug8.0所需的提供商守護(hù)程序停止運(yùn)行,如也開始采用。2018年底,宣布收購咨詢公司,后者幫助企業(yè)部署和管理。容器化領(lǐng)域還出現(xiàn)了新的混合技術(shù),將虛擬機(jī)級(jí)別的隔離性和容器的快速相結(jié)合的技術(shù)。
開源項(xiàng)目,如Kata容器、和Nabla嘗試提供更安全的容器運(yùn)行時(shí),以及輕量級(jí)的虛擬機(jī),這些虛擬機(jī)的執(zhí)行方式與容器相同,但提供了更強(qiáng)的工作負(fù)載隔離。
2019年,容器生態(tài)系統(tǒng)發(fā)生了重大變化。新的運(yùn)行時(shí)引擎試圖取代了原來的運(yùn)行時(shí)引擎。最著名的開源容器運(yùn)行時(shí)引擎是CRI-O,一種針對(duì)的輕量級(jí)運(yùn)行時(shí)引擎。
此外,2019年還發(fā)生了一件大事。當(dāng)年 被收購并拆分,導(dǎo)致 Swarm的壽命被延長2年。與此同時(shí),我們也看到了rkt容器引擎的受歡迎程度持續(xù)下降,盡管它仍然是CNCF穩(wěn)定版的一部分。
與此同時(shí),加注對(duì)的投入,先是收購了,然后收購了 (包括PAS和PKS)。這一舉措旨在為企業(yè)提供私有云服務(wù)。
這一年,無服務(wù)器技術(shù)平臺(tái)也取得了進(jìn)步,比如[1](基于的無服務(wù)器工作負(fù)載管理平臺(tái))得到了組織的青睞。
2019年推出的基于的混合云解決方案,如IBM Cloud Paks[2], [3],Aws [4]和[Azure Arc]("" Azure Arc)。這些云平臺(tái)模糊了傳統(tǒng)云和on-prem環(huán)境之間的界限,使客戶可以管理on-prem和云上的集群。
2020年,企業(yè)對(duì)容器和相關(guān)技術(shù)的采用大多圍繞著新的實(shí)現(xiàn)。雖然系統(tǒng)集成商確實(shí)對(duì)現(xiàn)有的工作負(fù)載表現(xiàn)出了相當(dāng)大的興趣,但這很難證明是合理的。
考慮到在遺留應(yīng)用系統(tǒng)中應(yīng)用容器或者微服務(wù),需要進(jìn)行大量的重構(gòu),這可能會(huì)在短期內(nèi)阻礙這些技術(shù)的持續(xù)發(fā)展。也就是說,新應(yīng)用系統(tǒng)會(huì)更傾向于使用容器技術(shù),因?yàn)槿萜骶幣殴ぞ撸ㄈ纾┱诓粩喑霈F(xiàn)并持續(xù)改進(jìn)。
已經(jīng)成為每個(gè)人都想使用的容器編排工具,但這并不是說,其他的容器編排工具,如 Swarm和的Mesos會(huì)消失。
甚至連容器編排工具本身也在不斷進(jìn)化,從集中的容器編排到與云內(nèi)或云間其他集群無縫協(xié)作的分布式集群。
根據(jù)最新的State of (2020)[5] 報(bào)告ug8.0所需的提供商守護(hù)程序停止運(yùn)行,的使用率從2018年的27%上升到2019年的48%。57%的受訪者表示運(yùn)行的集群少于10個(gè),多達(dá)60%的受訪者表示有一半的容器化工作負(fù)載運(yùn)行在上。
盡管給企業(yè)帶來了明顯的好處,特別是那些需要大規(guī)模部署應(yīng)用程序和微服務(wù)的企業(yè),但并不經(jīng)常部署在云中。相反,報(bào)告顯示60%的企業(yè)將部署在on-環(huán)境中,云部署的比例緊隨其后,大約42%,而其他部署模式則更低。
對(duì)容器尤其是持樂觀態(tài)度的一個(gè)原因是,這些早期采用者獲得了顯著的好處。95%的受訪者表示,采用系統(tǒng)可以帶來明顯的好處,56%的受訪者將資源利用列為系統(tǒng)最大的好處,53%的受訪者表示縮短軟件開發(fā)周期是最大的好處。
其他明顯的好處包括獨(dú)立的應(yīng)用程序、支持遷移到云以及降低公共云成本??傮w而言,報(bào)告顯示了開發(fā)和運(yùn)維方面的積極成果。這個(gè)故事始于41年前,在Unix 7(簡稱V7)的開發(fā)過程中,從到容器的道路是漫長而曲折的,它對(duì)大規(guī)模應(yīng)用程序和微服務(wù)的真正影響現(xiàn)在才開始顯現(xiàn)。
原文:From to to and (翻譯:鐘濤)
你可能還喜歡
點(diǎn)擊下方圖片即可閱讀
基于+的高可用集群
快速部署企業(yè)內(nèi)部知識(shí)管理平臺(tái)參考資料[1]
:
[2]
IBM Cloud Paks:
[3]
:
[4]
Aws :
[5]
State of 2020: