RHCA/UploadFiles_1744/201706/2017062915045120.png" target=_blank>
容器就是Linux。這套過(guò)去二十年來(lái)對(duì)數(shù)據(jù)中心產(chǎn)生革命性影響的操作系統(tǒng)現(xiàn)在正在徹底改變我們?cè)谠浦邪b、部署和管理應(yīng)用的方式。隨著越來(lái)越多的組織機(jī)構(gòu)認(rèn)識(shí)到容器能夠?yàn)樗麄児芾響?yīng)用和基礎(chǔ)設(shè)施的方式帶來(lái)許多優(yōu)勢(shì),人們對(duì)容器技術(shù)的興趣在不斷增長(zhǎng)。
說(shuō)到底,容器是Linux的一個(gè)特性。十多年來(lái),容器已經(jīng)成為L(zhǎng)inux操作系統(tǒng)的一部分,而這一切甚至可以追溯到UNIX時(shí)代。這就是為什么最近推出了Windows容器,但我們看到的大多數(shù)仍然是Linux容器。這也意味著如果你正在部署容器,你的Linux選擇將至關(guān)重要。
在說(shuō)容器就是Linux時(shí),這到底這意味著什么,以及對(duì)您的重要性體現(xiàn)在哪里。
容器就是Linux
Linux容器只不過(guò)是在Linux上運(yùn)行的進(jìn)程。它與其他容器化的進(jìn)程共享同一個(gè)主機(jī)內(nèi)核。那么到底是什么東西讓這一進(jìn)程成為一個(gè)“容器”呢?
首先,通過(guò)使用內(nèi)核命名空間,每個(gè)容器化的進(jìn)程與運(yùn)行在同一個(gè)Linux主機(jī)上的其他進(jìn)程相隔離。內(nèi)核命名空間提供一個(gè)虛擬化的世界,供容器進(jìn)程在其中運(yùn)行。例如,“PID”命名空間使得某個(gè)容器化的進(jìn)程只能看到該容器內(nèi)的其他進(jìn)程,而不能看到該共享主機(jī)上的其他容器的進(jìn)程。其他安全隔離功能還由諸如刪除功能(dropped capability)、只讀安裝(read-only mount)和seccomp等內(nèi)核功能來(lái)提供。SELinux在紅帽企業(yè)版Linux等發(fā)行版中提供了額外的文件系統(tǒng)安全隔離。這種隔離有助于確保一個(gè)容器不能濫用其他容器或者攻破底層主機(jī)。
第二,通過(guò)使用Linux控制組(或“cgroup”),每個(gè)容器進(jìn)程(內(nèi)存、cpu、I/O等)所消耗的資源僅限于指定的范圍內(nèi)。這有助于消除嘈雜鄰居的問(wèn)題,防止某個(gè)容器過(guò)度使用Linux主機(jī)資源,而使其他容器得不到資源保證。
這種能力既隔離了容器化的進(jìn)程,又限制了它們所消耗的資源,從而能夠讓多個(gè)應(yīng)用容器更安全地運(yùn)行在同一個(gè)共享的Linux主機(jī)上。隔離與資源限制相組合,使得一個(gè)Linux進(jìn)程成為一個(gè)Linux容器。換句話說(shuō),容器就是Linux。下面我們來(lái)進(jìn)一步探討一下這句話的含義。
容器安全性就是Linux安全性
一旦了解了容器的工作原理,就容易理解“容器安全性就是Linux安全性”這句話。多個(gè)容器在同一個(gè)共享主機(jī)上安全運(yùn)行的能力,其重要性不亞于內(nèi)核在容器與底層主機(jī)操作系統(tǒng)之間提供多租戶隔離的能力。這包括Linux內(nèi)核命名空間以及其他安全功能,例如SELinux,其由內(nèi)核及您所選擇的Linux主機(jī)發(fā)行版來(lái)提供;同時(shí)也包括Linux發(fā)行版本身的安全性和可靠性。最終,這意味著,您的容器與其運(yùn)行時(shí)所依賴的Linux主機(jī)同樣安全。
另一個(gè)重要因素是確保容器中運(yùn)行的內(nèi)容是可信的。Docker開(kāi)源項(xiàng)目為不可變?nèi)萜麋R像引入了一種分層封裝格式,但用戶仍然需要確保他們所運(yùn)行的鏡像是安全的。每個(gè)容器鏡像由一個(gè)基本的Linux用戶空間層以及依賴于應(yīng)用的其他層組成。例如,對(duì)于紅帽企業(yè)版Linux 7和紅帽企業(yè)版Linux 6,紅帽提供了基本鏡像,同時(shí)還通過(guò)認(rèn)證容器注冊(cè)表,為各種語(yǔ)言runtimes、中間件、數(shù)據(jù)庫(kù)等提供了大量的認(rèn)證鏡像。紅帽聘請(qǐng)了大批工程師從已知的源代碼中封裝鏡像內(nèi)容,并努力確保這些內(nèi)容不存在漏洞。紅帽還提供安全監(jiān)控功能,以便在檢測(cè)到新問(wèn)題時(shí),能夠獲得修復(fù)程序并發(fā)布更新的容器鏡像,進(jìn)而使企業(yè)用戶能夠更新他們運(yùn)行在這些容器上的應(yīng)用。
容器性能就是Linux性能
我們還能很容易看到容器性能如何與Linux性能相關(guān)聯(lián)。一個(gè)容器鏡像就是一個(gè)用于對(duì)容器實(shí)例進(jìn)行實(shí)例化的分層Linux文件系統(tǒng)。對(duì)所使用的Linux文件系統(tǒng)的選擇 – OverlayFS、Device Mapper、BTRFS、AUFS等,可能會(huì)影響到有效地構(gòu)建、存儲(chǔ)和運(yùn)行這些鏡像的能力。性能以及這方面的相關(guān)問(wèn)題通常會(huì)涉及到Linux主機(jī)文件系統(tǒng)的故障排除。
紅帽公司已經(jīng)在與云原生計(jì)算基金會(huì)(CNCF)合作,在OpenShift上大規(guī)模地測(cè)試Kubernetes上的容器部署。在我們最近的性能基準(zhǔn)測(cè)試中,在一個(gè)由100臺(tái)物理服務(wù)器組成的裸機(jī)集群上以及一個(gè)由2048臺(tái)虛擬機(jī)組成的虛擬機(jī)集群上測(cè)試了容器。當(dāng)您閱讀這些測(cè)試結(jié)果時(shí),您很快就能夠發(fā)現(xiàn)容器性能與Linux性能之間有多么密切的關(guān)系。在紅帽公司,依靠我們的Linux性能和規(guī)模工程團(tuán)隊(duì)的技能和經(jīng)驗(yàn),并與客戶和社區(qū)開(kāi)展合作,以確定大規(guī)模運(yùn)行容器的最佳配置。
容器的可靠性就是Linux的可靠性
最終,如果企業(yè)為其生產(chǎn)應(yīng)用采用了容器,他們當(dāng)然需要知道他們的容器是否可靠地運(yùn)行。無(wú)論是關(guān)于安全性、性能、可擴(kuò)展性或是一般質(zhì)量方面的問(wèn)題,容器的可靠性總是與其運(yùn)行的Linux發(fā)行版的可靠性,以及其背后的供應(yīng)商有莫大的關(guān)系。容器代表了一種在Linux上封裝及運(yùn)行應(yīng)用的新方法。紅帽公司在支持商業(yè)機(jī)構(gòu)和公共部門(mén)把Linux用于關(guān)鍵任務(wù)應(yīng)用方面具有悠久歷史?煽啃允羌t帽企業(yè)版Linux的標(biāo)志,也是它能夠成為企業(yè)中Linux事實(shí)上的標(biāo)準(zhǔn)的原因。這種可靠性也是紅帽企業(yè)版Linux正在成為在企業(yè)環(huán)境中運(yùn)行Linux容器標(biāo)準(zhǔn)的原因。
文章來(lái)源 紅帽