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