用分佈式存儲VSAN實現Harbor Registry的高可用方案

用分佈式存儲VSAN實現Harbor Registry的高可用方案

陳實 張海寧mysql

不久前,VMware發佈了Docker容器數據卷的驅動(Docker Volume Driver for vSphere)1.0 beta版本,使得Docker宿主機可以直接在vSphere的數據存儲(VSAN,VMFS,NFS等)中建立卷,並直接掛載到Docker容器中,能夠解決Docker容器的數據持久化存儲的問題。不只能夠提供存儲,這些卷還能利用vSphere的「基於存儲策略的管理(SPBM, Storage Policy Based Management)」, 按需設置更高的「可容忍主機故障數(FTT)」、設置更大的「條帶數(SW)」等,以得到更高級別的數據保護和更好的性能。此驅動爲開源項目,下載地址:https://github.com/vmware/docker-volume-vspheregit

在容器應用架構中,Registry(容器鏡像倉庫)是必不可少的組件,負責保存和發佈容器鏡像,高效可靠的Registry是確保容器應用運行的基礎。本文經過詳細的步驟,來講明如何在分佈式存儲Virtual SAN (VSAN)中建立數據卷,並以開源企業級Harbor Registry爲例,把鏡像和數據庫數據持久化到數據卷中,從而達到更好的數據保護和高可用性(HA)的目的。本文涉及的Harbor Registry是VMware公司的另一個開源項目,由VMware中國研發的團隊負責開發。Harbor幫助用戶迅速搭建一個企業級的registry 服務,提供了圖形管理界面, 訪問控制,AD/LDAP集成,鏡像同步等企業用戶需求的功能,同時還原生支持中文,深受中國用戶的歡迎。下載地址:github

https://github.com/vmware/harbor sql

原理詳解docker

本文所描述的架構以下圖,包含3個ESXi節點組成的VSAN分佈式存儲集羣,以及Harbor Registry運行的一臺虛擬機。另外,在Virtual SAN中建立了三個Docker外部卷,用於Harbor中數據的持久化存儲。該集羣由各節點的本地磁盤提供池化存儲,能夠承受一個節點失效而不影響可用性。詳細配置步驟以下:數據庫

1. 先搭建了一個包含3個主機的Virtual SAN集羣,在其中一臺主機上安裝一個Photon OS虛擬機,做爲運行Docker的宿主機。固然,讀者也能夠不用Photon OS,自行安裝Ubuntu等其餘Linux版本的虛擬機,只要其能正常運行Docker Engine和Docker-Compose等服務便可。架構

 

