解密 360 容器云平台的 Harbor 高可用方案
Harbor是一个企业级开源镜像仓库,能够对云原生制品的内容进行存储、签名和扫描,用户对Harbor的接受度也证明了VMware在云原生开源领域的影响力。Harbor也逐渐从国内发展到国外,获得了全球云原生社区的一致认可。
360搜索事业群从2017年开始着手已有业务的容器化工作,并以Kubernetes为基石,进行私有容器云平台的研发工作。360搜索容器云团队通过调研和对比,并结合团队人力等实际情况,最终决定采用Harbor。
360搜索容器云平台早期采用了社区 docker-compose 的方案,在单台机器上部署Harbor实例。但随着在生产环境下投入使用,使用docker-compose部署Harbor服务也面临新的问题。
中心化单实例,没有高可用。
Harbor数据被存储在MySQL的容器中,可靠性无法保证。
业务镜像数据被存储在单机硬盘中,有数据丢失的风险。
生产环境在不同的城市区域有多个业务机房,存在跨机房镜像拉取的请求。
在多方调研和考量后,360搜索容器云团队决定全面转向使用Kubernetes部署,为了能够在Kubernetes上部署Harbor v1.3.0,对各个组件进行分析,制定了如下部署方案。
(1)在MySQL中存储着Harbor的项目、仓库、用户信息等数据,MySQL服务不再自行维护容器实例,改用公司内的第三方团队运维和支撑MySQL高可用集群提供服务。
(2)Log组件负责搜集、汇聚其他Harbor组件输出的日志数据,采用Kubernetes部署后不再需要部署Log组件,Harbor实例各个组件的日志被统一打印输出到标准输出设备,经由Kubernetes在各个工作节点上的Filebeat采集、汇聚并输出到Kafka集群缓存48小时,并按需处理。
(3)Registry本身为无状态组件,负责镜像存储,使用Kubernetes的Deployment部署,需要额外的持久化存储设施来存储镜像的Blob数据。Registry由多种持久化存储驱动,并最终选定S3对象存储作为存储方案。使用S3对象存储的优势在于,通过修改Registry配置Redirect选项,把Docker Client的Blob下载请求重定向到拥有更多带宽和吞吐量的S3高可用集群,能够加快容器镜像分发速度,并加快业务容器的拉起速度。
(4)AdminServer组件用于为Harbor的其他组件提供配置访问服务,主要通过读取配置文件“/etc/adminserver/config/config.json”和环境变量获取配置。它使用Kubernetes ConfigMap存储AdminServer组件的配置文件、环境变量,该组件使用Deployment部署多个实例副本实现高可用。
(5)UI组件提供了Web管理界面,依赖MySQL,使用Deployment部署多个实例副本实现高可用。
(6)JobService组件执行Replication Job,依赖MySQL,使用Deployment部署多个实例副本实现高可用。
(7)Proxy组件实际上是Nginx,它作为UI、Registry的统一入口,加载证书并启用TLS加密,同样使用Deployment部署多个实例副本实现高可用。
为了实现异地多机房,降低单个Harbor集群的服务请求压力,在单个城市使用上述方案实现可用区的高可用后,可使用同样的方案在多个城市不同的可用区部署高可用实例。各个可用区的Harbor集群使用相同的Registry域名,利用组织内部的智能DNS服务QDNS,实现认证鉴权和镜像拉取指向本可用区或本城市的Harbor集群。同时,配置QDNS健康检查,在当前可用区的Harbor集群出现故障不能正常服务时,自动切换Registry域名解析记录,使其指向其他Harbor集群,如图12-30所示。
在异地多机房部署Harbor集群时,如果采用就近处理认证、鉴权和拉取镜像的方案,就会存在用户数据和镜像数据同步的问题,可采用以下方法解决。
Harbor集群分为主集群和从集群,主集群可读写,从集群只读;为Harbor UI配置单独的域名,Registry域名在办公、开发网络中被解析到主集群。
MySQL使用主从实例,Harbor主集群使用可写MySQL实例,其他地域的从集群使用只读MySQL实例,用户、项目等信息利用MySQL集群自行同步。
为每个项目都配置Replication规则,当用户推送镜像到Harbor主集群时自动触发同步。
360搜索容器云团队在实践中发现了Harbor的远程复制功能同步速度有限的问题,有时推送镜像之后其他机房无法拉取镜像。为了加速镜像数据同步,该团队使用MinIO MC客户端在存储层面优先同步Blob数据,命令如下:
MC客户端的mirror子命令用于在不同的s3集群之间同步对象,“--watch”参数监听对象的变动并自动同步,“--exclude”参数排除不需要同步的对象和目录。
360搜索容器云团队密切关注和参与Harbor社区,从Harbor1.3版本一直升级至1.5版本,并根据内部需求对Tag接口、用户登录做了定制,添加了镜像构建历史等功能,还将其回馈Harbor社区。
本文节选自《Harbor权威指南:容器镜像、Helm Chart等云原生制品的管理与实践》一书
张海宁 等 著
电子工业出版社出版
业界首部云原生制品仓库Harbor巨著,数十位业界专家力荐,Harbor项目维护者及贡献者倾力打造。
版权声明: 本文为 InfoQ 作者【博文视点Broadview】的原创文章。
原文链接:【http://xie.infoq.cn/article/e800dab85104da9ab7a223d7f】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论