第六篇 kubernetes helm部署harbor镜像仓库
1.harbor镜像仓库简介
Harbor 是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、
镜像验真、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。
2.harbor 组件简介
从安装组件我们可以看出harbor主要依靠以下几个组件:
Nginx(Proxy):用于代理Harbor的registry,UI, token等服务
db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权
jobsevice:负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log
Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
Registry:原生的docker镜像仓库,负责存储镜像文件。
Log:为了帮助监控Harbor运行,负责收集其他组件的log,记录到syslog中
harbor的优势
1.基于角色控制:用户与Docker镜像仓库通过"项目"进行组织管理,一个用户可以对多个镜像仓库在统一命名空间(projec)里有不同的权限
2.图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间
3.审计管理:所有这怒地镜像仓库的错都可以被记录追溯,用于审计管理
4.基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制。
5.支持LDAP认证:Harbor的用户授权可以使用已经存在的用户。
6.镜像删除和垃圾回收:image可以被删除并且回收image占用的空间。
7.简单的部署功能:harbor提供了online、offline安装,此外还提供了virtualappliance安装
8.harbor和docker registry的关系:harbor实质上是对docker registry做了封装,扩展了自己的业务模板。
3.在k8s中使用helm 部署harbor
(1)从github拉取harbor-helm
#cd /root
#yum install -y git
#git clone https://github.com/goharbor/harbor-helm
#cd harbor-helm/
(2)修改相关配置
#在harbor-helm文件夹里面,可以看到Chart.yml 及 values.yaml 等helm 部署相关的文件,vi 编辑一下value.yaml,根据实际情况修改配置:
ingress:
hosts:
core: harbor.k8s.com #修改ingress里面的域名
notary: notary.k8s.com
……
externalURL: https://harbor.k8s.com #修改访问的URL
……
#这部分可以看到,这里需要6个pvc,也就是说需要手动创建6个pv,官方默认为3个5G,3个1G,可根据需要修改size,这里由于是实验环境,所以不作改动
persistentVolumeClaim:
registry:
existingClaim: ""
storageClass: ""
subPath: ""
accessMode: ReadWriteOnce
size: 5Gi
chartmuseum:
existingClaim: ""
storageClass: ""
subPath: ""
accessMode: ReadWriteOnce
size: 5Gi
jobservice:
existingClaim: ""
storageClass: ""
subPath: ""
accessMode: ReadWriteOnce
size: 1Gi
database:
existingClaim: ""
storageClass: ""
subPath: ""
accessMode: ReadWriteOnce
size: 1Gi
redis:
existingClaim: ""
storageClass: ""
subPath: ""
accessMode: ReadWriteOnce
size: 1Gi
……
harborAdminPassword: "Harbor12345" #默认管理员密码为Harbor12345,可在这里进行修改,建议不要修改
(3)创建需要的5个pv
为简化实验,本实验环境使用local-storage作为持久化存储,使用k8s3机器的 /data/harbor 目录作为本地持久化存储。
在k8s3上面创建五个文件夹:
#mkdir /data/harbor/{data01,data02,data03,data04,data05}
提升文件夹权限
#chmod -R 777 /data/harbor/
在master上面编写6个pv的yaml文件,并创建pv(我只贴出了一个pv.yaml ,剩下的可仿照创建)
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/bound-by-controller: "yes"
finalizers:
- kubernetes.io/pv-protection
name: harbor-data01
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
hostPath:
path: /data/harbor/data01
type: ""
persistentVolumeReclaimPolicy: Delete
volumeMode: Filesystem
status:
#kubectl create -f pv.yaml
#kubectl get pv
可以看到5个pv已经准备就绪
(4) 使用helm部署harbor
#kubectl create ns harbor
#cd /root/harbor-helm
#helm dependency update
#helm install . --debug -n harbor --namespace harbor
参数说明:
--debug 部署过程中开启debug模式
-n 定义helm release的名字
--namespace 指定使用哪个namespace部署
分别查看helm、pvc、deployment、pod、service、ingress 等是否正常(其中部分pod有可能会失败,但会自动重建,直到最后全部pod都会处理Running状态)
(5)使用浏览器访问
在master节点,node节点和访问主机的hosts 文件中添加映射
192.168.25.65 master.k8s.com harbor.k8s.com notary.k8s.com
浏览器访问地址: https://harbor.k8s.com/
输入用户名: admin 密码 Harbor12345(这是默认密码)
注意:我登录时候遇到一个问题是,使用http://harbor.k8s.com 登录会报用户名或密码错误。所以这里建议使用https
(6) docker客户端 访问
#在Docker Client 的启动文件里面加入 --insecure-registry 参数,强制信任这个镜像仓库。
[root@master ~]# cat /etc/docker/daemon.json
{
"live-restore": true,
"insecure-registries" : ["harbor.k8s.com"],
"registry-mirrors": ["https://q2hy3fzi.mirror.aliyuncs.com"]
}
[root@master ~]#
#重启 docker 及 daemon
#systemctl daemon-reload && systemctl restart docker
#docker login harbor.k8s.com
到此harbor 的部署就完成了,更多的使用才能发现上面的新功能!
官网地址: https://harbor.com/
github地址: https://github.com/goharbor/harbor