物理機(jī) vs 虛擬機(jī),K8s 環(huán)境下的容器運(yùn)行在什么上更好?
K8S環(huán)境下的容器,是直接運(yùn)行在物理機(jī)上,還是運(yùn)行在隔離的虛機(jī)上比較好?
如果運(yùn)行在物理機(jī)上,那么資源會(huì)最大程度的得到利用,但是會(huì)犧牲一定的隔離性及安全性,特別是在企業(yè)沒有規(guī)范的CI/CD鏡像交付流程時(shí),不同租戶的容器會(huì)相互影響。
如果運(yùn)行在虛擬機(jī)上,那么隔離性和安全性都會(huì)強(qiáng)于前者,但是會(huì)增加管理虛機(jī)的成本,以及降低資源利用率。
這一塊企業(yè)該如何去抉擇考量呢?
問題來自@sazh 某金融單位,下文來自twt社區(qū)眾多同行實(shí)踐經(jīng)驗(yàn)分享,歡迎大家參與交流,各抒己見。
@gavin_zhang 某股份制銀行 系統(tǒng)架構(gòu)師:
就像問題中提到的,兩種方案各有優(yōu)劣,具體方案需要結(jié)合企業(yè)的實(shí)際需求進(jìn)行選擇,選擇時(shí)候可以參考:
性能:使用VM+容器方案,中間多了一層Hypervisor,性能大概損耗10%~20%。
成本:對(duì)于開源解決方案,沒有額外的軟件成本;如果是商用解決方案,VM比物理機(jī)方案多出宿主機(jī)的操作系統(tǒng)和Hypervisor管理軟件都是成本。
可維護(hù)性:由于VM可以安裝Agent進(jìn)行管理,各種管理軟件和配套運(yùn)維工具齊備,可維護(hù)性比物理機(jī)高。另外一方面,VM方案由于部署負(fù)載,問題特別是網(wǎng)絡(luò)和存儲(chǔ)的性能問題定位比較難。
可靠性:需要從兩個(gè)方面看,VM多了一層操作系統(tǒng)和Hypervisor,多了故障點(diǎn),但是VM有可以提供故障遷移的能力,所以可靠性上,各有千秋。
其他:VM方案可以讓容器和虛擬機(jī)應(yīng)用共享同一個(gè)物理機(jī)集群,最大化資源使用率。
綜上所述:
如果企業(yè)已經(jīng)有了一個(gè)比較穩(wěn)定的虛擬機(jī)平臺(tái),而且運(yùn)維經(jīng)驗(yàn)也有了的話,建議還是虛擬機(jī)部署。
如果容器平臺(tái)獨(dú)占物理集群,對(duì)性能要求比較高(特別是網(wǎng)絡(luò)),建議物理集群。
如果成本敏感,而且又計(jì)劃將所有應(yīng)用和服務(wù)部署在容器上,建議物理集群。
@某企業(yè)技術(shù)經(jīng)理:
物理機(jī)的擴(kuò)容成本比較高,效率低。
@海燕 陸金所 系統(tǒng)工程師:
從資源利用率上:1.虛擬機(jī)現(xiàn)在最通用的是VMware,就有一層hypervision的開銷,這部分一般占用系統(tǒng)總開銷的10-15%之間。2.虛擬機(jī)的磁盤和內(nèi)存會(huì)因?yàn)闄C(jī)器被分配而獨(dú)享的方式分配出去了。容器的話磁盤和內(nèi)存雖然requested,limited,但是是用多少,占用多少。
從網(wǎng)絡(luò)上:虛擬機(jī)會(huì)在物理機(jī)器的網(wǎng)絡(luò)上添加一層,在之后網(wǎng)絡(luò)方案的設(shè)計(jì)、網(wǎng)絡(luò)性能的轉(zhuǎn)發(fā)等等多一層開銷。
從運(yùn)維成本:虛擬機(jī)的管理、可能的licence等需要經(jīng)濟(jì)成本。
從安全上:容器是共享宿主機(jī)器的內(nèi)核,每個(gè)應(yīng)用都有可能因?yàn)楸还舳鴮?dǎo)致整個(gè)機(jī)器掛掉。
所以,各有千秋,全看自身關(guān)注點(diǎn)考慮。
@Garyy 某保險(xiǎn) 系統(tǒng)工程師:
虛擬機(jī)也可以像容器一樣使用,但虛擬機(jī)有幾個(gè)顯著的缺點(diǎn)。最關(guān)鍵的是虛擬化有一個(gè)開銷,無論部署的guest虛擬機(jī)的操作系統(tǒng)(OS)有多精簡,在建立新的虛擬機(jī)時(shí)仍然需要完全復(fù)制該操作系統(tǒng)及其整個(gè)配置。容器運(yùn)行自己的初始化進(jìn)程,文件系統(tǒng)和網(wǎng)絡(luò)堆棧,在虛擬機(jī)或裸機(jī)主機(jī)操作系統(tǒng)之上進(jìn)行虛擬化。就其性質(zhì)而言,容器使用的內(nèi)存少于虛擬機(jī)。這是由于它們固有地共享OS內(nèi)核,并且在大多數(shù)情況下它們也使用相同的庫。
管理程序用于共享硬件基礎(chǔ)架構(gòu),允許多個(gè)租戶,孤立的虛擬機(jī)在同一臺(tái)物理機(jī)器上運(yùn)行。虛擬機(jī)模擬基于計(jì)算機(jī)體系結(jié)構(gòu)的計(jì)算機(jī)系統(tǒng),并提供物理計(jì)算機(jī)的功能。這可以提高底層物理機(jī)器的利用率。相比之下,裸機(jī)服務(wù)器是單租戶,這意味著沒有資源共享,可用的CPU和RAM專用于您的進(jìn)程。
例如,使用Hyper-V的報(bào)告開銷介于9-12%之間,這意味著Hyper-V下的客戶機(jī)操作系統(tǒng)通常從可用CPU的88-91%開始。當(dāng)在Hyper-V下運(yùn)行的操作系統(tǒng)被觀察到在主存儲(chǔ)器的大約340MB時(shí),存儲(chǔ)器開銷。當(dāng)然,在客戶操作系統(tǒng)上運(yùn)行進(jìn)程可能會(huì)因缺乏資源而受到影響,并且效率低于直接在主機(jī)(物理服務(wù)器)操作系統(tǒng)上運(yùn)行相同進(jìn)程的效率??紤]到這種虛擬化開銷,容器的工作方式及其好處提示我們檢查直接在主機(jī)上運(yùn)行容器的選項(xiàng)。
虛擬機(jī)使用戶能夠使用訪客映像輕松地在主機(jī)之間移動(dòng)工作負(fù)載(即容器),而裸機(jī)則更難以升級(jí)或移動(dòng)。一個(gè)很好的例子就是回滾。使用裸機(jī)服務(wù)器,回滾機(jī)器狀態(tài)是一項(xiàng)艱巨的任務(wù)。云平臺(tái)(如Amazon云)支持的版本控制和回滾功能可以定期獲取VM的時(shí)間點(diǎn)快照,并在需要時(shí)輕松回滾到該快照。
另一個(gè)例子接受容器有限制,比如官方Docker安裝需要Windows 10 Pro,以及其他Windows Server版本,比如2012甚至2008,都不被支持。當(dāng)您需要升級(jí)和配置操作系統(tǒng)時(shí),這可能會(huì)使裸機(jī)服務(wù)器很痛苦。
另一方面,單租戶裸機(jī)服務(wù)器可以為受到合規(guī)措施限制的組織提供更好的選擇,這可能需要嚴(yán)格的數(shù)據(jù)安全和隱私控制。
@Steven99 軟件架構(gòu)設(shè)計(jì)師:
首先沒有絕對(duì)的好與壞,通常要根據(jù)企業(yè)自身的實(shí)際情況來選擇最適合的方案。
選擇物理機(jī)還是虛擬機(jī),首先要考慮需求,對(duì)業(yè)務(wù)容器的資源需求通常是多少,物理機(jī)往往配置比較高,否則占用機(jī)房機(jī)柜資源也是挺大的浪費(fèi),所以虛擬化一層有虛擬化的好處,當(dāng)然會(huì)有性能損失,但相比來說可能更適合。
如果物理機(jī)配置不高,而容器資源需求又不是簡單的少量彈性多實(shí)例,就沒必要虛擬化一層。
另外就是企業(yè)自身當(dāng)前現(xiàn)狀,不可能重頭來過,所以要基于現(xiàn)實(shí)尋找合適方案,也可能物理機(jī)虛擬機(jī)并行,這都不是目的,目的是更好支撐業(yè)務(wù),所以以業(yè)務(wù)需求為中心,基于企業(yè)現(xiàn)狀來選擇合適方案是比較好的。
@zhuqibs Mcd 軟件開發(fā)工程師:
在我看來,這不是個(gè)問題,是根據(jù)用戶自身?xiàng)l件來選擇的。
如果是自建IDC機(jī)房,建議用實(shí)體機(jī),原因如下:
(1)運(yùn)維成本:k8s本身的網(wǎng)絡(luò)環(huán)境比較復(fù)雜,在這個(gè)復(fù)雜的網(wǎng)絡(luò)上再疊加上復(fù)雜的虛擬機(jī)的網(wǎng)絡(luò),這沒有專有的運(yùn)維人員難以搞定;
(2)可靠性:虛機(jī)構(gòu)建的k8s,有可能共享cpu,一旦宿主機(jī)節(jié)點(diǎn)掛了,導(dǎo)致多個(gè)k8s節(jié)點(diǎn)崩潰,一旦發(fā)生master節(jié)點(diǎn)全掛,容器云就玩完;
(3)軟件成本:IDC機(jī)房自建已經(jīng)投入大量資金,如果再投入VMware、boss等pks的軟件成本太大;
(4)需求缺乏:使用虛擬機(jī)構(gòu)建k8s,其中最大的優(yōu)點(diǎn)是可以客戶化,比如我需要5個(gè)節(jié)點(diǎn)的集群,我可以自己構(gòu)建虛擬機(jī),自建集群,聽上去很美,但現(xiàn)實(shí)很骨感,大部分企業(yè)沒有這種需求。這需求出現(xiàn)在公有云上。
(5)技術(shù)不成熟:我有親身經(jīng)歷,就是某企業(yè)級(jí)容器云,廠商承包了軟硬件的部署,然而其中有大坑,部署后NxT網(wǎng)絡(luò)有問題,導(dǎo)致容器云中的應(yīng)用經(jīng)常“龜速”運(yùn)行,廠商排查了大半年,無法解決。
如果用戶沒有自建機(jī)房,那必然使用虛擬機(jī)的k8s部署方案,有朋友說性能會(huì)下降多少,還真沒感覺出來,不過有很多優(yōu)點(diǎn):
(1) 省錢:現(xiàn)在大部分公有云商家, k8s集群都是不收費(fèi)的,只收底層服務(wù)器的錢;
(2)還是省錢:全托管的k8s,master節(jié)點(diǎn)是公有的大池子,不收費(fèi);
(3)省心:對(duì)于不是互聯(lián)網(wǎng)大公司而言,要養(yǎng)k8s專業(yè)運(yùn)維人員是不小的支出,但公有云沒有這個(gè)煩惱;
(4)autoscale:服務(wù)器是虛擬機(jī),可以自動(dòng)擴(kuò)展,活動(dòng)日不僅能用k8s自己的autoscale,還可以用虛擬機(jī)的autoscale,實(shí)體機(jī)是不可能有后者的;
(5)隨心所欲的自建,你平時(shí)會(huì)有不少測試、實(shí)驗(yàn)的需求,建立一個(gè)k8s就可以了,不像實(shí)體機(jī), 沒資源,你還要去買機(jī)器。