这篇文章给大家介绍用分布式存储VSAN实现Harbor Registry的高可用方案是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
不久前,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)”等,以获得更高级别的数据保护和更好的性能。
原理详解
本文所描述的架构如下图,包含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版本,文件名分别为:
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">
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的高可用方案是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。