大规模容器镜像管理方案
大規模容器鏡像管理方案
隨著容器技術的深入和廣泛應用,容器鏡像的管理成為了一個關鍵的環節,在大規模并發訪問鏡像中心的時候,鏡像倉庫的高可用性、性能及安全性都是值得關注的問題。目前市場上存在一些開源及商業的解決方案,旨在滿足特定場景下的需求,本篇文章就針對容器鏡像管理的一些場景和方案進行梳理。
常用的容器鏡像中心
容器鏡像管理中心是云原生應用持續交付體系中的一個非常底層且關鍵的部分,目前市場上主流的容器鏡像管理中心主要有開源的 Docker Registry,VMWare Harbor, Sonatype Nexus3 及商業的JFrog Artifactory,這些產品適用于不同的場景,但都支持相同的標準協議。
Docker Registry
Docker Registry 應該是我們認識最早的容器鏡像中心,是由 Docker 公司開發的一款開源軟件,采用 Apache License 開源協議。很多小規模開發團隊喜歡在私有的開發測試環境使用它,因為它輕巧靈便,非常適合在規模不大的場景下提供鏡像存儲和分發服務。
在著名的公有 Docker 鏡像中心 - Docker Hub 上,我們可以查找到創建Docker Registry 的鏡像,因此 Docker 鏡像中心 registry 也可以以容器方式運行,特殊點在于其應用本身就是管理容器鏡像的。
VMWare Harbor
Harbor 是一個開源的企業級 Docker 鏡像中心,也是目前唯一原創于中國的CNCF 項目。Harbor 所做的事情并不是取代 Docker Registry,而是為其增加了諸多企業級特性,如 UI, RBAC, Security 及 Replication 等等。
Harbor 主要分5個大部分:
- 由 Nginx 服務器構成的反向代理
- 由 Docker 官方的開源 registry 鏡像構成的容器實例
- 架構中的 core services, 此部分是 Harbor 項目的主體
- 由官方 MySql 鏡像構成的數據庫容器
- 運行著 rsyslogd 的容器,通過 log-driver 的形式收集其他容器的日志
Harbor 在業內使用較為廣泛,作為鏡像管理中心,Harbor 還提供了用戶權限、鏡像安全及復制分發等企業特性,使得更多企業用戶在研發測試環境中使用。在很多云廠商產品中也有集成 Harbor 作為整體解決方案的一部分,并且在云原生領域已經開始支持Helm倉庫,使得云原生應用的部署更加便捷。
Sonatype Nexus
Sonatype Nexus 是一款優秀的Java私服倉庫,集中管理Java語言的制品,后來加入了其他語言的支持,如Python, NuGet 及 Docker 鏡像。眾多用戶都是使用其開源版本,而并未使用帶高可用特性的企業版本,于此同時企業版也將Helm倉庫納入其 RoadMap,不過是通過社區插件的形式來支持,由于 Sonatype 主要關注安全領域,未來在制品倉庫領域的發展策略尚不明朗。
JFrog Artifactory
JFrog Artifactory 是目前原生支持開發語言類型最多的制品倉庫,除了傳統的Java、.NET、Python、Php等等還支持Docker、Helm等倉庫,甚至還可以支持Debian/RPM倉庫,針對應用配置管理也有其獨特的解決方案,深受廣大用戶的歡迎。
Artifactory 除了存儲鏡像還可以記錄鏡像整個生命周期數據,為用戶在鏡像復用、階段交付及上線發布時提供數據決策支撐。很多企業都有鏡像安全審計需求,該制品倉庫可以清晰地展現容器鏡像中的內容,如RUN命令的所有指令,可在鏡像上傳時檢查指令合規性。于此同時,針對企業關心的正反向依賴解析也有很好的支持,可快速分析某個其他語言的制品(比如java語言JAR包)被哪些鏡像層所引用,以及鏡像層被其他哪些鏡像所公用。
容器鏡像中心面臨的挑戰
容器鏡像中心在實際生產環境中依然會遇到一些棘手的問題,比如并發量比較大的場景下的性能問題,安全相關的問題及數據熱備容災等等。
鏡像中心的多活及容災熱備
單節點容器鏡像中心在高并發下載場景下會出現性能瓶頸,從而需要多節點來共同分擔下載請求負載,因此多活節點是保證性能的必要手段。由于上傳流量相對于下載流量小很多,因此常常被人忽略,集群模式下寫入必須滿足數據一致性,即必須由Leader負責與集群其他節點的數據同步。因此由多活節點保證并行性能及容災備份節點提供冗余機制的模型就成為大規模鏡像管理集群的標準架構。
鏡像中心的多數據中心投送
容器應用在本地數據中心內會由于升級、遷移、回滾等動作而需要實時拉取鏡像,如果此時鏡像在異地數據中心,那么性能肯定會收到較大影響,最終用提體驗較差。因此,在跨地多數據中心部署架構下,比如能夠實現鏡像的多數據中心投送,確保應用在本地數據中心獲取鏡像,這與緩存的基本思想類似。
鏡像的多數據中心投送場景不僅僅局限于應用部署,在常見的多地域研發中心協同的時候,也會存在這種跨數據中心依賴的情形,需要能夠按需從異地數據中心獲取鏡像,然后再本地數據中心進行緩存,以提升研發或構建時依賴獲取的效率。
鏡像的核心歷史元信息管理
鏡像本身也是線上運行的交付制品,隱含著很多的背景信息,比如構建信息、測試信息及安全信息等等,這些信息對于線上應用的可用性和穩定性都有著千絲萬縷的聯系,這些信息如果沒有集中進行管理,會導致整個交付信息流中斷,不利于線上問題的排查及對交付流程的評估分析。
鏡像的動態及靜態安全管理
鏡像本身由各個鏡像層組成,每個鏡像層又由若干二進制文件組成,這些文件中絕大多數都不是由開發者開發的,而是第三方或者開源的內容,然而開源并不等同于安全,這些安全狀態未知的內容的潛在風險非常大,而這些問題的影響范圍如何更加不得而知。
其實安全不僅僅來自于外部,內部開發的組件在被層層引用時也可能會造成整個業務組件發生問題,比如存在內存溢出等,甚至是老版本的升級對受影響的組件的回歸測試不完整也會造成不可預知的問題。
鏡像除了靜態一些安全因素之外,動態安全也應該是受到關注的內容,如鏡像中哪些指令是允許執行的,而哪些不允許執行的,如何動態學習一些頻發執行且需要root權限的系統調用(syscall)等行為,給管理者進行風險告警和快速阻斷,這些都是生產環境需要解決的重要課題。
容器應用編排及配置管理
容器引用發布其實不僅僅設計鏡像,而且還設計很多容器應用本身的參數,比如實例數、服務、config、Volume等等,這些資源要進行一個統一的編排其實還是有一定的復雜度的。大型開發項目人員眾多,各自有各自的習慣和做法,缺乏有效的標準和工具,很容易造成碎片化、難以復用共享等問題。
Helm 是Kubernetes官方的包管理器(Package Manager),除了提供Chart的倉庫,還能夠對容器應用的生命周期管理,比如部署、升級、回滾等,配置其生命周期事件的擴展(Hook)及插件機制,可以很方便地實現灰度、藍綠等策略支持,這個對于容器應用編排有著很大的促進作用。
容器應用的灰度及藍綠發布策略需要一些基礎條件,比如應用需建立起與配置的關聯關系,配置需要建立與運行環境中配置Key的關聯關系,這樣才能通過自動化的手段實現在檢測到異常時自動回滾,并且配置中心還必須保證高可用。這些基礎條件必須與開發工具、語言無關,最好是通過同一個平臺進行管理。
容器鏡像存儲及分發優化
容器鏡像是分層存儲的,除了最上層是讀寫層之外,其余的全部是只讀層,從存儲優化的角度來說,這時候就需要在多個鏡像之間來共享某些層。在物理層如果鏡像層物理文件依然是目錄遞歸查詢的方式,顯然查詢效率會大大降低,而比較合適的一種設計是通過建立二進制文件的SHA2碼的索引,從而實現快速定位具體二進制文件的物理位置,類似存儲虛擬化的設計思路。
容器鏡像分發解決方案
容器鏡像分發通常有兩種模式,一種是Push模式,即一個中心節點向多個遠端節點進行推送,另一種是由遠端節點進行定時輪詢,發現有新的內容則拉取到本地。對于觸發方式,也分為定時觸發和事件觸發兩種。
邊緣節點CDN加速
通過CDN形式進行分發是最直觀的加速方式,在邊緣網絡提供只讀節點,供用戶就近訪問可以減少中心節點的訪問流量,達到提升鏡像下載速度的目的。在實際的分發架構中,制品庫對接分發者,分發者可以控制分發策略等,分發者對接各個邊緣節點(Edge Node),最后用戶可以從多個邊緣節點的負載均衡進行下載,進一步提升和下載速度,因為邊緣節點支持緩存機制。
P2P 分發
目前通過P2P協議分發鏡像也是一種逐漸成為主流的方案,國內的華為、阿里及百度均在此領域有探索,企業級開源容器鏡像中心VMWare Harbor也有類似方案。例如阿里的Dragonfly已經成為正式的CNCF項目,華為容器技術團隊也發表了相應的技術方案。整體來看,P2P分發協議是通過Controller下發鏡像分發任務,由Tracker去跟蹤各個客戶端下載的二進制層的元數據信息,最終進行匯總決定任務是否完成。整體架構如下:
Docker鏡像是按照Layer存儲的,意味著不同的鏡像可共享Layer,這種機制不僅減少了物理存儲空間的消耗,也在分發時減少了帶寬的損耗。當查詢到需要下載Layer時先通過export的方式導出和壓縮Layer文件,然后為其制作BT種子,并由控制器分發下載任務給各個客戶端代理,客戶端代理收到任務會檢查要下載Layer本地是否已存在,若不存在則根據任務中的Layer相關信息進行下載,然后由Docker Daemon進行導入,整個下載的過程都是并發執行的。
總結
隨著容器規模的快速增長,容器鏡像中心的高可用性保障遇到的挑戰將會越來越大,本質上來說也是對分布式文件系統的可靠性的檢驗,企業級容器鏡像中心將會是云原生時代應用基礎設施的關鍵組成部分,各種管理架構和技術也在不斷深化和發展中,期望這篇文章對于關注相關技術的讀者有所幫助。
總結
以上是生活随笔為你收集整理的大规模容器镜像管理方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: w8ndows 秒表,关闭 Window
- 下一篇: 高考新生,天津独立院校转设:南开大学滨海