白話Kubernetes運(yùn)維之容器應(yīng)用資源運(yùn)營管理
本文轉(zhuǎn)載自微信公眾號(hào)「匠心獨(dú)運(yùn)維妙維效」,作者匠心獨(dú)運(yùn)維妙維效。轉(zhuǎn)載本文請(qǐng)聯(lián)系匠心獨(dú)運(yùn)維妙維效公眾號(hào)。
技術(shù)最終也是需要為運(yùn)營所服務(wù)。每一種可推廣的新技術(shù)的出現(xiàn),也都是對(duì)原運(yùn)營模式的一種提升。如何降低成本、提高資源利用率,是每一個(gè)資源管理者必定要面臨的問題。本文將就云原生生態(tài)下,容器技術(shù)的資源如何分配、如何管理,結(jié)合G行的容器云平臺(tái)的實(shí)踐結(jié)果,介紹并分享給大家。
在文章最初,我們首先提出三個(gè)問題,并帶著問題進(jìn)行探討。
Q:虛機(jī)應(yīng)用和容器應(yīng)用的資源分配區(qū)別是什么?
Q:如何提高容器服務(wù)的資源利用率?
Q:容器平臺(tái)的資源該如何管理?
先聊聊虛機(jī)應(yīng)用資源,系統(tǒng)管理員在進(jìn)行物理機(jī)切分的時(shí)候,通常會(huì)有幾套標(biāo)準(zhǔn)資源分配模板,例如4C8G,16C32G等等,當(dāng)我們的項(xiàng)目經(jīng)理根據(jù)應(yīng)用資源評(píng)估,申請(qǐng)對(duì)應(yīng)虛機(jī)鏡像后,我們最開始的應(yīng)用資源就已經(jīng)框定,之后項(xiàng)目開發(fā)完畢,進(jìn)行非功能測(cè)試,我們會(huì)得到不同的常穩(wěn)CPU使用率,例如20%、40%。然后考慮到虛機(jī)擴(kuò)容的復(fù)雜性和資源降配的管理機(jī)制,最終我們?cè)谏a(chǎn)上得到的預(yù)期資源使用率會(huì)在一個(gè)范圍內(nèi)波動(dòng)。總結(jié)一下這種資源分配模式,是以資源為模板(定值),應(yīng)用為適配(不定值)的一種資源分配方式。這種模式我們可能會(huì)面臨一些問題,例如降配的閾值根據(jù)不同類型的應(yīng)用需要豐富的經(jīng)驗(yàn)才可以拿捏的住,例如當(dāng)應(yīng)用即使在最小資源模板下也低于降配閾值時(shí),存在資源浪費(fèi)。例如當(dāng)應(yīng)用需要調(diào)整資源模板時(shí),需要重新進(jìn)行非功能測(cè)試。在這種模式下,目前金融機(jī)構(gòu)普遍的CPU資源平均利用率都在10%-20%,存在可提升空間。
那么對(duì)于容器應(yīng)用來說,我們的資源該如何分配呢?首先我們先來了解下k8s容器在聲明機(jī)制下的資源參數(shù)。
request(資源請(qǐng)求量)容器啟動(dòng)時(shí)的最低資源分配值,如果集群不滿足該資源請(qǐng)求,容器服務(wù)無法啟動(dòng)。
limit(資源約束量)容器最大能夠請(qǐng)求到的資源。
圖1
結(jié)合CPU的時(shí)間片機(jī)制、k8s的調(diào)度策略以及容器快速擴(kuò)容能力。我們可以暢想下應(yīng)用資源理想的使用場(chǎng)景:常穩(wěn)TPS使用率在request值和limit值之間,峰值TPS使用小于limit值。然后在劃分CPU密集型應(yīng)用和非密集型應(yīng)用類別之后,我們還可以對(duì)節(jié)點(diǎn)資源進(jìn)行一定程度的超分,以達(dá)成我們資源共享的目的。那么以此理想場(chǎng)景下,可實(shí)踐的資源分配策略需要優(yōu)秀的非功能測(cè)試團(tuán)隊(duì)以及合理的資源計(jì)算分配模型。我們可以把此類機(jī)制總結(jié)為以應(yīng)用需求為依據(jù)(定值),資源進(jìn)行適配(不定值)的一種資源分配方式。我們期望自此模型下運(yùn)行的應(yīng)用平均CPU資源利用率達(dá)到20%-40%,同時(shí)保障生產(chǎn)的穩(wěn)定性。
那么我們?nèi)绾伟堰@種高效的資源分配方式進(jìn)行落地呢?首先,筆者相信在容器平臺(tái)建設(shè)之初,因?yàn)樾枨蠓叫枰獣r(shí)間進(jìn)行思維模式轉(zhuǎn)變,平臺(tái)需要加快推動(dòng)應(yīng)用容器化策略,肯定會(huì)存在資源的浪費(fèi)情況,可能某天我們可愛的平臺(tái)管理員在巡檢時(shí)發(fā)現(xiàn),集群資源已經(jīng)緊張了,但是上面的應(yīng)用連10%的CPU使用率都不到。我們就需要想辦法扭轉(zhuǎn)這個(gè)問題。G行結(jié)合容器技術(shù)進(jìn)行了大量的實(shí)踐,決定首先從非功能測(cè)試方面入手。首先我們摒棄掉固定的資源模板,為應(yīng)用服務(wù)準(zhǔn)備一個(gè)足夠大的limit值,對(duì)其未來幾年常穩(wěn)TPS下的資源使用情況請(qǐng)進(jìn)行測(cè)試,得到實(shí)際使用量(current),再通過不同的應(yīng)用類型及一定的冗余值,計(jì)算出生產(chǎn)環(huán)境資源最大分配的建議值(limit),request值根據(jù)應(yīng)用災(zāi)備級(jí)別取limit的25%-100%不等(涉及到k8s驅(qū)逐策略)。同時(shí)我們也摒棄掉了虛機(jī)拐點(diǎn)的測(cè)試方式,推動(dòng)根據(jù)常穩(wěn)TPS的階梯式調(diào)整,測(cè)試出在不同倍數(shù)下的資源實(shí)際使用量,可按一定比例轉(zhuǎn)化為POD數(shù)量,為生產(chǎn)應(yīng)用管理員提供容量預(yù)測(cè)數(shù)據(jù)。以此模式下上線的系統(tǒng)資源的使用率明顯得到了提升,節(jié)點(diǎn)上能夠承載的服務(wù)數(shù)量也達(dá)到了理想場(chǎng)景,同時(shí)在理想情況下,應(yīng)用服務(wù)達(dá)到常穩(wěn)TPS后的資源使用率為定值,風(fēng)險(xiǎn)得到了把控。最后根據(jù)容量預(yù)測(cè)數(shù)據(jù),我們也可以快速的調(diào)整POD服務(wù)數(shù)量或容器limit值。
圖2
當(dāng)然,在介紹完資源分配策略后,我們也需要配套的資源管理策略。筆者調(diào)研過一些同業(yè)的管理方式,比較常用的是根據(jù)使用率砍掉一定量的request值,保持limit值不變。基于各家自研的或開源的調(diào)度器及優(yōu)秀的調(diào)度策略,這是一種過渡或可長期使用的方案。當(dāng)然缺點(diǎn)大家也可以想一下,一頭(request)限制住了,另一頭(limit)卻放開,在未來不可預(yù)期的野蠻申請(qǐng)下,可能導(dǎo)致集群超分過重,產(chǎn)生雪崩等異常情況。那么優(yōu)秀的資源管理策略的制定,則是平臺(tái)管理層必須要進(jìn)行思考及實(shí)踐的工作。
G行結(jié)合實(shí)踐經(jīng)驗(yàn),從應(yīng)用等級(jí)劃分入手,持續(xù)改進(jìn)容器平臺(tái)資源運(yùn)營管理策略。根據(jù)應(yīng)用系統(tǒng)災(zāi)備等級(jí)對(duì)limit和request比例進(jìn)行規(guī)范要求,重要系統(tǒng)采取保守策略,一般系統(tǒng)采用高效策略;根據(jù)應(yīng)用服務(wù)CPU使用類型,優(yōu)化服務(wù)調(diào)度策略,規(guī)避高風(fēng)險(xiǎn)場(chǎng)景;根據(jù)應(yīng)用服務(wù)特殊需求,劃分專用節(jié)點(diǎn),緩釋關(guān)聯(lián)故障發(fā)生等等,結(jié)合平臺(tái)容量周報(bào)、超分閾值、服務(wù)數(shù)量等,不斷地磨合各類應(yīng)用系統(tǒng),持續(xù)優(yōu)化資源運(yùn)營策略。當(dāng)然,優(yōu)秀的管理策略也同樣需要不斷強(qiáng)化的技術(shù)能力、可落地的執(zhí)行方案,技術(shù)、方案、管理三者相結(jié)合,才能真正的把資源使用“提“起來,把成本”降“下來。
圖3
總結(jié)
最后,資源使用一直是業(yè)內(nèi)持續(xù)研究的方向,同時(shí)容器資源的管理也不單單是PaaS層的優(yōu)化,node節(jié)點(diǎn)的資源切分比例,網(wǎng)絡(luò)的帶寬限制等等因素都會(huì)最終影響到我們的資源管理策略,這也是資源統(tǒng)籌的難點(diǎn)。本文以三個(gè)問題入手,結(jié)合G行實(shí)踐經(jīng)驗(yàn),重點(diǎn)介紹了PaaS層CPU方面的資源運(yùn)營策略,希望能以此文和各位碰撞出思維的火花,感謝各位讀者閱讀。