本文已参与「开源摘星计划」,欢迎正在阅读的你加入。
活动链接:https://github.com/weopenprojects/WeOpen-Star
【摘要】 在Harbor私有镜像仓库中启用ChartMusum插件,实现在Harbor中存储Chart。操作步骤详细,可评论区留言获取PDF文档。
Harbor在v1.6版本开始支持Helm Chart仓库功能,这样就可以利用 harbor 同时管理镜像和 helm charts 了,无需另外部署一套Helm Chart系统。在harbor中,chart仓库由chartmuseum以插件的方式提供,可以自己选择安装或者不安装。
ChartMuseum:提供了API管理非OCI规范的Helm Chart。在安装了ChartMuseum组件后,当用户使用“helm”命令向Harbor推送或拉取Chart时,Harbor的Core组件会首先收到请求,在校验后将请求转发给ChartMuseum进行Chart文件的读写。随着兼容OCI规范的Helm Chart在社区上被更广泛地接受,Helm Chart能以Artifact的形式在Harbor中存储和管理,不再依赖ChartMuseum,因此Harbor可能会在后续版本中移除对ChartMuseum的支持。
由于Helm 3支持OCI仓库服务的功能还处于实验阶段,所以大多数用户还在使用ChartMuseum仓库服务。Harbor 2.0在设计时保留了基于ChartMuseum的仓库服务,这样不仅支持老版本的Harbor平滑升级到Harbor 2.0,还给用户留了缓冲时间,将Chart从ChartMuseum转移到OCI仓库服务。
Harbor的ChartMuseum服务提供了图形管理界面来管理Chart,进入一个Harbor项目,单击“Helm Charts”页面,可以查看Chart列表及每个Chart的名称、状态、版本数量、创建时间。可以单击“下载”按钮拉取Chart到本地,也可以单击“删除”按钮删除选中的Chart,
一、安装ChartMuseum插件
在harbor服务器中进行操作。如果你在安装harbor时已经安装chartmuseum插件可以忽略该操作步骤!
1.1 修改Harbor配置文件
在harbor.yml配置文件中配置chartmuseum的相关参数。
使用ChartMuseum组件时,客户端获取到的Chart的index.yaml中包含的URL是否为绝对路径。在不配置该项时,ChartMuseum组件会返回相对路径,默认为disabled。
$ ;;;;vim harbor.ymlchart:
# Change the value of absolute_url to enabled can enable absolute url in chart
absolute_url: enabled
enabled表示使用绝对路径!
1.2 停止Harbor服务
$ ;;;;docker-compose stop输出结果:
Stopping nginx ... done
Stopping harbor-jobservice ... done
Stopping harbor-core ... done
Stopping registryctl ... done
Stopping harbor-portal ... done
Stopping harbor-db ... done
Stopping redis ... done
Stopping registry ... done
Stopping harbor-log ... done
1.3 注入配置
[root@lidabai harbor]# ./prepare
1.4 安装chartmuseum
在执行install.sh安装脚本时,通过--with-chartmuseum参数安装chart插件。
[root@lidabai harbor]# ./install.sh --with-notary --with-trivy --with-chartmuseum
输出结果:
✔ ----Harbor has been installed and started successfully.---- #输出该信息则表示安装成功
安装完后会自动启动Harbor!
1.5 查看组件服务状态
[root@lidabai harbor]# docker-compose ps
输出结果:
NAME COMMAND SERVICE STATUS PORTS
chartmuseum "./docker-entrypoint…" chartmuseum running (healthy)
harbor-core "/harbor/entrypoint.…" core running (healthy)
harbor-db "/docker-entrypoint.…" postgresql running (healthy)
harbor-exporter "/harbor/entrypoint.…" exporter running
harbor-jobservice "/harbor/entrypoint.…" jobservice running (healthy)
harbor-log "/bin/sh -c /usr/loc…" log running (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal "nginx -g 'daemon of…" portal running (healthy)
nginx "nginx -g 'daemon of…" proxy running (healthy) 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp, 0.0.0.0:9090->9090/tcp
notary-server "/bin/sh -c 'migrate…" notary-server running
notary-signer "/bin/sh -c 'migrate…" notary-signer running
redis "redis-server /etc/r…" redis running (healthy)
registry "/home/harbor/entryp…" registry running (healthy)
registryctl "/home/harbor/start.…" registryctl running (healthy)
trivy-adapter "/home/scanner/entry…" trivy-adapter running (healthy)
1.6 验证
登录Harbor UI管理界面:
【项目】>【library】> 【Helm Charts】
![image-20220531165826947](H:\【2】云原生技术栈\【2】镜像与Harbor镜像仓库\【6】Harbor博客专栏撰写\第4篇、Harbor进阶实战篇\image-20220531165826947.png)
二、上传Chart到Harbor
将制作好的chart包上传到harbor的项目中
然后点击【上传】
三、查看chart概要
在Harbor UI点击chart名称即可查看该chart的概要信息。包括chart介绍、安装、卸载、配置等。
四、添加Harbor作为Chart仓库
添加的命令格式:
helm repo add --ca-file <ca file> --cert-file <cert file> --key-file <key file> \
--username <username> --password <password> <repo name> https://192.168.2.22/chartrepo/lidabai
参数说明:
--ca-file:为harbor颁发证书的颁发者证书;
--key-file: Harbor的私钥;
--cert-file:指定harbor的证书;
--username:用户名,该用户应该具体chart所在项目的权限;
--password:指定用户名密码;
https://192.168.2.22/chartrepo/lidabai为chart连接地址,chartrepo固定格式,lidabai为chart所在项目的名称。
4.1 拷贝harbor相关证书
将harbor相关的证书拷贝到Helm所在服务器(一般是kubernetes集群中的master节点)。
[root@master Chart]# scp 192.168.2.22:/app/harbor-cert/ca.pem ./
[root@master Chart]# scp 192.168.2.22:/app/harbor-cert/harbor.pem ./
[root@master Chart]# scp 192.168.2.22:/app/harbor-cert/harbor-key.pem ./
4.2 添加harbor的chart到本地
[root@master Chart]# helm repo add my-harbor https://192.168.2.22/chartrepo/lidabai \
--username admin --password Harbor12345 \
--ca-file ca.pem --cert-file harbor.pem --key-file harbor-key.pem
输出结果:
"my-harbor" has been added to your repositories
表示添加成功!
4.3 查看验证
[root@master Chart]# helm repo list
NAME URL
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
my-harbor https://192.168.2.22/chartrepo/lidabai #这是我添加的chart仓库
五、安装Chart
安装命令:
$ ;;;;helm install <name>--ca-file <ca file> --cert-file <cert file> --key-file <key file> \;--username=<username> ;--password=<password> --version 2.0.1 <repo name>/memcached
5.1 搜索chart
从我们添加的harbor chart中搜索有哪些chart包。
[root@master Chart]# helm search repo my-harbor
NAME CHART VERSION APP VERSION DESCRIPTION
my-harbor/memcached 2.0.1 Free & open source, high-performance, distribut...
5.2 安装chart
[root@master Chart]# helm install memcached-test --ca-file ca.pem --cert-file harbor.pem --key-file harbor-key.pem \
;--username=admin ;--password=Harbor12345 --version 2.0.1 my-harbor/memcached
Error: INSTALLATION FAILED: unable to build kubernetes objects from release manifest: unable to recognize "": no matches for kind "StatefulSet" in version "apps/v1beta1"
这里演示的memcached有问题,可自行用其它没问题的chart进行测试!
比较常用安装chart的方法是将chart pull下来,解压修改后再进行安装。
[root@master Chart]# helm pull my-harbor/memcached
[root@master Chart]# ls
ca.pem harbor-key.pem harbor.pem memcached-2.0.1.tgz