K8s/K3s集群 通过Helm Chart部署Harbor仓库: 镜像管理简单靠谱
Harbor主流部署方式:
1、安装docker、docker-compose,下载offline install包进行安装;
2、通过Helm Chart部署Harbor到k3s或k8s集群;--- <注:纯云原生,偏好选这种^^>
Harbor 简介
Harbor是由VMware公司开源的一个企业级Docker Registry项目。它扩展了Docker Distribution的功能,增加了安全、标识和管理等特性,以满足企业用户的需求。Harbor提供基于角色的访问控制、镜像资源复制、高级安全特性等功能,方便用户迅速搭建和管理企业级的Docker镜像仓库。它支持多个节点间的镜像复制,确保数据在公司内部网络中安全管控,并提供了图形化用户界面,方便用户操作和管理。
架构及组件
Harbor的主要组件包括:
Proxy(代理):这是一个Nginx前端代理,主要负责分发前端页面UI的访问流量以及镜像的上传和下载流量。它在图中通过深蓝色线标志,起到了流量管理和负载均衡的作用。
UI(用户界面):UI组件为用户提供了一个web管理页面,包括前端页面和后端API,使得用户可以方便地对Harbor进行管理。底层则使用MySQL数据库来存储用户数据。
Registry(镜像仓库):Registry是Harbor的核心组件,负责存储Docker镜像文件。当镜像上传完成后,它会通过hook机制通知UI组件创建repository。同时,Registry的token认证也是通过UI组件来完成的。在图中,与Registry相关的交互通过红色线标志。
AdminServer(配置管理中心):AdminServer是Harbor的配置管理中心,除了管理配置外,还负责检查存储用量。UI和JobService在启动时都需要加载AdminServer的配置。在图中,与AdminServer相关的交互通过灰色线标志。
JobService(作业服务):JobService负责镜像复制工作。它会与Registry通信,从一个Registry拉取镜像,然后推送到另一个Registry,并记录job_log。在图中,与JobService相关的交互通过紫色线标志。
Log(日志组件):Log组件通过Docker的log-driver来汇总和管理Harbor各组件的日志,使得用户可以方便地查看和分析系统的运行情况。在图中,与Log组件相关的交互通过蓝色线标志。
这些组件协同工作,使得Harbor能够为企业用户提供稳定、安全、高效的Docker镜像管理服务。
环境准备:
基础环境: K3s
软件依赖: Helm3 & Git
存储依赖: NFS
一、helm配置:
helm repo add harbor https://helm.goharbor.io
helm repo update
helm pull harbor/harbor
tar xf harbor-x.x.x.tgz
二、配置 PV & PVC:
云原生之存储百态,NFS与Ceph等皆为良选。本文特选NFS存储类,以探索服务访问之新境。
1、配置NFS是RHCE基础能力,不再赘述。
2、pvc,pv的yaml文件,自定义写好即可。
$kubectl apply -f harbor-pvc.yaml # 创建 pvc
$kubectl apply -f harbor-pv.yaml # 创建 pv
$ kubectl get pvc/pv -A | grep harbor # 查看 pvc/pv
三、配置 values.yaml & 安装harbor
1、values.yaml文件,自定义写好即可。
# 主要自定义修改如下:
a、certSource: auto ---> 要改!
b、core: core.harbor.domain---> 要改!
c、externalURL: https://core.harbor.domain---> 要改!
d、storageClass /jobservice / database / redis / trivy ---> 要改!
e、 harborAdminPassword: "Harbor12345"---> 要改!
2、harbor安装:
$ helm install harbor harbor/harbor --namespace harbor --values harbor/values.yaml # 安装
$ kubectl get deployments,pods,services,ingress -n harbor # 查看
$helm upgrade harbor harbor/harbor --install --namespace harbor --values values.yaml # 更新
$helm delete harbor --namespace harbor # 删除
2、Ingress 配置:
⚠️注:部署Harbor后,需权衡Ingress-nginx与Traefik之服务访问控制。鉴于我之K3s集群采用Traefik为负载均衡器,故配置应随之调整。
$ kubectl get ingress -n harbor harbor-ingress -oyaml > harbor-core-ingress.yaml
$ kubectl get ingress -n harborharbor-ingress-notary -oyaml > harbor-notary-ingress.yaml
# 编辑 ingress 的负载映射, 然后发布……(略)
⚠️注:部署Harbor后,关键在于选择Ingress控制器。对于K3s集群中的Traefik负载均衡器,配置时应注重删除冗余信息,确保控制器字段准确无冲突。
$ kubectl apply -f harbor-core-ingress.yaml
$ kubectl apply -f harbor-notary-ingress.yaml
四、harbor使用:
1、绑定hosts访问:
总结:
探索之路无尽头,详细用法尚待深挖;且行且思,不断总结,以悟云原生之真谛。