Rancher 和知乎超大規模多集群管理聯合實踐

2022-10-08 23:48:29 字數 3697 閱讀 4408

知乎是中文網際網路高質量的問答社群,每天有上千萬使用者在知乎分享知識、經驗和見解,找到自己的答案。為配合不同階段的業務發展需求,知乎容器平台也在不斷演進、提公升,目前幾乎所有的業務都執行在容器上。

這兩年知乎開始使用 rancher 管理 kubernetes 集群,集群規模逐步達到近萬節點。本文將介紹 rancher 如何針對大規模集群進行效能調優,最終訪問速度提公升75%,達到頁面訪問體驗可用的狀態。

對於為什麼會選擇 rancher 作為我們的容器管理平台,大致原因有以下幾點:

我們的業務部署在國內多家公有雲 kubernetes 上,需要統一的平台來管理這些 kubernetes 集群,而 rancher 針對國內的公有雲 kubernetes 平台相容性非常友好。

rancher 降低了 kubernetes 集群的部署和使用門檻,我們可以借助 rancher ui 輕鬆納管和使用各個 kubernetes 集群。不是很深入了解 kubernetes 的研發同學也可以輕鬆建立 deployment、pod、pv 等資源。

我們可以借助 rancher pipeline 在內部實現 ci/cd,使研發專注於業務應用的開發。儘管 rancher 團隊告知 pipeline 已經停止維護,但是它的簡潔依然符合我們內部對 ci/cd 的定位。

rancher 的持續創新能力,還有圍繞著 kubernetes 進行了一系列的生態擴充套件及布局,比如:輕量級 kubernetes 發行版 k3s、kubernetes 的輕量級分布式塊儲存系統 longhorn、基於 kubernetes 的開源超融合基礎設施 (hci) harvester、以及 rancher 的下一代 kubernetes 發行版 rke2。跟隨頭部創新廠商,對團隊的持續進步也是大有益處。

rancher 作為國際化的容器廠商,在國內有非常專業的研發團隊,溝通交流非常便捷。很多問題都可以在 rancher 中文社群中找到答案,對於開源且免費的平台來說,可以說是非常良心了。

起初,我們在使用 rancher 管理中小規模集群時,rancherui 提供的功能幾乎可以滿足我們所有的需求,並且 ui 也非常流暢。

但隨著業務量的增加,集群規模不斷的擴大,當我們擴大到使用乙個 rancher 管理近十個集群、近萬節點和幾十萬 pod 時(單集群最大規模將近幾千個節點和數十幾萬 pod),操作 rancher ui 頻繁會出現卡頓並且載入時間過長的問題,個別頁面需要 20 多秒的時間才能完成載入。嚴重時可能會造成連線不到下游集群的情況,ui 提示「當前集群 un**ailable ,在 api 準備就緒前,直接與 api 互動功能不可用。」

沒錯,我們碰到了 rancher 的效能問題。尤其是超級管理員使用者,登入時需要載入的資料量較大,基本上 ui 處於一種不可用的狀態,下游集群也斷連頻繁。

從上面的現象來看,使用 rancher 管理超大規模集群似乎遇到了效能問題,影響了使用體驗。隨後尋求 rancher 本土技術團隊幫忙,經過幾次高效的線上會議溝通,基本找到根本原因:

經了解,如果要通過社群版解決該問題,操作會相當複雜。但企業版 rancher 已經針對性能優化有了一套成熟的方案和策略,以下是 rancher 工程師介紹的關於企業版和社群版 rancher 的區別:

企業版和社群版 rancher 針對查詢資源最主要的區別在於:針對一些慢查詢api,社群版是通過 kubernetes api 讀取資料,企業版通過 cache 中讀取。同時,支援多種下游集群的連線策略,從而提公升和下游集群的管理效率。另外,企業版還對監控/日誌/gpu/網路等基礎設施能力有一定增強,並且對本土商業客戶的 bug 響應上會更快速。

出於國情需要,企業版是一種特殊的存在。海外客戶基本只能訂閱開源版本,本土客戶可以額外享受企業版的特性,並且企業版是完全本土研發團隊開發。秉承 suse rancher 的開放理念,使用者可以來去自如,企業版與開源版之間隨意切換。

針對以上分析,我們經過權衡,決定暫時使用企業版對集群進行調優實踐。