2. 在「Docker Volume Driver for vSphere」項目的release頁面(https://github.com/vmware/docker-volume-vsphere/releases),分別下載安裝於ESXi主機和虛擬機上的插件,例如,對於1.0Beta版本,文件名分別爲:app

vmware-esx-vmdkops-1.0.beta.zip分佈式

docker-volume-vsphere-1.0.beta-1.x86_64.rpm性能

 

3. 在ESXi主機上,用如下命令安裝插件,安裝完成後,不須要從新啓動。

# esxcli software vib install -d "/vmware-esx-vmdkops-1.0.beta.zip" --no-sig-check –f

 

4. 在Photon OS虛擬機上,安裝RPM包。對於基於Debian的系統,請安裝對應的deb包。

# rpm -ivh docker-volume-vsphere-1.0.beta-1.x86_64.rpm

 

5. ESXi主機上插件安裝完成後,在主機上會安裝一個管理腳本,位於/usr/lib/vmware/vmdkops/bin/vmdkops_admin.py,這個腳本能夠幫助vSphere管理員對建立的Docker外部捲進行管理。例如,能夠建立不一樣的存儲策略。在Virtual SAN中,默認的存儲策略條帶數爲1(即SW=1),做爲示例,咱們建立一個條帶數爲2的策略。SSH 到集羣中任意一個ESXi主機,運行如下命令:

# /usr/lib/vmware/vmdkops/bin/vmdkops_admin.py policy create --name SW=2 --content '(("stripeWidth" i2))'

 

其中FTT=0是這個策略的名字,其中的關鍵點在於設置策略的內容,在這裏是'(("stripeWidth" i2))'。其它可設置的參數與Virtual SAN的標準參數相同,它們的參數名和說明以下:

 

6. 此時,即可以在Photon虛擬機上,經過命令建立Docker卷。咱們首先建立兩個使用默認存儲策略的卷,再建立一個使用SW=2的卷,以做示例。

# docker volume create --driver=vmdk --name=vsanvol1 -o size=50gb

vsanvol1

# docker volume create --driver=vmdk --name=vsanvol2 -o size=20gb

vsanvol2

# docker volume create --driver=vmdk --name=vsanvol3 -o size=20gb -o vsan-policy-name=SW=2

vsanvol3

經過指定--driver=vmdk參數,便可在vSphere數據存儲中建立一個卷。建立出的卷存儲位置與Photon虛擬機的位置相同。由於Photon OS虛擬機放置在Virtual SAN存儲上,因此建立出的卷也放置在Virtual SAN存儲上。此卷以VMDK的形式存在,值得注意的是,由於此VMDK此時沒有掛載到任何虛擬機上,因此在瀏覽vSphere客戶端時,經過虛擬機頁面找不到關於此卷的信息。

可是,這些VMDK在vsanDatastore的dockvols目錄下面能夠看見: 

在下文中,咱們能夠看到,當此卷掛載到某個運行的容器時,在vSphere客戶端中就能經過關聯的VM找到相應的VMDK。

 

7. 下載Harbor源代碼,在安裝以前,爲了使用咱們新建立的卷,須要修改Harbor配置中的harbor/Deploy/docker-compose.yml文件。在這以後,再參考Harbor安裝文檔進行安裝。

打開docker-compose.yml文件,找到‘registry’部分,將如下配置:

volumes:

      - /data/registry:/storage

      - ./config/registry/:/etc/registry/

修改成:

volumes:

      - vsanvol1:/storage

      - ./config/registry/:/etc/registry/

其中,‘vsanvol1’就是咱們剛剛建立的外部卷。

另外,找到‘mysql’部分,相似地,將如下配置:

volumes:

      - /data/database:/var/lib/mysql

修改成:

volumes:

      - vsanvol2:/var/lib/mysql

一樣,‘vsanvol2’是咱們剛剛建立 的另外一個外部卷。

另外,找到‘jobservice’部分,相似地,將如下配置:

volumes:

      - /data/job_logs:/var/log/jobs

      - ./config/jobservice/app.conf:/etc/jobservice/app.conf

修改成:

volumes:

      - vsanvol3:/var/log/jobs

      - ./config/jobservice/app.conf:/etc/jobservice/app.conf

一樣,‘vsanvol3’是咱們剛剛建立 的另外一個外部卷。

 

在文件的最後,加上如下配置:

volumes:

  vsanvol1:

    external: true

  vsanvol2:

external: true

vsanvol3:

    external: true

以指示這三個卷已經在外部(external)建立成功,不須要另行建立。其它配置不變。而後,按照Harbor的安裝教程進行安裝。

 

8. Harbor啓動後,查看vSphere客戶端,發現這三個外部卷都已經掛載到Photon虛擬機上了,做爲‘Hard Disk 2’,‘Hard Disk 3’和‘Hard Disk 4’。在此版本中,彷佛還有一些bug,例如這三個VMDK的存儲策略顯示爲‘None’,可是可看出Hard Disk3的組件在Virtual SAN中是以SW=2的形式被建立的,另外兩個卷在建立的時候是使用了默認的存儲策略,例如Hard Disk 4:

這應該是Virtual SAN在識別」 Docker Volume Driver for vSphere」建立的策略時仍有一些問題,但願後續的版本能夠解決。

 

9. 上傳兩個測試image,以測試數據是否會丟失。 

10. 測試HA:首先,在集羣上將vSphere HA啓用,全部配置選擇默認配置便可。而後確認Photon虛擬機目前在10.162.102.130這一主機上。 

 

11. 關閉這臺主機的電源,等待一段時間等HA重啓虛擬機之後,查看Photon虛擬機的狀態。 

能夠看出,它已經在另一臺健康主機上被重啓了。

原來的三個外部卷也已經被掛載到了重啓後的虛擬機上。由於咱們關閉了一臺主機的電源,因此對於每個VMDK,都顯示有一個丟失的組件(Absent Component),可是VSAN的默認存儲策略可以容忍一個主機的故障,因此數據仍是能正常訪問。 

 

12. 虛擬機重啓後,查看Harbor的狀態,顯示全部的容器都已經自動正常運行。 

查看Harbor管理界面,兩個測試Image均正常,說明沒有數據丟失的狀況發生。 

當vSphere HA在其它主機上重啓Harbor虛擬機之後,Harbor中的全部容器從新啓動,可是所鏈接的外部卷不變,如圖所示:

小結

本文介紹了用分佈式存儲VSAN來實現Harbor Registry高可用性的例子。因爲Harbor就是一個標準的多容器應用,所以,該方法也可以用於其餘容器應用。歡迎文後留言交流。

Harbor項目網址:

https://github.com/vmware/harbor


若是你對Harbor項目感興趣,可申請加入「Harbor開源項目羣」,請先掃描下面二維碼關注「亨利筆記」公衆號,並在公衆號後臺發送"入羣"信息便可。 

相關文章
相關標籤/搜索