VMWare Harbor 在 Kubernetes 上的部署

VMWare 家的 Harbor 是我目前能免费得到的最好的私库管理工具了,除了解决了基础的镜像存储、权限控制这些基础能力之外,还具备 对 DevOps 非常有帮助的镜像同步功能

原本这一产品只提供了基于 Docker Composer 的部署方法,后由社区为其新增了 Kubernetes 的部署支持。本文大部分基于官方文档而来。

部署过程大概分这样几个步骤:

  1. 环境准备
  2. 配置
  3. 运行

环境准备

  • 首先是需要有一个正常运行的 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 集群上运行起来了。接下来就可以按照网上的其他教程,来进行进一步的配置和应用了。