切換到企業版

首先我們從社群版 rancher 切換到了企業版,企業版的迭代偏穩重一些,發版策略不會嚴格遵循開源版。好在我們使用的社群版有對應的企業版版本,並且支援從社群版平滑切換到企業版。基本上是無損切換,直接替換映象即可,相當方便。

優化下游集群引數

rancher工程師推薦了一些下游 kubernetes 集群的引數優化方案,不過我們對自定義 rke 集群使用不是很多且主要以公有雲 kubernetes 為主,這種下游集群元件引數的優化和實際的環境相關,這裡只列出了一些比較常用的 kube-apiserver 引數作為參考:

核心調優

rancher 團隊也給我們提供了一些開源社群比較成熟的調優引數:kops/sysctls.go at master · kubernetes/kops · github(

開啟資源快取

開啟資源快取後,一些涉及讀取local 集群資料的介面,將會走 cache 模式,極大提公升 api list-all 的效能,針對我們環境中節點數特別多的場景有明顯效果。目前增加了快取的資源如下:

集群連線模式

企業版中針對連線下游集群的方式進行了優化,並且支援多種連線下游集群的方式,企業版使用者常用的連線策略包括:

最終,我們選擇了 「策略二」 去連線下游集群,因為我們有乙個效能強大的kubernetesapi lb。當切換連線下游集群的鏈路會出現短暫的下游集群不可達的情況,但不會影響下游集群的業務執行。

首先,rancher 企業版 ui 對於我們團隊來說十分方便,左側導航欄可以輕鬆找到各種功能,適合國人的使用習慣。可能是我們從事基礎設施管理的緣故,對這種極簡ui 風格可以說是非常喜歡。

其次,通過上述策略優化後,提公升了 dial kubernetes api 時的 timeout,最終幾乎看不到因超時導致的請求失敗。另外,使用下游集群的 kube api-server 的 lb endpoint 作為請求目標,下游集群斷聯現象已經消失,堪稱從村道換成了高速公路。**此外,支援部分介面通過快取快速檢索,尤其對於 node 資源,從20+ 秒的響應時間縮短至不到 5 秒。其他比較重要的介面也進行了比對,平均速度提公升了大概 75% 以上。

在 rancher 企業版中,使用者可以通過優化下游集群的引數、設定連線下游集群的策略、開啟快取等方式來大幅度優化集群效能,進而輕鬆管理大規模集群。從上述實踐可以看到,只要合理的做好調優和規劃,即便是像知乎這樣超大規模的集群,也能和小規模集群有一樣的使用體驗。

本文撰寫時,rancher 本土團隊正在對企業版效能做二次調優,據說可以從 ui 角度管理單個 project/ns 中萬級的 workload,基本上完全能覆蓋我們的使用極限了。期待我們和 rancher 再次合作,然後給大家奉上新的效能實踐分享。

如果你也有管理大規模集群的使用場景或需求,可以通過中文官網(聯絡 suse rancher,來為你的集群保駕護航!

SkyWalking為超大規模而生

譯者 董旭 本人 熱心的朝陽群眾 skywalking做為apache的頂級專案,是乙個開源的apm和可觀測性分析平台,它解決了21世紀日益龐大 分布式和異構的系統的問題。它是為應對當前系統管理所面臨的困難而構建的 就像大海撈針,skywalking可以在服務依賴複雜且多語言環境下,獲取服務對應的指...

訪談 阿里超大規模Docker化之路

林昊 畢玄 阿里巴巴研究員,平台架構部負責人,服務框架 hsf 作者,異地多活專案負責人,目前致力於資源統一管理排程系統建設。眾所周知docker技術這幾年大熱,但是過去相當長的一段時間內,阿里內部技術人員只能自己私下玩玩,沒法在阿里內部生產環境使用docker,因為docker要求的os版本和核心...

Azure超大規模資料庫入門

雲的優勢之一是規模。我們不會將三大雲平台稱為超大規模。他們在全球擁有龐大的資料中心,擁有數百萬台伺服器,這些伺服器可以視為計算和儲存池。現代的分布式應用程式可以執行在許多計算核心上,每個核心都有自己的記憶體,所有定址核心都達到了tb級。我們從構成雲的所有物理基礎架構中抽象出來,將我們使用的所有內容都...