您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關基于kubernetes搭建分布式壓測系統是怎樣的,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
原理上來講,需要借助三方面的技術:
這里我們選擇了我們團隊較熟悉的python,不同團隊可以有不同的選擇;
我們用的是Locust,因為它是用python寫腳本,其實也可以更換成jmeter之類的其它壓測引擎,
主要利用它的服務編排技術來進行一個資源上的調度,經過我們測試,如果是普通集群,在需要彈出集群物理節點的情況下,全部就緒需要90秒,但是使用彈性集群,則可以壓縮到15~20秒,所以推薦使用彈性集群。 整個技術框架原理上,壓測節點分為主節點(master)、從節點 (slave)和監控節點(monitor)三種類型:
負責任務管理和數據采集聚合,本身不進行壓測任務
負責壓測任務
從主節點將結果通過webhook傳遞給web服務處理端;
另外這些節點的狀態、日志都會通過k8s的api進行采集。 根據壓測任務里主從節點所申請的資源,集群將提前伸縮好節點,并將任務分配到不同節點,以達到動態提高壓測能力的目的。
右邊為用戶所感知到的過程,壓測集中包括多個壓測場景,通過編寫壓測腳本和配置壓測參數的方式生成壓測任務,并最終生成壓測報告。
左邊為python控制集群來生成任務的過程,具體是渲染生成不同任務的yaml文件后,生成相應的 job pod,然后持續將 pod 狀態 、日志和壓測曲線結果反饋在頁面上。
整個過程所使用的技術并沒有多高深,主要是在集群應用上的一種探索。
使用yaml編排job服務,舉例slave節點來說,主要是聲明一個job類型的工作負載,將生成的任務從節點名以及任務生成的命名空間渲染上去,然后設置我們的壓測基礎鏡像以及啟動命令,這里我們用到了 kubernetes 的幾個技巧,一個是通過hostAliases進行內部解析,這樣可以對一些內網代理進行壓測,另一個是聲明申請資源CPU,以便在任務啟動前提前伸縮好物理節點提供資源,還有一個是通過configmap掛載可執行文件,這樣可以注入參數在變化的啟動命令,而不需要重新構建鏡像。
然后說一下我們的代碼框架,主要是分為這幾個模塊:
k8s模塊,提供一些如創建銷毀命名空間或pod、查看狀態、拉取日志等api功能;
基礎鏡像,較為簡單,主要安裝了一些基礎通用的庫,然后開通了一些內部使用的端口;
任務編排聲明文件,包括了我上面說的幾種節點服務;
任務核心方法類,主要是將上述的流程代碼實現,提供了一些方法,這里限于篇幅就不具體展開了。
然后最后我們來看下效果:
這是我們壓測系統的管理界面,現在看到的是壓測集,方便集中管理。
這是創建壓測場景,并基于該場景編寫python壓測腳本,并可設置我們的任務參數。
這是壓測任務詳情頁,可以看到壓測參數、狀態以及節點情況和查看日志。
這是壓測過程中實時生成的圖表,可以基于圖表情況進行分析。
引擎類型或版本允許選擇更換;
批量定時分階段的自動壓測計劃;
將所有涉及資源圖表關聯進來,形成更為詳盡的報告;
任務資源限制與使用審批;
報告分析結論存檔,相關問題追蹤處理結果存檔;
相同條件的多次壓測結果對比展示;
使用更為云原生的方式管理任務的生命周期;
關于基于kubernetes搭建分布式壓測系統是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。