前言
容器宿主機(jī)的選擇需要考慮如下幾個(gè)問題
- 用物理機(jī)還是虛擬機(jī)?
- 用多大規(guī)格的服務(wù)器翘盖?
- CPU和內(nèi)存配比多少合理桂塞?
- 一個(gè)集群,需要放多少節(jié)點(diǎn)馍驯?
- 主機(jī)越大越好阁危,還是越小越好?
這些問題汰瘫,每一個(gè)單獨(dú)拿出來狂打,都不是很好回答,并且每個(gè)企業(yè)實(shí)際情況不盡相同混弥,我將結(jié)合我們?cè)谏a(chǎn)環(huán)境的實(shí)際使用經(jīng)驗(yàn)趴乡,來談一談如何選擇容器的宿主機(jī),你從本文中可以獲得一些啟發(fā)蝗拿,來規(guī)劃符合自己的容器集群晾捏。
1. 采用物理機(jī)還是虛擬機(jī);
采用物理機(jī)的好處
- 資源利用率高
采用虛擬機(jī)的好處
- 重啟速度快哀托。
- 規(guī)格可以自由確定.并且方便修改惦辛。
- 方便重建
采用虛擬機(jī),可以獲得虛擬機(jī)帶來的諸多好處仓手,采用物理機(jī)唯一的優(yōu)勢(shì)是資源利用率高胖齐。考慮到資源利用率并不是問題嗽冒, 最終采用虛擬機(jī)呀伙。
為什么資源利用率不是問題?
從 http://openskill.cn/article/88 這里的測(cè)試數(shù)據(jù)可以看出辛慰, KVM 虛擬化
- 虛擬機(jī)相對(duì)物理機(jī)的 CPU 性能損失在 1% 以內(nèi)
- 內(nèi)存幾乎無損耗.
- virtio 網(wǎng)絡(luò)幾乎無損耗.
- 磁盤 損耗受影響因素較多区匠,推薦使用 ext4, qcow2, writeback 緩存, virtio 驅(qū)動(dòng)帅腌。磁盤 從其他渠道獲取的信息來看驰弄。 大致有 12% 的損耗。
實(shí)際生產(chǎn)需要落地的數(shù)據(jù)速客,放在共享存儲(chǔ)上 (cephfs, moosefs) 戚篙, 其iops 由存儲(chǔ)系統(tǒng)提供,本地磁盤只用來存儲(chǔ)鏡像及容器運(yùn)行的臨時(shí)數(shù)據(jù)溺职。 對(duì)磁盤的性能要求岔擂,無需特別苛刻位喂。
為什么考慮重啟速度?
在實(shí)際的運(yùn)維過程中乱灵,我們發(fā)現(xiàn)部分場(chǎng)景下塑崖,會(huì)出現(xiàn)主機(jī)卡死,或者docker進(jìn)程卡死痛倚, 這時(shí)规婆,最快恢復(fù)業(yè)務(wù)的方法是重啟主機(jī)。 容器在主機(jī)重啟后蝉稳,可以自動(dòng)恢復(fù)抒蚜,因此可以做到在1到2分鐘內(nèi)快速恢復(fù)業(yè)務(wù)。這一點(diǎn)太重要了耘戚,物理機(jī)重啟由于需要做各種硬件檢測(cè)嗡髓,重啟時(shí)間一般在5到10分鐘, 虛擬機(jī)重啟一般在1分鐘以內(nèi) 收津, 物理機(jī)顯然無法滿足需求饿这。
為什么重建能力很重要?
容器平臺(tái)經(jīng)常需要更新操作系統(tǒng)撞秋,或者根據(jù)需要調(diào)整主機(jī)規(guī)格
- 運(yùn)行一段時(shí)間后蛹稍,發(fā)現(xiàn)內(nèi)存配置偏少了, 需要添加內(nèi)存部服。這時(shí)候申請(qǐng)一臺(tái)新的機(jī)器加入到集群中,將舊機(jī)器下線即可拗慨。
- 運(yùn)行多年的 ubuntu 12.04 官方已經(jīng)不再維護(hù)廓八, 需要全量替換,工作量相當(dāng)大赵抢。好的方法就是使用全新的服務(wù)器替換舊服務(wù)器剧蹂。
- 當(dāng)發(fā)生故障,主機(jī)無法恢復(fù)時(shí)烦却, 直接申請(qǐng)新服務(wù)器加入集群即可宠叼。
2. 容器主機(jī)的規(guī)格是如何確定的?
我們起初上線了 8 核 32G規(guī)格的虛擬機(jī)其爵。 運(yùn)維過程中發(fā)現(xiàn)了如下的問題
- 部分應(yīng)用啟動(dòng)時(shí)就需要16G 內(nèi)存冒冬。 32G 的虛擬機(jī)顯得捉襟見肘,一臺(tái)主機(jī)只能運(yùn)行一個(gè)此類應(yīng)用摩渺。 出故障時(shí)简烤,集群中可能沒有滿足條件的主機(jī)可供遷移。
- 系統(tǒng)彈性較弱摇幻。 以80% 為警戒線横侦,每臺(tái)主機(jī)的彈性內(nèi)存空間為 6.4G . 很多應(yīng)用在突發(fā)請(qǐng)求時(shí)挥萌,會(huì)占用遠(yuǎn)超 6.4G的內(nèi)存,導(dǎo)致主機(jī)內(nèi)存耗盡枉侧。
- 內(nèi)存是獨(dú)占性資源引瀑,即使程序沒有任何請(qǐng)求, 內(nèi)存也會(huì)被獨(dú)占榨馁。其結(jié)果是一臺(tái)主機(jī)上的內(nèi)存占用特別高憨栽。 CPU 資源占用比率則相對(duì)較少。
從以上角度來看辆影, 容器主機(jī)的規(guī)格越大越好
后來徒像,我們將主機(jī)規(guī)格調(diào)整為 32核 128G (為什么不用物理機(jī)請(qǐng)參考,為什么考慮重啟速度?蛙讥,為什么資源利用率不是問題锯蛀? )。 運(yùn)維過程中發(fā)現(xiàn)了如下問題
- 主機(jī)故障時(shí)次慢,影響范圍很大旁涤。當(dāng)內(nèi)存使用率為 60% 的時(shí)候, 我們運(yùn)行了 72個(gè)容器迫像, 涉及到 40個(gè)業(yè)務(wù)劈愚。 當(dāng)主機(jī)故障時(shí),會(huì)同時(shí)影響40個(gè)業(yè)務(wù)闻妓。
- 太多的進(jìn)程數(shù)菌羽。 監(jiān)控中發(fā)現(xiàn)有 too many process 的報(bào)警, 這在之前32G虛擬機(jī)時(shí)由缆,不太會(huì)出現(xiàn)注祖。
- 文件描述符數(shù)量,tcp 最大連接數(shù)量等等, 都有可能被用滿均唉。
從以上角度來看是晨, 容器主機(jī)的規(guī)格越小越好。 物理機(jī)的容量更加大(內(nèi)存可以配置到 512G 甚至更高)舔箭, 故障時(shí)罩缴,影響范圍更加巨大。
3. CPU與內(nèi)存的配比是如何確定的层扶?
8核32G 的配比為 1:4 箫章,從以往的運(yùn)行監(jiān)控?cái)?shù)據(jù)來看。當(dāng)內(nèi)存使用到 90%左右時(shí)怒医, CPU使用率 40%炉抒。
- 為了有效利用資源,以 1:8 配比稚叹。 比如 16核128G
- 為了穩(wěn)定性和資源彈性焰薄,仍然以 1:4 配比 拿诸。 比如 16核64G
目前在資源利用率上,docker已經(jīng)做得很好塞茅, 主要考慮穩(wěn)定性和彈性亩码。 采用 1:4 的配比。
4. 一個(gè)環(huán)境中配置幾臺(tái)主機(jī)野瘦?
假設(shè)一個(gè)環(huán)境中有2臺(tái)主機(jī)描沟, 當(dāng)其中一臺(tái)主機(jī)故障時(shí),為了能將業(yè)務(wù)遷移到另外一臺(tái)主機(jī)鞭光, 這兩臺(tái)主機(jī)的利用率最高可以到 50% 吏廉。
為了給集群提供彈性, 當(dāng)有主機(jī)故障時(shí)惰许, 其他主機(jī)要有能力承載這臺(tái)主機(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
我們看一下佩伤,為了能夠承受一臺(tái)主機(jī)完全損壞, N= usage%/ ( 1- usage%) + 1 , usage% = N-1 /N
集群利用率和集群主機(jī)數(shù)量關(guān)系為
- 2 臺(tái)主機(jī) 50%
- 3 臺(tái)主機(jī) 66.6%
- 4 臺(tái)主機(jī) 75%
- 5 臺(tái)主機(jī) 80%
- 6 臺(tái)主機(jī) 83%
我們挑選一個(gè)合理且方便計(jì)算的利用率 80% , 那么集群中最少需要5臺(tái)主機(jī)晦毙。
結(jié)合主機(jī)的規(guī)格生巡,我們可以算出一個(gè)集群的最小容量。
- 16核 64G, 集群容量最小為 80核320G
- 32核128G见妒,集群容量最小為 160核640G
按照一個(gè)業(yè)務(wù)占用 2G (QA環(huán)境經(jīng)驗(yàn)值)內(nèi)存來算 , 集群可承載的業(yè)務(wù)數(shù)量為
- 16核 64G, 承載 128個(gè)
- 32核128G孤荣,承載 384個(gè)
5. 一臺(tái)主機(jī)是既是一個(gè)共享域, 又是一個(gè)沖突域须揣。
- 共享域主機(jī)的資源越多越好垃环。 這樣可以提供更好的資源彈性。 從而提高系統(tǒng)穩(wěn)定性返敬。
- 沖突域主機(jī)的資源越少越好,故障時(shí)寥院,影響范圍可控劲赠。
過大或過小的規(guī)格,都會(huì)導(dǎo)致問題秸谢。 目前合理的規(guī)格為 16核64G凛澎, 或者 32核128G , 一個(gè)集群主機(jī)數(shù)量不少于5臺(tái).