## 標(biāo)題: 容器宿主機(jī)到底怎么選慢哈,你只需要知道這5點(diǎn).
##前言容器宿主機(jī)的選擇需要考慮如下幾個問題1. 用物理機(jī)還是虛擬機(jī)?2. 用多大規(guī)格的服務(wù)器椭懊?3. CPU和內(nèi)存配比多少合理施流?4. 一個集群,需要放多少節(jié)點(diǎn)代咸?5. 主機(jī)越大越好,還是越小越好成黄?這些問題呐芥,每一個單獨(dú)拿出來,都不是很好回答奋岁,并且每個企業(yè)實(shí)際情況不盡相同思瘟,我將結(jié)合我們在生產(chǎn)環(huán)境的實(shí)際使用經(jīng)驗(yàn),來談一談如何選擇容器的宿主機(jī)闻伶,你從本文中可以獲得一些啟發(fā)滨攻,來規(guī)劃符合自己的容器集群。 ###1. 采用物理機(jī)還是虛擬機(jī);采用物理機(jī)的好處1. 資源利用率高采用虛擬機(jī)的好處1. 重啟速度快光绕。2. 規(guī)格可以自由確定.并且方便修改女嘲。3. 方便重建采用虛擬機(jī),可以獲得虛擬機(jī)帶來的諸多好處诞帐,采用物理機(jī)唯一的優(yōu)勢是資源利用率高欣尼。考慮到資源利用率并不是問題停蕉, 最終采用虛擬機(jī)愕鼓。 ####為什么資源利用率不是問題?從http://openskill.cn/article/88這里的測試數(shù)據(jù)可以看出慧起, KVM 虛擬化1. 虛擬機(jī)相對物理機(jī)的 CPU 性能損失在 1% 以內(nèi)2. 內(nèi)存幾乎無損耗.3. virtio 網(wǎng)絡(luò)幾乎無損耗.4. 磁盤 損耗受影響因素較多拒啰,推薦使用 ext4, qcow2, writeback 緩存, virtio 驅(qū)動完慧。磁盤 從其他渠道獲取的信息來看。 大致有 12% 的損耗剩失。實(shí)際生產(chǎn)需要落地的數(shù)據(jù)屈尼,放在共享存儲上 (cephfs, moosefs) , 其iops 由存儲系統(tǒng)提供拴孤,本地磁盤只用來存儲鏡像及容器運(yùn)行的臨時數(shù)據(jù)脾歧。 對磁盤的性能要求,無需特別苛刻演熟。 ####為什么考慮重啟速度鞭执?在實(shí)際的運(yùn)維過程中,我們發(fā)現(xiàn)部分場景下芒粹,會出現(xiàn)主機(jī)卡死兄纺,或者docker進(jìn)程卡死, 這時化漆,最快恢復(fù)業(yè)務(wù)的方法是重啟主機(jī)估脆。 容器在主機(jī)重啟后,可以自動恢復(fù)座云,因此可以做到在1到2分鐘內(nèi)快速恢復(fù)業(yè)務(wù)疙赠。這一點(diǎn)太重要了,物理機(jī)重啟由于需要做各種硬件檢測朦拖,重啟時間一般在5到10分鐘圃阳, 虛擬機(jī)重啟一般在1分鐘以內(nèi) , 物理機(jī)顯然無法滿足需求璧帝。 ####為什么重建能力很重要捍岳?容器平臺經(jīng)常需要更新操作系統(tǒng),或者根據(jù)需要調(diào)整主機(jī)規(guī)格1. 運(yùn)行一段時間后,發(fā)現(xiàn)內(nèi)存配置偏少了祟同, 需要添加內(nèi)存作喘。這時候申請一臺新的機(jī)器加入到集群中,將舊機(jī)器下線即可晕城。2. 運(yùn)行多年的 ubuntu 12.04 官方已經(jīng)不再維護(hù)抓于, 需要全量替換,工作量相當(dāng)大潦嘶。好的方法就是使用全新的服務(wù)器替換舊服務(wù)器巷屿。3. 當(dāng)發(fā)生故障,主機(jī)無法恢復(fù)時滤蝠, 直接申請新服務(wù)器加入集群即可豌熄。####2. 容器主機(jī)的規(guī)格是如何確定的?> 我們起初上線了 8 核 32G規(guī)格的虛擬機(jī)物咳。 運(yùn)維過程中發(fā)現(xiàn)了如下的問題1. 部分應(yīng)用啟動時就需要16G 內(nèi)存锣险。 32G 的虛擬機(jī)顯得捉襟見肘,一臺主機(jī)只能運(yùn)行一個此類應(yīng)用览闰。 出故障時芯肤,集群中可能沒有滿足條件的主機(jī)可供遷移。2. 系統(tǒng)彈性較弱压鉴。 以80% 為警戒線崖咨,每臺主機(jī)的彈性內(nèi)存空間為 6.4G . 很多應(yīng)用在突發(fā)請求時,會占用遠(yuǎn)超 6.4G的內(nèi)存油吭,導(dǎo)致主機(jī)內(nèi)存耗盡击蹲。3. 內(nèi)存是獨(dú)占性資源,即使程序沒有任何請求婉宰, 內(nèi)存也會被獨(dú)占歌豺。其結(jié)果是一臺主機(jī)上的內(nèi)存占用特別高。 CPU 資源占用比率則相對較少芍阎。從以上角度來看世曾, 容器主機(jī)的規(guī)格越大越好> 后來,我們將主機(jī)規(guī)格調(diào)整為 32核 128G (為什么不用物理機(jī)請參考,為什么考慮重啟速度谴咸?轮听,為什么資源利用率不是問題? )岭佳。 運(yùn)維過程中發(fā)現(xiàn)了如下問題1. 主機(jī)故障時血巍,影響范圍很大。當(dāng)內(nèi)存使用率為 60% 的時候珊随, 我們運(yùn)行了 72個容器述寡, 涉及到 40個業(yè)務(wù)柿隙。 當(dāng)主機(jī)故障時,會同時影響40個業(yè)務(wù)鲫凶。2. 太多的進(jìn)程數(shù)禀崖。 監(jiān)控中發(fā)現(xiàn)有 too many process 的報(bào)警, 這在之前32G虛擬機(jī)時螟炫,不太會出現(xiàn)波附。3. 文件描述符數(shù)量,tcp 最大連接數(shù)量等等, 都有可能被用滿昼钻。從以上角度來看掸屡, 容器主機(jī)的規(guī)格越小越好。 物理機(jī)的容量更加大(內(nèi)存可以配置到 512G 甚至更高)然评, 故障時仅财,影響范圍更加巨大。 ####3. CPU與內(nèi)存的配比是如何確定的碗淌?8核32G 的配比為 1:4 盏求,從以往的運(yùn)行監(jiān)控?cái)?shù)據(jù)來看。當(dāng)內(nèi)存使用到 90%左右時亿眠, CPU使用率 40%风喇。1. 為了有效利用資源,以 1:8 配比缕探。 比如 16核128G2. 為了穩(wěn)定性和資源彈性,仍然以 1:4 配比 还蹲。 比如 16核64G目前在資源利用率上爹耗,docker已經(jīng)做得很好, 主要考慮穩(wěn)定性和彈性谜喊。 采用 1:4 的配比潭兽。 ####4. 一個環(huán)境中配置幾臺主機(jī)?假設(shè)一個環(huán)境中有2臺主機(jī)斗遏, 當(dāng)其中一臺主機(jī)故障時山卦,為了能將業(yè)務(wù)遷移到另外一臺主機(jī), 這兩臺主機(jī)的利用率最高可以到 50% 诵次。 為了給集群提供彈性账蓉, 當(dāng)有主機(jī)故障時, 其他主機(jī)要有能力承載這臺主機(jī)上的業(yè)務(wù)逾一。 我們可以算出相關(guān)關(guān)系铸本, N為集群主機(jī)數(shù)量, M為能夠承受損壞的主機(jī)數(shù)量 (N - 1 )* (1 - usage% ) = M * usage% N = (M*usage%) / (1- usage%) + 1 我們看一下遵堵,為了能夠承受一臺主機(jī)完全損壞, N= usage%/ ( 1- usage%) + 1 , usage% = N-1 /N 集群利用率和集群主機(jī)數(shù)量關(guān)系為 * 2 臺主機(jī) 50%* 3 臺主機(jī) 66.6%* 4 臺主機(jī) 75%* 5 臺主機(jī) 80%* 6 臺主機(jī) 83%我們挑選一個合理且方便計(jì)算的利用率 80% 箱玷, 那么集群中最少需要5臺主機(jī)怨规。 結(jié)合主機(jī)的規(guī)格,我們可以算出一個集群的最小容量锡足。* 16核 64G, 集群容量最小為 80核320G* 32核128G波丰,集群容量最小為 160核640G按照一個業(yè)務(wù)占用 2G (QA環(huán)境經(jīng)驗(yàn)值)內(nèi)存來算 , 集群可承載的業(yè)務(wù)數(shù)量為* 16核 64G, 承載 128個* 32核128G,承載 384個####5. 一臺主機(jī)是既是一個共享域舶得, 又是一個沖突域掰烟。1. 共享域主機(jī)的資源越多越好。 這樣可以提供更好的資源彈性扩灯。 從而提高系統(tǒng)穩(wěn)定性媚赖。2. 沖突域主機(jī)的資源越少越好,故障時珠插,影響范圍可控惧磺。過大或過小的規(guī)格,都會導(dǎo)致問題捻撑。 目前合理的規(guī)格為 16核64G磨隘, 或者 32核128G , 一個集群主機(jī)數(shù)量不少于5臺.