本文節選自《Harbor權威指南》,首發「亨利筆記」公衆號,精選網易數帆旗下網易輕舟微服務平臺集成 Harbor 的方式和應用場景,讀者既能夠了解 Harbor 的特性和使用模式,也能夠在方案制定和管理實踐上借鑑成功經驗。前端
網易輕舟微服務團隊使用的是 Harbor 1.7 版本,對該版本進行了性能上的優化和功能上的加強,並將加強的 Webhook 功能貢獻回 Harbor 項目。數據庫
爲知足網易的音樂、電商、傳媒、教育等業務線的微服務化需求,網易杭州研究院研發了一套完整的雲原生應用管理平臺——網易輕舟微服務,平臺以 Docker、Kubernetes、Harbor、Istio 爲基礎設施,構造了 DevOps、微服務等一套完整的解決方案,並將其開放給第三方企業解決業務容器化和服務治理等問題。該平臺在生產環境集羣中曾達到單集羣運行 10000 個節點的規模。後端
輕舟微服務平臺的總體架構以下圖所示。緩存
該平臺基於 Harbor 提供了鏡像倉庫功能,併爲 PaaS 平臺的其餘功能提供服務,上層的微服務系統則依賴 PaaS 平臺提供的服務,配套日誌、監控等平臺功能,完成了從項目研發到服務治理的全生命週期管理。網易輕舟團隊在 Harbor 上作了一層業務開發,使得輕舟鏡像倉庫支持多租戶、多項目、多環境,而且和輕舟微服務平臺數據模型、權限模型打通,將鏡像倉庫功能融入多個業務流程中,將應用的上下游貫通,造成一套完整的應用管理和交付流程。安全
1.Harbor 的使用
網易輕舟微服務平臺中鏡像倉庫服務的核心架構以下圖所示。輕舟鏡像倉庫服務和輕舟容器雲服務構成了中間層服務,被輕舟 DevOps 平臺所依賴。輕舟鏡像倉庫服務能夠管理多套 Harbor,並將倉庫資源分配給不一樣的 Kubernetes 集羣使用,作到集羣級別的資源隔離,經過 Harbor 的開放 API 管理每一個實例下的數據資源。另外,輕舟鏡像倉庫服務負責將 Harbor 和輕舟微服務平臺的數據模型對齊,打通 Harbor 和輕舟微服務平臺的權限系統,用戶可以使用輕舟微服務平臺的帳號和權限來管理鏡像。性能優化
輕舟微服務平臺的 Harbor 之間能夠經過遠程複製的方式同步鏡像,作到研發和運維人員在不一樣環境下的協做。用戶能夠爲項目不一樣環境下的集羣分配不一樣的 Harbor 實例,例如線下使用一套 Harbor,線上使用另外一套 Harbor,而且配置合適的複製規則,將測試經過的鏡像推送到線上倉庫中發佈和使用。這種設計在線上線下環境網絡隔離而且應用發佈更新頻繁的場景中很是實用,用戶只需連通兩套 Harbor 之間的網絡,就能夠在集羣中使用私有網絡分發鏡像,以下圖所示。網絡
這樣的架構有如下好處。架構
(1)線上線下鏡像倉庫隔離,防止誤操做。併發
(2)測試環境一般會頻繁構建鏡像、部署、測試,因此線下環境中 Harbor 的負載較大,運維複雜性高,服務不可用率更高,分開後能夠保證線上環境的穩定性。負載均衡
(3)配置適當的 Harbor 遠程複製策略,只有通過測試且須要發佈的鏡像纔會由 Harbor 複製到線上倉庫,大大減小了線上 Harbor 的鏡像數量,性能更好,清理垃圾鏡像等運維過程更簡單。(本文爲公衆號亨利筆記原創文章)
(4)線上線下環境網絡在正常狀況下是互相隔離的,既可減小網絡間的鏡像拉取,節省流量費用,也確保了線上系統的安全。
爲了保證 Harbor 的穩定性和高性能,輕舟微服務平臺的 Harbor 後端採用了網易對象存儲及 S3 對象存儲驅動而且作了性能優化。
2.實現 Harbor 的高可用性
Harbor 高可用的一種可行方案是部署兩個 Harbor 實例,這兩個 Harbor 實例共享存儲而且能夠各自獨立工做,經過負載均衡統一對外提供服務。若是每一個 Harbor實例內部的組件沒有冗餘的能力,則此架構有必定的潛在問題:當一個 Harbor 實例的後端組件發生故障時,負載均衡器可能依舊把請求發送到這個 Harbor 實例(由於前端依然正常),可是這個請求最終處理失敗。因此 Harbor 的高可用方案須要 Harbor 的每一個組件都有冗餘設計,使每一個組件都有高可用性,任何一個組件出現故障都不會影響 Harbor 總體對外提供服務。
Harbor 要實現高可用,還須要解決如下問題。
(1)Harbor 使用的 PostgreSQL 數據庫在國外應用普遍,自己提供了主備複製,可是總體的高可用性還比較欠缺。早期輕舟微服務平臺基於主備複製實現了高可用性及一套複雜的人工運維方案。後來使用了開源項目 Stolon,實現了雲上 PostgreSQL 的高可用和故障自愈能力,知足了 Harbor 對數據存儲的要求,運行穩定,運維工具豐富,對 Harbor 的私有化交付很是有利。
(2)Harbor 使用 Redis 做爲緩存,只支持單一的地址配置,並不支持 Redis 哨兵或者 Redis 集羣等常見的高可用架構。Harbor 社區有一套基於 HAProxy 的方案,能知足 Harbor 生產級的應用,其中的一些參數須要用戶調試和設置。(本文爲公衆號亨利筆記原創文章)
(3)異步任務執行日誌和鏡像等數據須要使用網盤或者對象存儲,輕舟團隊給 Harbor 貢獻了一個功能:從 Harbor 1.7 開始支持將異步任務執行的日誌放入數據庫中,再也不依賴於網盤或對象存儲。鏡像數據的高可用能夠經過網盤或者對象存儲解決,可是維護成本較高。輕舟微服務平臺基於 Rsync 和 Inotify 實現了一套文件自動同步方案,保證了本地文件模式下主備數據的一致性。該方案須要容許極少正在處理的鏡像丟失,可是系統很是輕量,可配合相應的監控方案保證主備同步及時、有效。另外,此方案的數據遷移和備份很是方便,用戶能夠經過 Rsync 實現數據的遠程冷備份。
監控告警在確保 Harbor 的高可用性上不可缺乏。Harbor 是被部署在 Kubernetes 集羣中的,並使用 Prometheus 提供監控告警功能,目前的監控項有如下幾方面。
◎Harbor 部署主機的資源使用狀況。
◎Harbor 服務的容器健康狀況,這是 Harbor 提供的功能。
◎Harbor 業務健康監控,好比複製失敗告警、掃描失敗告警等,能夠經過對 Harbor 增長度量接口實現,也能夠經過 Harbor 的 Webhook 功能實現。
3.提升Harbor的性能
Harbor 的性能主要涉及鏡像併發推送和拉取、鏡像複製、GC 等方面。做爲鏡像倉庫,大規模鏡像的分發能力是最能評估 Harbor 性能的。(本文爲公衆號亨利筆記原創文章)
網易單個業務的副本數能夠達到成百上千的規模,持續集成流水線規模也很大,因此須要關注 Harbor 的鏡像併發推送和拉取性能。Harbor 1.7 及以前的版本由於Golang 語言包的問題,併發拉取超過必定頻率會出錯。其餘要考慮的是大規模推送和分發面臨的帶寬問題,不管是Harbor服務的網絡帶寬仍是後端存儲的 I/O 帶寬,均可能成爲性能瓶頸。
解決帶寬問題有多種方案:擴容、增長緩存、使用分佈式鏡像分發工具。輕舟團隊在嘗試了多種方式以後,決定採用 P2P 鏡像分發系統。目前輕舟鏡像倉庫集成了 Uber 開源的 Kraken 項目做爲 P2P 分發工具,配上合適的監控方案,可較好地解決大規模鏡像分發的問題。
4.鏡像倉庫和DevOps
有的用戶可能會以爲鏡像倉庫只是一個文件倉庫,是用來存放鏡像的,其實這忽略了鏡像倉庫的重要意義。在 CNCF 的應用交付特別興趣小組(AppDelivery SIG)中就有應用打包的專題。在實際應用中,鏡像倉庫是應用交付流程中的一個重要環節,能起到打通整個應用交付流程的做用。應用從代碼編寫到部署上線,經歷了代碼、製品、鏡像、工做負載的流程,這又涉及編譯、構建、部署等 CI/CD 的核心流程,貫穿於這個流程中的就是鏡像,因此鏡像倉庫意義非凡。
在以應用爲核心的 DevOps 流程中,人們都會關注應用的演進過程,關注應用的生命週期,因此圍繞鏡像設計應用的版本管理,將代碼、鏡像、部署關聯起來,從而讓用戶追蹤代碼的最終交付,追蹤雲上服務的代碼源頭,讓用戶流暢地操做應用的交付流程,並從應用的視角貫穿這個 CI/CD 流程。社區提出的「源代碼到鏡像」概念,使流程對終端用戶透明,用戶只需關注具體業務的開發過程,其餘都是自動化完成的,而鏈接用戶和運維的正是這些過程的產出品。(本文爲公衆號亨利筆記原創文章)
鏡像管理也是 CI/CD 流程的一部分,Webhook 能夠觸發部署流水線,漏洞掃描是雲原生應用安全的核心功能,鏡像遠程複製能夠解決跨雲部署的問題。這些特性都真真切切地將 Harbor 嵌入 DevOps 的流程中,而且在每一個環節中都發揮着做用。
5.網易和Harbor社區
網易曾有自研的鏡像倉庫產品,但在 Harbor 開源的後,輕舟團隊開始關注 Harbor社區的發展,並在產品中引入 Harbor。一方面 Harbor 自己功能比較完善,社區活躍,發展較快;另外一方面 Harbor 是 CNCF 鏡像倉庫項目,是開放的社區,符合網易輕舟微服務的發展路線。
網易將 Harbor 做爲鏡像倉庫的標準,圍繞 Harbor 的功能設計了不少使用場景,同時積極優化和加強 Harbor 的功能,而且貢獻、回饋社區。輕舟團隊給Harbor貢獻了異步任務日誌的數據庫功能,參與開發 Harbor 的鏡像複製功能,獨立貢獻並維護 Webhook 的功能,還參與 Harbor 的 P2P 分發功能開發。除了功能上的貢獻,輕舟團隊還對 Harbor 作了大量生產級測試,並向社區提交了 Harbor 的性能瓶頸問題和優化點。
做者簡介:裴明明,網易數帆輕舟事業部資深架構師,Harbor 開源項目維護者,主要負責網易輕舟雲原生 DevOps 體系設計、研發及落地等,在雲原生、DevOps、微服務架構等領域擁有豐富的經驗。
《Harbor權威指南》目前噹噹網優惠中,你們能夠搜索購買。