注:本文基于k8s集群v1.16.2版本。
注:如无特殊说明,以下所有操作都是在master节点上执行。
harbor是VMWare出品的一款非常优秀的docker私仓管理工具,它不仅提供了基础的镜像存储、权限控制等功能,还提供了镜像同步等高级功能。
本文将一步步安装harbor,并把踩过的坑记录下来。
添加包含harbor的仓库到Helm中。
helm repo add harbor https://helm.goharbor.io
执行以下命令安装:
helm install --name harbor --namespace harbor --set persistence.enabled=false harbor/harbor
这里有个参数要解释下:
--setpersistence.enabled=false
,表示不使用持久卷PV,上一章我们说个PV代表着磁盘的一个空间,docker仓库的数据需要存储肯定要有个地方,这里把这个选项设置为false表示存储在k8s集群中(可以理解为内存中)。
注,自己玩可以这么设置,用于实际使用切勿这么设置,否则有丢失镜像的风险。
安装完毕,查看服务:
[root@master ~]# kubectl get all -n harbor
NAME READY STATUS RESTARTS AGE
pod/harbor-harbor-chartmuseum-5889bf4658-wcv2j 1/1 Running 0 7m2s
pod/harbor-harbor-clair-5964979ddc-4zqfd 1/1 Running 1 7m2s
pod/harbor-harbor-core-66bb8b565-nh5qv 1/1 Running 0 7m2s
pod/harbor-harbor-database-0 1/1 Running 0 7m2s
pod/harbor-harbor-jobservice-778454b56-7qjzl 1/1 Running 0 7m2s
pod/harbor-harbor-notary-server-79dff589-488k4 1/1 Running 1 7m2s
pod/harbor-harbor-notary-signer-6bdd9fc8d5-x4nwp 1/1 Running 0 7m2s
pod/harbor-harbor-portal-5c76b77c9-qpx2z 1/1 Running 0 7m2s
pod/harbor-harbor-redis-0 1/1 Running 0 7m2s
pod/harbor-harbor-registry-6cb94856df-tw8gs 2/2 Running 0 7m2s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/harbor-harbor-chartmuseum ClusterIP 10.96.114.188 <none> 80/TCP 7m2s
service/harbor-harbor-clair ClusterIP 10.96.132.67 <none> 6060/TCP,6061/TCP 7m2s
service/harbor-harbor-core ClusterIP 10.96.245.230 <none> 80/TCP 7m2s
service/harbor-harbor-database ClusterIP 10.96.249.113 <none> 5432/TCP 7m2s
service/harbor-harbor-jobservice ClusterIP 10.96.176.88 <none> 80/TCP 7m2s
service/harbor-harbor-notary-server ClusterIP 10.96.142.122 <none> 4443/TCP 7m2s
service/harbor-harbor-notary-signer ClusterIP 10.96.46.9 <none> 7899/TCP 7m2s
service/harbor-harbor-portal ClusterIP 10.96.128.245 <none> 80/TCP 7m2s
service/harbor-harbor-redis ClusterIP 10.96.47.245 <none> 6379/TCP 7m2s
service/harbor-harbor-registry ClusterIP 10.96.91.84 <none> 5000/TCP,8080/TCP 7m2s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/harbor-harbor-chartmuseum 1/1 1 1 7m2s
deployment.apps/harbor-harbor-clair 1/1 1 1 7m2s
deployment.apps/harbor-harbor-core 1/1 1 1 7m2s
deployment.apps/harbor-harbor-jobservice 1/1 1 1 7m2s
deployment.apps/harbor-harbor-notary-server 1/1 1 1 7m2s
deployment.apps/harbor-harbor-notary-signer 1/1 1 1 7m2s
deployment.apps/harbor-harbor-portal 1/1 1 1 7m2s
deployment.apps/harbor-harbor-registry 1/1 1 1 7m2s
NAME DESIRED CURRENT READY AGE
replicaset.apps/harbor-harbor-chartmuseum-5889bf4658 1 1 1 7m2s
replicaset.apps/harbor-harbor-clair-5964979ddc 1 1 1 7m2s
replicaset.apps/harbor-harbor-core-66bb8b565 1 1 1 7m2s
replicaset.apps/harbor-harbor-jobservice-778454b56 1 1 1 7m2s
replicaset.apps/harbor-harbor-notary-server-79dff589 1 1 1 7m2s
replicaset.apps/harbor-harbor-notary-signer-6bdd9fc8d5 1 1 1 7m2s
replicaset.apps/harbor-harbor-portal-5c76b77c9 1 1 1 7m2s
replicaset.apps/harbor-harbor-registry-6cb94856df 1 1 1 7m2s
NAME READY AGE
statefulset.apps/harbor-harbor-database 1/1 7m2s
statefulset.apps/harbor-harbor-redis 1/1 7m2s
可以看到各组件运行正常,说明安装成功了。
但是,怎么访问呢?
之前安装完mysql我们使用的是NodePort方式直接暴露一个端口出去访问的。
但是,这里有个坑,harbor默认使用的是Ingress方式暴露给外网访问,使用NodePort方式怎么都无法安装成功,且使用默认安装成功后把portal的service改成NodePort后,虽然可以访问但会无限报“用户名密码错误”。
所以,这里我们只能使用Ingress方式访问,Ingress方式需要有一个域名关联到集群的worker节点(域名可以在hosts中配置)。
查看默认安装的Ingress。
[root@master ~]# kubectl get ingress -n harbor
NAME HOSTS ADDRESS PORTS AGE
harbor-harbor-ingress core.harbor.domain,notary.harbor.domain 80, 443 20m
[root@master ~]# kubectl edit ingress harbor-harbor-ingress -n harbor
# 省略...
spec:
rules:
- host: core.harbor.domain
http:
paths:
- backend:
serviceName: harbor-harbor-portal
servicePort: 80
path: /
# 省略...
可以看到这里配置的域名是 core.harbor.domain
,在hosts中添加这个域名指向任意一个worker节点(当然,你如果有自己的域名,也可以把这里的配置改为你自己的域名,这样要省很多事)。
# 任意worker节点的ip
xx.xx.xx.xx core.harbor.domain
注,这里会埋个大坑,使用hosts中配置的域名,后面所有的需要连harbor的地方都需要配置这个域名。
访问harbor,浏览器中输入https://core.harbor.domain,出现以下画面,说明安装正常。
默认用户名/密码为:admin/Harbor12345
这里能登录成功才能说明安装成功了,使用NodePort方式虽然也能访问登录界面,但是登录会一直报“用户名或密码错误”,这一点要注意一下。
这里我们新建一个项目 test
,留做后面使用。
本章我们在k8s集群中安装了docker私仓的管理工具harbor,可以使用它来管理自己的镜像。
官方文档:https://github.com/goharbor/harbor-helm
本文在官方文档的基础上补充了一些异常的处理。