如何使用機器學(xué)習來(lái)有效管理 Kubernetes 資源
做者 | Brian Likosar
譯者 | 平川
籌謀 | 褚杏娟
跟著(zhù) Kubernetes 成為應用法式容器編排的事實(shí)尺度,有兩個(gè)重要的問(wèn)題擺在了我們面前:一個(gè)是優(yōu)化戰略,另一個(gè)是更佳理論。組織接納 Kubernetes 的此中一個(gè)原因是提拔效率,并跟著(zhù)工做負載的變革向上或向下擴展;然而,Kubernetes 供給的細粒度控造在帶來(lái)靈敏性的同時(shí),也帶來(lái)了優(yōu)化方面的挑戰。
在那篇文章中,我們將介紹若何利用 機器進(jìn)修 來(lái)主動(dòng)優(yōu)化那些資本,并跟著(zhù)工做負載的變革實(shí)現有效地擴展。
優(yōu)化的復雜性
在很大水平上,優(yōu)化 Kubernetes 應用法式就是確保代碼盡可能高效天時(shí)用底層資本——即 CPU 和內存。也就是說(shuō),要用更低的成本和工做量包管性能滿(mǎn)足或超出辦事程度目的。
在創(chuàng )建集群時(shí),我們能夠在容器層面設置裝備擺設兩種次要資本:內存和 CPU。也就是說(shuō),關(guān)于應用法式利用和懇求幾資本,我們能夠設置一個(gè)限值。我們能夠將那些資本設置視為輸入變量,而將性能、可靠性以及運行應用法式所利用的資本(或付出的成本)視為輸出。跟著(zhù)容器數量的增加,變量數也會(huì )增加,集群辦理和系統優(yōu)化的總體復雜性也會(huì )呈指數增長(cháng)。
圖 1:在考慮 Kubernetes 設置裝備擺設時(shí),能夠將資本設置視為變量,將成本、性能和可靠性視為輸出成果。
差別資本的參數是彼此依賴(lài)的,那使得問(wèn)題進(jìn)一步復雜化。修改一個(gè)參數可能對集群性能和效率產(chǎn)生意料不到的影響。也就是說(shuō),要想通過(guò)手動(dòng)設置裝備擺設獲得更佳性能幾乎是一項不成能完成的使命,除非你有無(wú)限多的時(shí)間和 Kubernetes 人才。
若是在擺設容器時(shí)沒(méi)有設置自定義的資本值,那么 Kubernetes 會(huì )主動(dòng)賦值。那里有一個(gè)問(wèn)題是,為了制止下面兩種情況,Kubernetes 關(guān)于資本會(huì )十分大方:因內存溢出(OOM)招致辦事失敗以及因 CPU 限造招致性能不合理地下降。然而,利用默認設置裝備擺設創(chuàng )建基于云的集群,會(huì )招致云成本徒高而性能卻沒(méi)有保障。
當我們設法辦理數個(gè)集群的多個(gè)參數時(shí),問(wèn)題會(huì )變得愈加復雜。為了提拔情況的價(jià)值目標,機器進(jìn)修系統會(huì )是一個(gè)很好的彌補。
機器進(jìn)修優(yōu)化辦法
基于機器進(jìn)修的優(yōu)化辦法凡是有兩種,它們供給值的體例差別:一種是基于嘗試的優(yōu)化,在非消費情況中停止,利用各類(lèi)場(chǎng)景模仿可能的消費場(chǎng)景;另一種是基于不雅測的優(yōu)化,在消費或非消費情況中停止,通過(guò)不雅測系統的現實(shí)行為來(lái)停止。
下面我們將別離介紹下那兩種辦法。
基于嘗試的優(yōu)化
通過(guò)嘗試停止優(yōu)化是一種強大而科學(xué)的辦法,因為我們能夠測驗考試任何可能的場(chǎng)景,度量輸出功效,調整變量并再次測驗考試。因為嘗試是在非消費情況中停止的,所以我們只會(huì )受限于我們的場(chǎng)景想象力以及做嘗試的時(shí)間和精神。若是嘗試是手動(dòng)停止的,則需要付出大量的時(shí)間和精神。那時(shí)就輪到機器進(jìn)修和主動(dòng)化闡揚了。下面我們看下,在理論中基于嘗試的優(yōu)化是若何停止的。
步調 1:確定變量
要停止嘗試,我們起首必需確定優(yōu)化哪個(gè)變量(也稱(chēng)為參數)。常見(jiàn)的參數有 CPU 和內存懇求與限值、副本數量,以及特定于應用法式的參數,如 JVM 堆大小和垃圾搜集設置。
有些 ML 優(yōu)化計劃能夠掃描集群主動(dòng)確定可設置裝備擺設的參數。掃描過(guò)程還能夠獲取集群參數的當前值或基線(xiàn)值做為嘗試的初始值。
步調 2:設定優(yōu)化目的
接下來(lái),必需指定優(yōu)化目的。換句話(huà)說(shuō),你希望最小化或更大化哪個(gè)目標?一般來(lái)說(shuō),目的涉及多個(gè)目標的平衡,如性能和成本。舉例來(lái)說(shuō),你可能希望更大化吞吐量,同時(shí)又最小化資本成本。
有些優(yōu)化計劃允許你給每個(gè)優(yōu)化目的增加權重,因為在某些情況下,性能可能比成本更重要,反之亦然。此外,你可能會(huì )希望指定每個(gè)目的的邊界。例如,你可能會(huì )希望,在任何場(chǎng)景下,性能都不克不及低于特定的閾值。那種庇護性設置有助于進(jìn)步嘗試速度和效率。
以下是拔取適宜的目標做為優(yōu)化目的時(shí)一些需要考量的因素:
若是容器化應用法式是基于事務(wù)的,則應最小化響應時(shí)間和錯誤率。在那種情況下,抱負形態(tài)是更大化速度,資本利用率則不那么重要。
若是應用法式僅供計算利用,則應最小化錯誤率。我們會(huì )希望優(yōu)化施行效率。
若是應用法式是用來(lái)處置數據的,則速度可能就是次要的。應優(yōu)化成本。
當然,那里只是舉了幾個(gè)例子。確定適宜的優(yōu)化目標需要開(kāi)發(fā)人員和負責營(yíng)業(yè)操做的人員之間停止溝通,確定組織的次要目的,然后看下手藝若何幫忙我們達成如許的目的以及需要做什么。最初,造定一份方案,聚焦能夠充實(shí)平衡成本與效能的目標。
步調 *:確定優(yōu)化場(chǎng)景
在基于嘗試的辦法中,我們需要確定要優(yōu)化的場(chǎng)景,并把那些場(chǎng)景構建到負載測試中。那可能是一個(gè)預期的用戶(hù)流量范疇,也可能是一個(gè)特定的場(chǎng)景,像零售假日的流量峰值。該性能測試將用于在嘗試過(guò)程中模仿消費負荷。
步調 4:運行嘗試
一旦設定好嘗試的優(yōu)化目的和可調優(yōu)參數,就能夠起頭嘗試了。每個(gè)嘗試都包羅多輪測試。在每一輪測試時(shí),優(yōu)化計劃城市迭代施行以下步調:
嘗試控造器利用第一次測試的基線(xiàn)參數在集群中運行容器化應用法式。
然后,控造器運行之前創(chuàng )建的性能測試,針對我們的優(yōu)化場(chǎng)景將負載應用到的系統中。
控造器捕捉要優(yōu)化的目標,如持續時(shí)間和資本成本。
機器進(jìn)修算法闡發(fā)成果,然后計算生成一組新的參數,以供下一輪測試利用。
然后,按照設置裝備擺設嘗試時(shí)指定的測試輪數,反復那個(gè)過(guò)程。凡是,嘗試會(huì )測試 20 到 200 輪不等,參數越多,測試輪數也會(huì )越多。
機器進(jìn)修引擎利用每一輪測試的成果構建一個(gè)暗示多維參數空間的模子。在那個(gè)空間中,它能夠查抄參數之間的關(guān)系。在每次迭代中,ML 引擎能夠確定趨近目標優(yōu)化目的的設置裝備擺設。
步調 5:闡發(fā)成果
固然機器進(jìn)修會(huì )主動(dòng)保舉能夠獲得更佳成果的設置裝備擺設,但我們仍是能夠在嘗試完成后停止闡發(fā)。例如,我們能夠將兩個(gè)差別目的的平衡過(guò)程可視化,看看哪個(gè)目標對成果的影響大,哪個(gè)影響小。
成果經(jīng)常讓人吃驚,那可能會(huì )引發(fā)重要的架構改良:例如,發(fā)現大量的小副本比小量的“重”副本更高效。
圖 2:將嘗試成果可視化,通過(guò)火析充實(shí)理解系統行為。
基于不雅測的優(yōu)化
固然關(guān)于許多場(chǎng)景的闡發(fā)來(lái)說(shuō),基于嘗試的優(yōu)化已經(jīng)很強大,但我們不成能預見(jiàn)所有情況。此外,用戶(hù)流量大幅變革,某事某刻的更優(yōu)設置裝備擺設在情況呈現變革時(shí)可能就不是更優(yōu)的了。Kubernetes autoscalers 很有用,但它們以汗青利用情況為根底,沒(méi)有考慮應用法式的性能。
那就輪到基于不雅測的優(yōu)化計劃闡揚感化了。讓我們看下它的工做原理。
步調 1:設置裝備擺設應用法式
在利用基于不雅測的優(yōu)化計劃時(shí),應用法式設置裝備擺設可能包羅以下步調:
指定數名空間和標簽選擇器(可選),以確定要對哪些資本停止調優(yōu)。
為要調整的 CPU 和內存參數指定庇護值(最小和更大)。
指定系統應該多久一次建議更新參數設置。
指定是按照建議主動(dòng)擺設仍是經(jīng)審批后擺設。
步調 2:機器進(jìn)修闡發(fā)
設置裝備擺設完成后,機器進(jìn)修引擎將起頭闡發(fā)從 Prometheus、Datadog 或其他不雅測東西搜集到的不雅測數據,領(lǐng)會(huì )現實(shí)的資本利用情況和應用法式性能趨向。然后,系統將根據設置裝備擺設時(shí)指定的時(shí)間間隔供給建議。
步調 *:按照建議擺設
若是你在設置裝備擺設時(shí)指定了主動(dòng)施行建議計劃,那么優(yōu)化計劃會(huì )利用建議的設置裝備擺設主動(dòng)修改擺設。若是你選擇手動(dòng)擺設,則能夠在決定能否同意擺設之前查看建議,包羅容器級的細節信息。
更佳理論
你可能已經(jīng)留意到,基于不雅測的優(yōu)化比基于嘗試的優(yōu)化簡(jiǎn)單些。它能以較低的成本更快地供給建議值,但另一方面,基于嘗試的優(yōu)化更強大,讓你能夠深切洞察應用法式,而那在基于不雅測的辦法中是不成能的。
不外,那兩種辦法并不是是不相容的:每種辦法都有本身的優(yōu)勢,你能夠同時(shí)利用兩種計劃來(lái)縮小消費和非消費之間的差距。下面是一些指點(diǎn)性原則,供參考:
因為基于不雅測的優(yōu)化很容易實(shí)現,并且很快就能夠看到改良效果,所以應該在你的情況里普遍擺設。
關(guān)于比力復雜或關(guān)鍵的應用法式,更深切的闡發(fā)會(huì )有所助益,能夠利用基于嘗試的優(yōu)化做為對基于不雅測的優(yōu)化的彌補。
此外,能夠利用基于不雅測的優(yōu)化識別需要通過(guò)基于嘗試的優(yōu)化停止更深切闡發(fā)的場(chǎng)景。
利用基于不雅測的辦法不竭驗證和完美基于嘗試的實(shí)現,構成消費情況優(yōu)化的良性輪回。
圖 *:同時(shí)利用基于嘗試和基于不雅測的辦法創(chuàng )建一個(gè)系統的、持續優(yōu)化的良性輪回。
小 結
優(yōu)化 Kubernetes 情況,實(shí)現效率更大化,擴展智能化,并達成我們的目的,需要:
在擺設之前有一個(gè)最合理的應用法式和情況參數設置裝備擺設;
在擺設后持續監控和調整。
關(guān)于規模較小的情況,那項工做很難。但關(guān)于在 Kubernetes 上大規模運行應用法式的組織來(lái)說(shuō),那項工做很可能已經(jīng)超出了人工勞動(dòng)的范疇。幸運的是,機器進(jìn)修能夠提拔主動(dòng)化程度,在各個(gè)層面供給優(yōu)化 Kubernetes 情況的有力洞察。
原文鏈接:
021yin.com/articles/using-machine-learning-to-automate-kubernetes-opti)
聲明:本文為 InfoQ 翻譯,未經(jīng)答應制止轉載。
點(diǎn)擊底部閱讀原文拜候 InfoQ 官網(wǎng),獲取更多出色內容!
今日好文保舉
18.* 萬(wàn)美圓offer到手!ChatGPT 通過(guò)谷歌 L* 面試:留給谷歌的時(shí)間不多了
我被微辦事坑掉了CTO職位
*全面撐持“小號”;員工購置公司福利房,被裁人后遭巨額索賠;1*歲少年孤身前去深圳騰訊總部解封吉印通13816211622賬號|Q資訊
現代軟件越來(lái)越大、越來(lái)越慢、越來(lái)越爛!還有救嗎?