大規模集羣中Docker鏡像如何分發管理?試試Uber剛開源的Kraken

Docker註冊表的主要目的是存儲和分發Docker鏡像,看似是一個相對簡單的任務,但是如果遇到了像Uber這樣的大規模計算集羣,就很容易成爲可伸縮性的瓶頸。在多區域和混合雲系統的計算環境中,鏡像分發會變得更具挑戰性。

爲了解決遺留Docker註冊表堆棧的性能問題,Uber的集羣管理團隊開發了一個開源對等(P2P)Docker註冊表kraken。

Docker容器是Uber基礎設施的基礎構建塊,但是隨着計算集羣數量和大小的增加,一個簡單的帶有sharding和緩存的Docker註冊表設置無法跟上高效分發Docker映像所需的吞吐量。

Kraken重點關注在可擴展性和可用性方面,用於混合雲環境中的Docker鏡像管理、複製和分發。支持可插拔的後端,Kraken可以作爲分發層插入到現有的Docker註冊表設置中。

圖1 Docker圖像層分佈在Kraken集羣中的可視化

架構

在Kraken研發時,Uber探索了多種設計,最終選擇了p2p架構。Kraken使用針對數據中心網絡環境定製的P2P協議,並在企業級改進了微服務生命週期管理。

image

代替管理數據塊,Kraken支持可插入存儲選項,可以插入可靠的blob存儲選項,如S3、HDFS或其他註冊表,且存儲接口簡單,易於添加新選項。

另外,Kraken在現有的成熟技術上建立了獨特的數據分發解決方案,支持自我修復,易於維護,支持集羣之間的無損和基於規則的異步複製。

大規模的性能改進

2018年年初,Kraken首次部署在了Uber中,其在遺留Docker註冊表堆棧中遇到的性能問題迎刃而解。

據悉,在Uber最繁忙的時候,Kraken集羣每天分發超過100萬個blob,其中有10萬個分發的blob大小超過1GB或更多。在生產高峯期,Kraken可以在30秒內分發20000個100MB到1GB的blob。

Kraken的高可擴展性使其能夠支持至少8000臺主機的集羣,並以超過集羣中主機最大下載速度限制50%的速度分發Docker鏡像。另外,對Kraken來說,集羣和鏡像大小對下載速度沒有顯著影響。

自內部發布以來,Kraken一直被用於管理和分發Uber的所有Docker鏡像。這次將該工具開源出來,Uber表示希望能夠激發有關工程和設計最佳實踐的討論,以便與Docker一起構建一個適應性強且可靠的基礎設施。

Kraken的GitHub地址:https://github.com/uber/kraken

Uber博客鏈接:https://eng.uber.com/introducing-kraken/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章