第六篇 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

posted @ 2020-12-17 17:45  南风不知我意  阅读(2942)  评论(2编辑  收藏  举报