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