Harbor是VMware开发的企业级docker镜像仓库,官方提供了基于docker-compose的方式部署。
花了好些时间将其conpose的编排模版转换成k8s的调度模版方便部署到k8s集群中,项目地址为: https://github.com/huxos/harbor-kubernetes。
部署架构:
这样部署可以通过k8s使得harbor灵活的缩放。
部署ceph-rgw并添加访问ceph的用户
由于我们使用ceph的rgw作为registry的后端,首先参照之前部署ceph的步骤kubernetes集群搭建(2. Ceph)
在kube-system-2 kube-system-4上面部署ceph-rgw
ceph-deploy rgw create kube-system-2 kube-system-4
添加访问rgw的账户:
##创建用户
radosgw-admin user create --uid=registry --display-name="ceph rgw docker registry user"
#registry支持ceph的swift协议,创建swift子账号
radosgw-admin subuser create --uid registry --subuser=registry:swift --access=full --secret=secretkey --key-type=swift
#创建secret key
radosgw-admin key create --subuser=registry:swift --key-type=swift --gen-secret
{
"user_id": "registry",
"display_name": "ceph rgw docker registry user",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [
{
"id": "registry:swift",
"permissions": "full-control"
}
],
"keys": [
{
"user": "registry",
"access_key": "********************",
"secret_key": "****************************************"
}
],
"swift_keys": [
{
"user": "registry:swift",
"secret_key": "e***************************************"
}
],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}
记录好上面的swift_keys里面的secret_key: e***************************************
生成registry 使用的证书
参照前篇kubernetes集群搭建(3. Kube master)生成证书,供给harbor使用。
编辑harbor.json
{
"CN": "harbor",
"hosts": [
"registry.example.com",
"quay.io",
"gcr.io"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"O": "REGISTRY"
}
]
}
使用命令: cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server harbor.json | cfssljson -bare harbor 生成证书。
这里的证书需要签名访问harbor使用的域名,根据实际情况替换掉registry.example.com
创建harbor部署的namespace:
kubectl create ns registry
作为secret导入证书:
kubectl create secret tls harbor --key harbor-key.pem --cert harbor.pem
部署harbor组件
harbor的部署模版以及提交到git仓库中,首先将其clone下来
git clone https://github.com/huxos/harbor-kubernetes.git
部署mysql组件
参照前篇为导入ceph的key到registry中kubernetes集群搭建(2. Ceph)
#导入ceph的key到registry的namespace中
kubectl create secret generic ceph-secret-kube --type="kubernetes.io/rbd" \
--from-literal=key=`ceph --cluster ceph auth get-key client.kube` --namespace=registry
# mysql使用的rbd
kubectl create -f pvc/mysql-data.yaml
# 导入mysql的环境变量
kubectl create -f cm/db-env.yaml
# 部署mysql
kubectl create -f mysql.deploy.yaml
# svc
kubectl create -f svc/mysql.yaml
部署redis
kubectl create -f redis.deploy.yaml
kubectl create -f svc/redis.yaml
部署harbor
首先编辑cm下面的configMap文件、将cm/registry.yaml里面的harbor的访问地址registry.example.com根据实际情况替换掉,配置的ceph rgw的访问地址和密码。
#导入configmap
#adminserver
kubectl create -f cm/adminserver.yaml -f cm/adminserver-env.yaml
#jobservice
kubectl create -f cm/jobservice.yaml -f cm/jobservice-env.yaml
#registry
kubectl create -f cm/registry.yaml
#ui
kubectl create -f cm/ui-env.yaml -f cm/ui.yaml
#nginx
kubectl create -f cm/nginx.yaml
#部署harbor
kubectl create -f harbor.deploy.yaml
配置docker
由于访问reigstry的证书是自签名的需要将ca放到docker的ca目录中
将ca文件复制到 /etc/docker/<registry的访问域名>/ca.crt