為什么需要鏡像同步
由於對鏡像的訪問是一個核心的容器概念,在實際使用過程中,一個鏡像庫可能是不夠用的,下例情況下,我們可能會需要部署多個鏡像倉庫:
- 國外的公有鏡像下載過慢,需要一個中轉倉庫進行加速
- 容器規模較大,一個鏡像倉庫不堪重負
- 對系統穩定性要求高,需要多個倉庫保證高可用性
- 鏡像倉庫有多級規划,下級倉庫依賴上級倉庫
更常用的場景是,在企業級軟件環境中,會在軟件開發的不同階段存在不同的鏡像倉庫,
- 在開發環境庫,開發人員頻繁修改鏡像,一旦代碼完成,生成穩定的鏡像即需要同步到測試環境。
- 在測試環境庫,測試人員對鏡像是只讀操作,測試完成后,將鏡像同步到預上線環境庫。
- 在預上線環境庫,運維人員對鏡像也是只讀操作,一旦運行正常,即將鏡像同步到生產環境庫。
- 在這個流程中,各環境的鏡像庫之間都需要鏡像的同步和復制。
功能簡介
在功能設計方面,Harbor仍然以“項目”為中心, 通過對項目配置“復制策略”,標明需要復制的項目以及鏡像。管理員在復制策略中指明目標實例,即復制的“目的地”,並對它的地址和連接時使用的用戶名密碼進行設置。當復制策略被激活時,源項目下的所有鏡像,都會被復制到目標實例;此外,當源項目下的鏡像被添加或刪除(push或delete), 只要策略還在激活狀態,鏡像的變化都會同步到目標實例上去, 如下圖所示:
在較大的容器集群中,往往需要多個Registry服務器做負載均衡,可以采用主從發布模式,鏡像只需要發布一次,就可以推送到多個Registry實例中。同時還支持雙主復制和層次型的多級鏡像發布,如下圖所示:
Harbor的鏡像同步機制
有了多個鏡像倉庫,在多個倉庫之間進行鏡像同步馬上就成為了一個普遍的需求。比較傳統的鏡像同步方式,有兩種:
- 第一種方案,使用Linux提供的RSYNC服務來定義兩個倉庫之間的鏡像數據同步。
- 第二種方案,對於使用IaaS服務進行鏡像存儲的場景,利用IaaS的配置工具來對鏡像的同步進行配置。
這兩種方案都依賴於倉庫所在的存儲環境,而需要采用不同的工具策略。Harbor則提供了更加靈活的方案來處理鏡像的同步,其核心是三個概念:
- 用Harbor自己的API來進行鏡像下載和傳輸,作到與底層存儲環境解耦。
- 利用任務調度和監控機制進行復制任務的管理,保障復制任務的健壯性。在同步過程中,如果源鏡像已刪除,Harbor會自動同步刪除遠端的鏡像。在鏡像同步復制的過程中,Harbor會監控整個復制過程,遇到網絡等錯誤,會自動重試。
- 提供復制策略機制保證項目級的復制需求。在Harbor中,可以在項目中創建復制策略,來實現對鏡像的同步。與Docker Registry的不同之處在於,Harbor的復制是推(PUSH)的策略,由源端發起,而Docker Registry的復制是拉(PULL)的策略,由目標端發起。
我們准備兩台機器,並分別安裝好Harbor( 版本:1.4.0 ):
主Harbor | harbor.test.com | 192.168.5.150 |
備Harbor | harbor-01.test.com | 192.168.5.151 |
docker client | 192.168.5.107 |
1. 在主Harbor 創建新項目test
2.在主Harbor的倉庫管理->新建目標:
3.在Harbor的復制管理->新建規則:
4.在客戶端上傳image到主Harbor
[root@clinet ~]# docker push harbor.test.com/test/docker-test:latest The push refers to a repository [harbor.test.com/test/docker-test] 146788dad3cb: Layer already exists 2f6c24bddb30: Layer already exists 952a32dca55a: Layer already exists b308dc99c2a4: Layer already exists 4ac76077f2c7: Layer already exists latest: digest: sha256:520230466225bac646e1cd5ff645eb3f6d24b8e62039e5ffb5d355c67e4058e6 size: 1354
5.在主Harbor的復制管理中看到多了一條復制任務在執行:
6.再在備Harbor中已經看到test/docker-test.latest 已經從主Harbor自動復制過來:
參考:https://blog.csdn.net/hxpjava1/article/details/79308890
參考:https://blog.csdn.net/kozazyh/article/details/79829463
參考:https://my.oschina.net/vmwareharbor/blog/728085