如何构建一个一劳永逸的高可用Harbor容器镜像仓库(1)

/ cncf / 没有评论 / 220浏览

背景

Harbor作为容器化工程的制品库,在服务器数量上来之后,磁盘的膨胀速度是惊人的,单节点有些吃力,扩容就意味着停服。

Harbor最需要考虑的是网络问题和存储问题。

我们需要一个不那么频繁扩容且读写性能好点的磁盘。

现在的并发pull操作可能是所有k8s节点,数据库Postgres和Redis不能再使用默认的Harbor配置,默认是全部采用容器的形式提供服务,数据库没有持久化,且是单台机器提供服务,没有负载均衡。

上个图吧

alt

Harbor简介

官网

组件功能简单介绍

harbor-adminserver 配置管理中心

harbor-db Postgres数据库

harbor-jobservice 负责镜像复制

harbor-log 记录操作日志

harbor-ui Web管理页面和API

nginx 前端代理,负责前端页面和镜像上传/下载转发

redis 会话

registry 镜像存储

方案

升级Harbor的版本到1.8.0,增加gc垃圾回收,增加镜像扫描功能。

数据库拆分

APP层:jobservice|portal|core|registryctl|harbor-log

DB层:redis|Postgres

harbor服务端只运行app层的容器,DB层的PG和Redis拆出来,导出数据到aws的数据库服务,现在已经配好,并且使用正常。拆分的原因是,数据库跑在容器,没有持久化,会是之后的隐患。

存储

目前考虑的是NFS文件系统和Juicefs,但是NFS的话,需要考虑单点问题。

新旧站点转换

新的harbor服务器已经准备好,可以从旧的harbor站点复制到新的harbor站点

主备

可能的话,再添加一台从机

镜像存储

Registry默认是在/data/registry目录下,随着业务的增加,此目录的膨胀速度很快,这里采用的方案是juiceFS文件系统

当前存储目录是 /jfs/data,容量最多到10P

新的架构图

image-20190917150215182


github上关于原子写入问题的讨论传送门

下一篇 环境安装篇