超越Docker和Kubernetes:容器生態(tài)系統(tǒng)不斷發(fā)展
在過去幾年,容器走過了漫長的道路–從利基技術(shù)發(fā)展成為部署現(xiàn)代云原生應用和服務的關(guān)鍵平臺,而隨著部署的增長,這個生態(tài)系統(tǒng)也在不斷發(fā)展。
容器作為一個概念其實已經(jīng)存在很多年,它一直是作為分配計算機資源的一種方法,這也是虛擬機的功能。
這兩者的區(qū)別是,虛擬化在裸機級別運行,容器是從操作系統(tǒng)內(nèi)核交付,并且,本質(zhì)上為每個單獨應用或代碼模塊提供單獨的執(zhí)行環(huán)境。
曾經(jīng)企業(yè)主要是使用虛擬機,直到Docker給容器注入新生命力—通過將容器技術(shù)與工具相結(jié)合,使其成為敏捷開發(fā)的理想工具。
由于容器比虛擬機更輕且速度更快,企業(yè)也喜歡使用容器來部署基于微服務的架構(gòu)和部署DevOps舉措。
自五年前Docker平臺推出以來,容器生態(tài)系統(tǒng)已經(jīng)迅速擴張。這是好事情,因為這項技術(shù)最初缺乏很多支持工具和功能(例如協(xié)調(diào)和負載均衡)–這些工具都圍繞虛擬機創(chuàng)建,這也促使開發(fā)人員迅速填補這個空白。
構(gòu)建生態(tài)系統(tǒng)
我們看到,在編排方面,Kubernetes已經(jīng)在很大程度贏得了這場比賽。它不僅用于越來越多的內(nèi)部部署容器平臺,而且所有主要云服務提供商提供容器服務時都將Kubernetes作為編排層。
與此同時,支持容器的底層技術(shù)也建立了更多的標準化,這些技術(shù)包括容器運行時(實際運行容器的引擎)以及用于存儲和分發(fā)容器映像的文件格式。
在運行時方面,在Linux基金會支持下成立的開放容器倡議組織(OCI)負責對容器以及進行監(jiān)督,并且,Docker貢獻了runc:基于其自身技術(shù)的參考部署,其中提供基本功能。
隨后Docker將runc整合到名為containerd的功能更豐富的運行時中,以供自己使用,并將其提交給云原生計算基金會(CNCF),這是監(jiān)督Kubernetes的機構(gòu)。
Docker也在自己的產(chǎn)品中使用containerd。由于它包含runc,containerd仍然與OCI規(guī)范兼容。
在一段時間后,OCI成立了一個新的工作組,旨在為標準容器映像格式創(chuàng)建規(guī)范。Dcoker也參與到創(chuàng)建規(guī)范的工作中,并將產(chǎn)生的OCI格式整合到其自己的平臺,作為Docker V2映像。
因此,容器運行時和容器映像都開始有自己的標準。所有容器運行時最終都需要遵守OCI標準,這意味著如果基礎(chǔ)設(shè)施的其他部分也兼容OCI的話,則應該可相對容易地混合和匹配來自不同來源的軟件組件作為容器部署的一部分。
解決容器安全難題
那些想要使用容器的企業(yè)非常關(guān)注容器的安全性,因為它們并不提供虛擬機部署中虛擬管理程序?qū)崿F(xiàn)的實例之間的隔離級別。
這是因為所有在主機運行的容器都是通過調(diào)用相同共享內(nèi)核來訪問資源,這使得潛在漏洞可能影響所有容器。
目前容器領(lǐng)域正在試圖以不同方式解決這個問題。例如,OpenStack支持的Kata容器項目最近發(fā)布了1.0版,它的策略是創(chuàng)建類似于容器的輕量級虛擬機。
它通過使用遵守OCI規(guī)范的虛擬機管理程序來實現(xiàn)此目的,并將外部世界視為容器運行時。該管理程序會創(chuàng)建一個輕量級虛擬機,封裝最小的操作系統(tǒng)內(nèi)核和實際容器。
這與一些現(xiàn)有平臺整合容器支持的方式類似。Pivotal Container Service(PKS)在VMware的vSphere或者谷歌Cloud Platform的虛擬機內(nèi)運行容器,而亞馬遜的AWS運行多個容器服務,所有容器服務將容器放在EC2實例內(nèi)。
這些都是用標準虛擬機作為容器主機,而Kata Containers似乎是用輕量級虛擬機偽裝作為容器運行時。
與此同時,谷歌已經(jīng)開發(fā)出另一種解決方案來提高容器安全性,即通過gVisor開源項目。在這里他們沒有使用虛擬機管理程序,而是充當主機內(nèi)核和容器應用之間的額外內(nèi)核。
gVisor內(nèi)核具有正常用戶級特權(quán),并可攔截來自應用的系統(tǒng)調(diào)用,通過執(zhí)行該操作來為它們提供服務。換句話說,gVisor就像是代理或者緩沖層,阻止應用直接訪問主機內(nèi)核或者其他資源。
然而,gVisor和Kata Containers都帶來增加額外性能開銷和潛在應用兼容性問題。對于gVisor更是如此,谷歌警告稱它不會支持每次Linux系統(tǒng)調(diào)用。
另外,容器生態(tài)系統(tǒng)仍在繼續(xù)擴張,第三方工具和平臺在不斷涌現(xiàn),以填補構(gòu)建容器基礎(chǔ)設(shè)施所需的缺失部分。
其中新工具可為特定工作負載提供持久性存儲,例如StorageOS或者PortWorx。其他工具還提供監(jiān)視和高級網(wǎng)絡(luò)功能,有些工具則集中在構(gòu)建容器映像存儲庫。
另外,其他供應商和項目專注于圍繞容器構(gòu)建平臺來創(chuàng)建交鑰匙式交付管道,以支持現(xiàn)代云原生應用(例如CircleCl和GoCD)的整個構(gòu)建、測試和部署。
可以說,很多像亞馬遜這樣的云服務提供商已經(jīng)提供這種功能,而傳統(tǒng)平臺即服務產(chǎn)品(例如Red Hat的OpenShift)已經(jīng)變成圍繞容器的開發(fā)者平臺。
不過,目前容器可能不像虛擬機那樣成熟,特別是在管理和編排領(lǐng)域,但這個市場正在迅速發(fā)展,容器正成為云計算時代應用開發(fā)的***工具。

























