容器技術擁有快速擴展、靈活性和易用性等諸多優勢,但是其并非適合應用在所有環境當中。
容器技術在傳統的虛擬化技術當中引入了大量的最新發展趨勢,比如云計算、在應用程序開發方面進行的相應調整以及像Docker這樣強大的新型容器架構。在奧蘭多舉行的2015 Gartner IT運維戰略和解決方案峰會上,Gartner副總裁兼著名分析師Thomas Bittman以容器技術為主題進行了演講。Bittman的演講列舉了一些容器技術的優勢,但是同時也指出了其存在的很多缺陷。下面我們將逐個分析這些缺陷并且討論如何進行解決。
1、不能應用在所有場景當中
Bittman認為雖然容器技術擁有很強的兼容性,但是仍然不能完全取代現有的虛擬機環境。就像虛擬化技術剛剛出現的時候,一些傳統的應用程序更加適合運行在物理環境當中一樣,現在,一些應用程序并不適合運行在容器虛擬化環境當中。
比如,容器技術非常適合用于開發微服務類型的應用程序——這種方式將復雜的應用程序拆分為基本的組成單元,每個組成單元部署在獨立的容器當中,之后將相關容器鏈接在一起,形成統一的應用程序??梢酝ㄟ^增加新的組成單元容器的方式對應用程序進行擴展,而不再需要對整個應用程序進行重新開發。
但是另一方面,一些應用程序只能以統一整體的形式存在——它們在最初設計時就采用了這種方式,很難實現高擴展性和快速部署等特性。對于這種情況來說,容器技術反而會對應用負載造成限制。最好的檢驗方式就是進行大量試驗,查看哪種現有應用程序能夠通過容器技術發揮最大優勢。一般來說,新的應用程序研發過程很可能從容器技術當中獲益。而那些不能被容器化的應用程序仍然可以運行在傳統hypervisor的全功能虛擬機當中。一位來自知名保險提供商的IT架構師表示應該放緩應用程序容器化趨勢。“雖然容器技術非常具有吸引力,但是軟件開發團隊需要一段時間及時跟進,才能夠真正地高效利用容器技術所帶來的優勢。”
2、難以解決依賴關系問題
大多數虛擬機都是相對獨立的,每臺虛擬機都包含自己的操作系統、驅動和應用程序組件。只要擁有合適的hypervisor,還可以將虛擬機遷移到其他任何虛擬化平臺當中。但是對比來說,容器運行在物理操作系統之上,相互之間共享大量底層的操作系統內核、庫文件以及二進制文件。Bittman進一步解釋說容器之間的現有依賴關系可能會限其在服務器之間的可移植性。比如,位于Linux操作系統上的Docker容器就不能運行在當前版本的Windows Server操作系統上。
對于這種問題來說,當前的解決方案并不止一種——容器可以在數秒鐘之內完成復制過程,操作系統也在不斷發展,開始提供“micro OS”和“nano OS”等多種類型,提供了高穩定性以及快速重啟等特性。從容器自身的角度來說其更加適合于這些環境,只要數據中心當中的其他服務器可用,仍然能夠對其進行遷移。
隨著操作系統的逐漸發展,這些依賴關系問題也在不斷得到解決。比如,Windows Server 2016承諾同時支持Docker和原生Hyper-V容器。除了Docker之外,還有許多其他容器平臺可供選擇,比如LXC、Parallels Virtuozzo、Joyent、Canonical LXD、Spoon等等,VMware也有可能隨時加入到競爭行列中來。
3、較差的隔離性
基于hypervisor的虛擬機擁有完善的隔離特性,由于系統硬件資源完全是虛擬的,由hypervisor分配給虛擬機使用,因此bug、病毒或者入侵有可能影響一臺虛擬機,但是不會蔓延到其他虛擬機上。
容器的隔離性較差因為其共享同一個操作系統內核以及其他組件,在開始運行之前就已經獲得了統一的底層授權(對于Linux環境來說通常是root權限)。因此,漏洞和攻擊更加有可能進入到底層的操作系統,或者轉移到其他容器當中——潛在的傳播行為遠比最初的事件更加嚴重。
盡管容器平臺也在不斷發展,開始隔離操作系統權限、減少脆弱的安全特性等,但是Bittman仍然推薦管理員通過在虛擬機當中運行容器來提升安全性。比如,可以在Hyper-V當中部署一臺Linux虛擬機,在Linux虛擬機當中安裝Docker容器。這樣即便虛擬機當中的容器出現問題,這種漏洞也只存在于當前虛擬機當中——限制了潛在的受攻擊范圍。
4、潛在的蔓延問題
就像虛擬機生命周期管理對于hypervisor環境來說十分重要一樣,生命周期管理對于容器來說也是至關重要的。容器可以被大量快速復制,這是容器技術的重要優勢之一,但是也有可能在管理員沒有注意到的情況下消耗大量計算資源。如果應用程序所在的容器不再使用時能夠被及時刪除,那么情況還不算太壞。但是如果對一個容器化應用程序進行擴展之后忘記將其縮減回之前的規模,那么將會為企業帶來大量的(并且不必要的)云計算開銷。Bittman還表示云提供商十分高興看到這種情況發生——因為他們就是通過出租計算資源而獲利的——因此用戶需要自己關注容器的部署情況。
5、缺乏工具
對于這個行業來說,用于監控和管理容器的工具種類仍然十分缺乏。這并不是一種最近產生的現象,在基于hypervisor虛擬化的早期也曾經出現過可用工具十分匱乏的情況。就像優秀的虛擬機監控和管理工具逐漸增多一樣,容器管理領域也在不斷出現新的工具。其中包括谷歌的開源Docker管理工具Kubernetes,此外DockerUI使用基于web的前端界面替換Linux的命令行功能,Logspout能夠將容器日志匯集到一個集中位置。
Bittman建議管理員可以通過將容器運行在虛擬機當中緩解容器管理工具缺乏的問題,這樣就可以使用虛擬機工具來完成一些監控和管理功能了。因為虛擬機工具更加成熟和多樣化,因此在容器工具逐漸成熟之前,可以將其作為臨時的替代產品。
Bittman對于容器技術充滿熱情,認為其能夠快速交付輕量級的應用程序,提升資源使用效率和擴展性;容器自身(非虛擬化I/O)還能夠實現更好的性能表現;已經擁有像Docker這樣優秀的開發架構,像GitHub這樣吸引廣泛關注的共享和協作平臺。但是容器并不是一種能夠滿足所有虛擬化任務的解決方案,只是虛擬化工具箱提供的另外一種工具——通常可以和傳統虛擬機很好地協同工作。