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