聊聊Harbor架構(gòu)的那些事兒
Harbor 簡介
Harbor 是一個(gè)用于存儲(chǔ)和分發(fā)Docker鏡像的企業(yè)級(jí)Registry服務(wù)器。
作為一個(gè)企業(yè)級(jí)私有 Registry 服務(wù)器,Harbor 提供了更好的性能和安全。提升用戶使用 Registry 構(gòu)建和運(yùn)行環(huán)境傳輸鏡像的效率。Harbor 支持安裝在多個(gè) Registry 節(jié)點(diǎn)的鏡像資源復(fù)制,鏡像全部保存在私有 Registry 中, 確保數(shù)據(jù)和知識(shí)產(chǎn)權(quán)在公司內(nèi)部網(wǎng)絡(luò)中管控。另外,Harbor 也提供了高級(jí)的安全特性,諸如用戶管理,訪問控制和活動(dòng)審計(jì)等。
- 基于角色的訪問控制:用戶與 Docker 鏡像倉庫通過“項(xiàng)目”進(jìn)行組織管理,一個(gè)用戶可以對(duì)多個(gè)鏡像倉庫在同一命名空間(project)里有不同的權(quán)限。
- 鏡像復(fù)制:鏡像可以在多個(gè) Registry 實(shí)例中復(fù)制(同步)。尤其適合于負(fù)載均衡,高可用,混合云和多云的場景。
- 圖形化用戶界面:用戶可以通過瀏覽器來瀏覽,檢索當(dāng)前 Docker 鏡像倉庫,管理項(xiàng)目和命名空間。
- AD/LDAP 支持:Harbor 可以集成企業(yè)內(nèi)部已有的 AD/LDAP,用于鑒權(quán)認(rèn)證管理。
- 審計(jì)管理:所有針對(duì)鏡像倉庫的操作都可以被記錄追溯,用于審計(jì)管理。
- 國際化:已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語言將會(huì)添加進(jìn)來。
- RESTful API:RESTful API 提供給管理員對(duì)于 Harbor 更多的操控, 使得與其它管理軟件集成變得更容易。
- 部署簡單:提供在線和離線兩種安裝工具, 也可以安裝到 vSphere 平臺(tái)(OVA 方式)虛擬設(shè)備。
Harbor 架構(gòu)
1、主從同步架構(gòu)
Harbor 官方默認(rèn)提供主從復(fù)制的方案來解決鏡像同步問題,通過復(fù)制的方式,可以實(shí)時(shí)將測試環(huán)境harbor倉庫的鏡像同步到生產(chǎn)環(huán)境harbor,類似于如下流程:
在實(shí)際生產(chǎn)運(yùn)維的中,往往需要把鏡像發(fā)布到幾十或上百臺(tái)集群節(jié)點(diǎn)上。這時(shí),單個(gè)Registry已經(jīng)無法滿足大量節(jié)點(diǎn)的下載需求,因此要配置多個(gè)Registry實(shí)例做負(fù)載均衡。手工維護(hù)多個(gè)Registry實(shí)例上的鏡像,將是十分繁瑣的事情。Harbor可以支持一主多從的鏡像發(fā)布模式,可以解決大規(guī)模鏡像發(fā)布的難題:
只要往一臺(tái)Harbor上發(fā)布,鏡像就會(huì)像“仙女散花”般地同步到多個(gè)Registry中,高效可靠。
如果是地域分布較廣的集群,還可以采用層次型發(fā)布方式,比如從集團(tuán)總部機(jī)房同步到分公司1機(jī)房,再從分公司1機(jī)房同步到分公司2機(jī)房:
然而單靠主從同步,仍然解決不了harbor主節(jié)點(diǎn)的單點(diǎn)問題。繼續(xù)看下面Harbor架構(gòu)。
2、雙主復(fù)制說明
雙主復(fù)制其實(shí)就是復(fù)用主從同步實(shí)現(xiàn)兩個(gè)harbor節(jié)點(diǎn)之間的雙向同步,來保證數(shù)據(jù)的一致性,然后在兩臺(tái)harbor前端頂一個(gè)負(fù)載均衡器將進(jìn)來的請(qǐng)求分流到不同的實(shí)例中去,只要有一個(gè)實(shí)例中有了新的鏡像,就是自動(dòng)的同步復(fù)制到另外的的實(shí)例中去,這樣實(shí)現(xiàn)了負(fù)載均衡,也避免了單點(diǎn)故障,在一定程度上實(shí)現(xiàn)了Harbor的高可用性:
這個(gè)方案有一個(gè)問題就是有可能兩個(gè)Harbor實(shí)例中的數(shù)據(jù)不一致。假設(shè)如果一個(gè)實(shí)例A掛掉了,這個(gè)時(shí)候有新的鏡像進(jìn)來,那么新的鏡像就會(huì)在另外一個(gè)實(shí)例B中,后面即使恢復(fù)了掛掉的A實(shí)例,Harbor實(shí)例B也不會(huì)自動(dòng)去同步鏡像,這樣只能手動(dòng)的先關(guān)掉Harbor實(shí)例B的復(fù)制策略,然后再開啟復(fù)制策略,才能讓實(shí)例B數(shù)據(jù)同步,讓兩個(gè)實(shí)例的數(shù)據(jù)一致。
另外,這里還需要多吐槽一句:在實(shí)際生產(chǎn)使用中,主從復(fù)制十分的不靠譜!所以這里推薦使用下面要說的這種架構(gòu)方案。
3、多實(shí)例共享后端存儲(chǔ)
共享后端存儲(chǔ)算是一種比較標(biāo)準(zhǔn)的方案,就是多個(gè)Harbor實(shí)例共享同一個(gè)后端存儲(chǔ),任何一個(gè)實(shí)例持久化到存儲(chǔ)的鏡像,都可被其他實(shí)例中讀取。通過前置LB進(jìn)來的請(qǐng)求,可以分流到不同的實(shí)例中去處理,這樣就實(shí)現(xiàn)了負(fù)載均衡,也避免了單點(diǎn)故障。
如果最終生產(chǎn)環(huán)境集群中服務(wù)器較多,依賴做完LB的Harbor也無法完全達(dá)到需求時(shí),可以使用如下架構(gòu),部署下級(jí)Harbor節(jié)點(diǎn)從主節(jié)點(diǎn)同步鏡像,然后再分發(fā)給生產(chǎn)服務(wù)器。
這個(gè)方案在實(shí)際生產(chǎn)環(huán)境中部署需要考慮三個(gè)問題:
- 1、共享存儲(chǔ)的選取,Harbor的后端存儲(chǔ)目前支持AWS S3、Openstack Swift, Ceph等,在下節(jié)文章在講解如何部署這種高可用架構(gòu),后端存儲(chǔ)使用阿里云極速性NAS。
- 2、Session在不同的實(shí)例上共享,這個(gè)現(xiàn)在其實(shí)已經(jīng)不是問題了,在最新的harbor中,默認(rèn)session會(huì)存放在redis中,只需要將redis獨(dú)立出來即可??梢酝ㄟ^redis sentinel或者redis cluster等方式來保證redis的可用性。不過單臺(tái)Redis也可以,只是Redis沒有高可用。
- 3、Harbor多實(shí)例數(shù)據(jù)庫問題,這個(gè)也只需要將harbor中的數(shù)據(jù)庫拆出來獨(dú)立部署即可。讓多實(shí)例共用一個(gè)外部數(shù)據(jù)庫,數(shù)據(jù)庫的高可用也可以通過數(shù)據(jù)庫的高可用方案保證。
小結(jié)
上文簡單介紹 Harbor 不同的架構(gòu),下文再介紹 多實(shí)例共享后端存儲(chǔ) 架構(gòu)如何部署?使用阿里云極速性NAS作為后端存儲(chǔ)。敬請(qǐng)期待。。。
參考鏈接http://www.yunweipai.com/39320.html