p2p-如何拯救k8s鏡像分發的阿喀琉斯之踵

K8s的出現爲PaaS行業的發展打了一針興奮劑,Docker+k8s的技術路線已經成爲了容器雲的主流。尤爲針對大流量,大彈性的應用場景來講,k8s將其從繁雜的運維、部署工做中完全拯救出來。然而事情每每沒有那麼簡單而美好,當咱們使用k8s去管理一些大規模集羣的時候,咱們會發現有不少問題等待咱們解決。好比,當集羣中的全部節點同時去鏡像倉庫拉取鏡像的時候,這種大規模併發頗有可能阻塞倉庫的出口,致使你們的下載速度都慢得難以忍受,這就是k8s鏡像分發的阿喀琉斯之踵。雖然能夠採起鏡像倉庫集羣化的方法來緩解這個瓶頸,然而這種作法始終是治標不治本,此外還會形成維護成本升高,以及鏡像同步時效性差等問題。html

那麼如何解決這個讓人困擾的問題呢?docker

p2p看起來是一個好辦法,去中心化的作法,不但能夠下降對倉庫節點的依賴,同時也能夠爲用戶節省寶貴的外網流量。可是在k8s集羣中拉取鏡像的場景內使用p2p技術要面對一系列困難,包括節點間數據安全性的問題、無預熱前提下的大規模併發拉取、非侵入式將集羣改形成p2p網絡等。安全

最近發現華爲雲容器鏡像服務,能夠提供一套在k8s集羣中完美整合p2p下載的方案。該方案能夠有效的解決了上述問題,提升鏡像下載速度,併爲用戶節省大量帶寬資源。服務器

p2p改造後的集羣下載測試結果網絡

如上圖所示,在限制了鏡像倉庫的下載帶寬,並測試了200節點與500節點狀況下,不一樣下載方式的情況。隨着節點數量的增大,併發量觸及到鏡像倉庫下載瓶頸的可能性也隨之增大,然而使用了p2p下載方式改造的k8s集羣並無受到該瓶頸的制約,表現遠強於傳統下載方式。尤爲是對於較大的鏡像,差距更爲明顯。併發

如何把p2p下載整合到k8s集羣內呢?運維

在華爲雲容器鏡像服務中,改變了全部集羣節點去鏡像倉庫拉取鏡像的傳統作法。在用戶節點中注入peer客戶端,使用peer客戶端截取dockertcp

client的拉取鏡像請求,並將請求重定向。通過修改後只有部分節點(約10%)真正到達鏡像倉庫去獲取鏡像數據,剩餘節點轉爲自集羣內的其它節點獲取鏡像。要實現這個方案,主要的開發點有三處:對鏡像倉庫進行改造,部署並改造新的tracker服務器,以及在用戶節點注入peer客戶端。測試

對鏡像倉庫的改造插件

要想實現集羣的p2p下載功能,所下載的文件必須包含有種子,所以要對已有的鏡像倉庫進行改造。當用戶push鏡像到鏡像倉庫時,倉庫自動計算鏡像全部layer的SHA值,併爲每個layer生成一個種子文件。

爲了保證集羣的安全性驗證,倉庫爲每一個接入的peer下發由倉庫私鑰簽名的jwt token,這個token將會進入集羣網絡,並保證集羣節點的認證安全。

部署改良後的tracker服務器

傳統的Tracker服務器的主要功能是爲全部peer客戶端提供peer列表。針對k8s集羣場景搭建的Tracker服務器除了負責分發peer列表外,還增長了許多其它特性。

1. 判斷peer節點的集羣歸屬,由於tracker服務器可能對多個集羣進行服務,而每一個集羣中的節點網絡相對獨立,所以tracker負責記錄peer節點的集羣歸屬信息頗有必要,這樣能夠避免分發出網絡不互通的peer列表。

2.

Tracker服務器負責監控每一個peer的狀態,自動將部分下載完成的peer節點資源釋放,由於集羣節點屬於客戶資源,一旦完成任務應該儘快將資源釋放出去。當Tracker判斷當前集羣中完成節點比例已足夠支撐下載時,會指示部分已完結節點終結任務釋放資源,並將其移除出任務列表。當全部peer節點均已完成下載,並且一段時間內沒有新的下載請求進入,那麼Tracker會指示將所有集羣節點資源釋放。

3. Tracker按比例(約10%)指定部分peer節點到鏡像倉庫下載,以此將數據帶入整個集羣網絡。

4. Tracker提供peer節點的安全性驗證,保證同屬於一個集羣並下載同一個資源的peer節點有獲取peer列表的權限。

容器化的peer客戶端

這個解決方案,創造性的將peer客戶端容器化,並經過華爲雲容器引擎(CCE)的插件功能,將peer容器分發給整個集羣。peer容器能夠經過修改docker客戶端代理的方式,攔截下載鏡像請求的相關接口,將從鏡像倉庫下載操做轉化爲p2p網絡下載操做,並把獲取到的鏡像數據歸還給docker客戶端,以此快速的把鏡像數據分發到整個集羣網絡。該peer客戶端還具備如下特性:

· 根據tracker的分配,修改下載地址,小部分從鏡像倉庫下載,大部分從集羣網絡中下載。

· 在peer客戶端的tcp握手協議中注入jwt token安全校驗,保證節點數據安全,防止假冒節點盜取數據。

· Peer客戶端採用優先級下載方式,可以保證在下載過程當中就能夠將數據傳輸給docker客戶端,而不是當數據所有下載徹底後再傳輸給docker,以此最大限度的節省下載實際。

通過p2p方案改造後的k8s集羣,下載速度獲得了提高的同時,也爲客戶節約了大量帶寬。當前這個特性已經在華爲雲上開放給用戶使用,感興趣的同窗們快來體驗吧。

《華爲雲容器鏡像服務p2p功能使用指導》

相關文章
相關標籤/搜索