操作系統(tǒng)與容器彈性、可擴展性以及脆弱性的關系有多大?
容器依賴于底層的主機操作系統(tǒng),操作系統(tǒng)內(nèi)核通常是Linux的某個版本。運行在該操作系統(tǒng)之上的所有容器將共享相同的操作系統(tǒng)內(nèi)核,因此容器提供了獨特的福利與脆弱性。
既然服務器上的所有容器共享同樣的主機操作系統(tǒng),那么就不需要在每個容器中安裝一個操作系統(tǒng)(也就是不必每臺虛擬機需要一個單獨的操作系統(tǒng))。這可能會顯著減少容器部署時的主機許可成本。還能夠顯著減少每個操作系統(tǒng)迭代所需要的計算資源—不是10臺虛擬機需要10個主機操作系統(tǒng),大概有30個容器實例的類似系統(tǒng)可能只需要為一個主機操作系統(tǒng)分配CPU、內(nèi)存以及存儲。
但系統(tǒng)中的所有實例同樣完全依賴于單個操作系統(tǒng)。如果操作系統(tǒng)宕機,系統(tǒng)中的所有的容器同樣將無法使用。此外,操作系統(tǒng)遭遇惡意軟件攻擊(或者是攻擊從容器延伸到操作系統(tǒng))可能會傳導給其他容器并以不受控的方式傳播攻擊。這與虛擬機的行為完全不同,虛擬機在很大程度上孤立的而且不受這類依賴關系的影響。當太多的容器實例同時爭奪操作系統(tǒng)的注意力時,大量訪問單個操作系統(tǒng)的I/O子系統(tǒng)可能會導致容器性能退化。
容器遷移選項同樣存在局限性。既然容器工作負載共享同樣的操作系統(tǒng)內(nèi)核,那么容器只能夠被遷移到另一個與現(xiàn)有系統(tǒng)內(nèi)核相兼容的系統(tǒng)中。例如,Linux容器無法被遷移到運行Windows服務器的系統(tǒng)中。當有運行相同操作系統(tǒng)的系統(tǒng)之間擁有大量計算容量時這不是個大問題。但當容器的主機操作系統(tǒng)只占整個環(huán)境的一小部分時可能就會有問題了(比如少量的容器化SUSE Linux操作系統(tǒng)在擁有大量Windows Server 2012數(shù)據(jù)中心內(nèi)運行時)。