【开源摘星计划】Harbor进阶:使用Harbor存储chart_容器

本文已参与「开源摘星计划」,欢迎正在阅读的你加入。

活动链接: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.yml
chart:
# 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

【开源摘星计划】Harbor进阶:使用Harbor存储chart_运维_02


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)

【开源摘星计划】Harbor进阶:使用Harbor存储chart_容器_03


1.6 验证

登录Harbor UI管理界面:

【项目】>【library】> 【Helm Charts】

![image-20220531165826947](H:\【2】云原生技术栈\【2】镜像与Harbor镜像仓库\【6】Harbor博客专栏撰写\第4篇、Harbor进阶实战篇\image-20220531165826947.png)


二、上传Chart到Harbor

将制作好的chart包上传到harbor的项目中

【开源摘星计划】Harbor进阶:使用Harbor存储chart_镜像_04

                  【开源摘星计划】Harbor进阶:使用Harbor存储chart_镜像_05

【开源摘星计划】Harbor进阶:使用Harbor存储chart_镜像_06

然后点击【上传】

【开源摘星计划】Harbor进阶:使用Harbor存储chart_云原生_07

【开源摘星计划】Harbor进阶:使用Harbor存储chart_运维_08


三、查看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

表示添加成功!

【开源摘星计划】Harbor进阶:使用Harbor存储chart_运维_09


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

【开源摘星计划】Harbor进阶:使用Harbor存储chart_镜像_10