7個(gè)簡(jiǎn)單的Kubernetes性能優(yōu)化技巧
譯文【51CTO.com快譯】Kubernetes是復(fù)雜的工具。與大多數(shù)復(fù)雜工具一樣,獲得Kubernetes的最佳性能可能很棘手。大多數(shù)Kubernetes發(fā)行版本身沒(méi)有經(jīng)過(guò)微調(diào)以發(fā)揮最大性能(就算經(jīng)過(guò)微調(diào),對(duì)你的環(huán)境來(lái)說(shuō)性能也可能并非最佳)。
有鑒于此,下面介紹Kubernetes性能優(yōu)化技巧。無(wú)論你剛開(kāi)始構(gòu)建集群,還是已有了生產(chǎn)環(huán)境,本文主要介紹改善Kubernetes性能的簡(jiǎn)單操作。
創(chuàng)建新的worker節(jié)點(diǎn)之前,為現(xiàn)有worker節(jié)點(diǎn)添加資源。
改善Kubernetes性能最明顯的方法可能是為集群添加更多的worker節(jié)點(diǎn)。擁有的worker越多,可用于運(yùn)行工作負(fù)載的資源就越多。你還可以提升可用性,因?yàn)閾碛懈嗟墓?jié)點(diǎn)可以減少眾多節(jié)點(diǎn)失效以至于工作負(fù)載開(kāi)始出現(xiàn)故障的機(jī)會(huì)。
但如果你想最大程度地利用worker節(jié)點(diǎn),為現(xiàn)有worker節(jié)點(diǎn)添加內(nèi)存和CPU資源而不是創(chuàng)建新節(jié)點(diǎn)可獲得更好的效果。換句話說(shuō),最好擁有20個(gè)節(jié)點(diǎn)、每個(gè)節(jié)點(diǎn)有16 GB的內(nèi)存,而不是擁有40個(gè)節(jié)點(diǎn)、每個(gè)節(jié)點(diǎn)有8 GB的內(nèi)存。
這有兩個(gè)原因。首先,由于主機(jī)操作系統(tǒng),每個(gè)節(jié)點(diǎn)有一定量的開(kāi)銷(xiāo)。節(jié)點(diǎn)越少意味著以這種方式浪費(fèi)的資源越少。其次,節(jié)點(diǎn)越多,調(diào)度程序、kube-proxy及其他組件跟蹤一切就越費(fèi)勁。
很顯然,你需要考慮可用性,并確保數(shù)量最少的worker節(jié)點(diǎn)可滿足可用性目標(biāo)。但是一旦超過(guò)該閾值,可以通過(guò)確保為每個(gè)節(jié)點(diǎn)分配盡可能多的資源,而不是試圖增加節(jié)點(diǎn)總數(shù),以提高整體性能。但別走極端(比如說(shuō)你可能不希望單個(gè)節(jié)點(diǎn)上有24 TB的內(nèi)存),因?yàn)槿绻彻?jié)點(diǎn)失效,你可能會(huì)失去那些資源。
當(dāng)然,你在確定節(jié)點(diǎn)的資源分配方面是否有很大的靈活性不好說(shuō)。如果它們是在云中運(yùn)行的虛擬機(jī),你可以分配任意數(shù)量的資源。如果是本地虛擬機(jī)或物理服務(wù)器,那就比較棘手。
使用多個(gè)主節(jié)點(diǎn)
Kubernetes集群中使用多個(gè)主節(jié)點(diǎn)的主要原因是為了獲得高可用性。擁有的主節(jié)點(diǎn)越多,它們都失效、導(dǎo)致集群崩潰的可能性就越小。
然而添加更多的主節(jié)點(diǎn)還能提高性能,因?yàn)檫@為托管在主節(jié)點(diǎn)上的基本Kubernetes組件(比如調(diào)度程序、API服務(wù)器和Etcd)提供了更多的托管資源。Kubernetes會(huì)使用所有主節(jié)點(diǎn)的集體資源來(lái)支持這些組件。
因此,添加一個(gè)或數(shù)個(gè)主節(jié)點(diǎn)是提高Kubernetes集群性能的好方法。
設(shè)置worker節(jié)點(diǎn)評(píng)分限制
Kubernetes調(diào)度程序的一項(xiàng)工作是對(duì)worker節(jié)點(diǎn)進(jìn)行“評(píng)分”,這意味著它確定哪些worker節(jié)點(diǎn)適合處理工作負(fù)載。在擁有幾十個(gè)或更多worker節(jié)點(diǎn)的集群中,調(diào)度程序最終會(huì)將時(shí)間浪費(fèi)在檢查每個(gè)worker節(jié)點(diǎn)上。
為了避免這種低效,可以將percentOfNodesToScore參數(shù)設(shè)置為小于100的百分比。然后,調(diào)度程序?qū)H檢查你指定的那部分節(jié)點(diǎn)。
設(shè)置資源配額
設(shè)置資源配額是提高Kubernetes性能的一種簡(jiǎn)單而很有效的方法,尤其是在多個(gè)團(tuán)隊(duì)共享的大集群中。資源配額對(duì)某個(gè)命名空間可以使用的CPU、內(nèi)存和存儲(chǔ)資源數(shù)量作了限制。
因此,如果你將集群劃分為多個(gè)命名空間,為每個(gè)團(tuán)隊(duì)分配不同的命名空間,并設(shè)置資源配額,就有助于確保所有工作負(fù)載都能得到公平分配的資源。
資源配額本身并不是優(yōu)化性能的方法,它更像是解決嘈雜鄰居問(wèn)題的方法。但它確實(shí)有助于確保每個(gè)命名空間都擁有充分執(zhí)行任務(wù)所需的資源。
設(shè)定限制范圍
如果你想限制工作負(fù)載耗用的資源,但該工作負(fù)載又與其他工作負(fù)載在同一命名空間中運(yùn)行,該怎么辦?這時(shí)限制范圍就能派上用場(chǎng)。
資源配額對(duì)每個(gè)命名空間可以耗用多少資源作了限制,限制范圍則針對(duì)每個(gè)pod或每個(gè)容器執(zhí)行同樣的操作。
為了簡(jiǎn)單起見(jiàn),大多數(shù)情況下的一條優(yōu)秀實(shí)踐是使用命名空間和資源配額來(lái)分隔工作負(fù)載。但如果這種方法不切實(shí)際,限制范圍讓你可以保證各個(gè)pod或容器擁有執(zhí)行任務(wù)所需的資源。
設(shè)置端點(diǎn)切片
端點(diǎn)切片(Endpoint Slice)是一項(xiàng)鮮為人知的Kubernetes功能,讓你可以根據(jù)服務(wù)和端口組合將網(wǎng)絡(luò)端點(diǎn)分組在一起。設(shè)置完畢后,kube-proxy在決定如何路由傳輸流量時(shí)參照端點(diǎn)切片。
在擁有大量端點(diǎn)的環(huán)境中,端點(diǎn)切片可通過(guò)減少kube-proxy為在集群內(nèi)路由傳輸流量而需要執(zhí)行的工作量來(lái)改善性能。
使用極簡(jiǎn)的主機(jī)操作系統(tǒng)
最后但并非最不重要的是一個(gè)基本而有效的技巧:確保托管Kubernetes集群的操作系統(tǒng)盡可能簡(jiǎn)約。運(yùn)行Kubernetes不需要的任何額外組件都會(huì)導(dǎo)致資源浪費(fèi),從而降低集群的性能。
是否可以選擇主機(jī)操作系統(tǒng),這取決于你使用的Kubernetes發(fā)行版。如果可以選擇,就選擇占用資源最少的Linux發(fā)行版。
原文標(biāo)題:7 Simple Kubernetes Performance Optimization Tips
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】