VMWare 家的 Harbor 是我目前能免费得到的最好的私库管理工具了,除了解决了基础的镜像存储、权限控制这些基础能力之外,还具备 对 DevOps 非常有帮助的镜像同步功能。
原本这一产品只提供了基于 Docker Composer 的部署方法,后由社区为其新增了 Kubernetes 的部署支持。本文大部分基于官方文档而来。
部署过程大概分这样几个步骤:
环境准备
- 首先是需要有一个正常运行的 Kubernetes 环境,需要提供对持久卷和 Config Map 的支持,没记错的话应该是 1.2。
- 下文需要执行的脚本需要 Python 2.6 的支持。
镜像获取和上传
在https://github.com/vmware/harbor/releases
可以找到离线版本的二进制文件包。
目前的版本是harbor-offline-installer-0.5.0.tgz
,解压之后其中包含一个harbor.0.5.0.tgz
的镜像包,使用docker load -i harbor.0.5.0.tgz
命令装入后,再用docker images
列表查看,会看到以下几个镜像:
- vmware/harbor-log:0.5.0:Harbor 日志服务
- vmware/harbor-jobservice:0.5.0:Harbor 核心
- vmware/harbor-ui:0.5.0:Harbor 界面
- vmware/harbor-db:0.5.0:数据库,其实是个 MySQL,附带了初始化脚本。
另外还需要获取 Registry 2.x 和 Nginx 的镜像。
接下来就需要把这几个镜像进行tag/push
操作,推送到 Kubernetes 的私库。
git clone https://github.com/vmware/harbor.git
获得源码,其中的make
文件夹包含我们需要的 Kubernetes Yaml 文件和相关的支持文件。
生成配置文件
实际上这一过程之前首先要编辑
make
目录下的harbor.cfg
文件,来完成一些个性配置。
进入源码的make/kubernetes
目录,python prepare
运行脚本之后,利用git status
命令可以看到,生成了几个新的*.cm.*
文件,其中包含了各个组件的 Config Map 内容。
配置
持久卷(PV)
这里利用持久卷 (pv/pvc) 的方式来配置各个组件的存储。
根据集群的存储环境(例如 ceph/glusterfs 等)和容量需求,对每个文件分别进行持久卷类型和容量的修改。
修改完毕之后,利用kubectl apply -f pv
命令创建这些 PV 和 PVC 对象。
数据库(MySQL)
- rc 文件:修改 image 行,把镜像指向之前的 harbor-db 在私库中的地址。
- svc 文件:一般无需修改,为调试方便,可以更改服务类型暴露 MySQL 端口。
- cm 文件:MySQL 的 root 密码。
存盘,运行。
私库(Registry)
- rc 文件:只需要修改镜像地址。
- cm 文件:这里可以根据实际需要,对涉及到的证书等进行修改。
- svc 文件:因为 Habor 将代替 Registry 提供服务,因此无需暴露 Registry 端口。
存盘,运行。
Jobeservice
- rc 文件:镜像地址。
- cm 文件:这里有一些核心配置,例如 MySQL 连接信息,私库地址等,只是玩玩的话可以不用修改。
存盘,运行。
UI
- rc 文件:镜像地址。
- cm 文件:此处的配置主要是 LDAP、MySQL 和认证方面的修改。如果之前修改过数据库密码,或者有自己的证书,都可以在这里进行修改。
存盘运行。
Nginx
负责反向代理 UI 组件。
- rc 文件:指向我们 PUSH 到私库的 Nginx 地址。
- cm 文件:此处需要注意,这里并没有提供证书内容,因此有两个选择:
- 禁用 https 访问
- 或者自行提供证书。
- svc 文件:根据实际需要设置
运行。
尾声
至此,Harbor 就在 Kubernetes 集群上运行起来了。接下来就可以按照网上的其他教程,来进行进一步的配置和应用了。