6

Helm基于Harbor中存储的chart快速发布服务

 1 year ago
source link: https://www.51cto.com/article/751264.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Helm基于Harbor中存储的chart快速发布服务

作者:键客李大白 2023-04-06 10:08:58
ChartMuseum:提供了API管理非OCI规范的Helm Chart。在安装了ChartMuseum组件后,当用户使用“helm”命令向Harbor推送或拉取Chart时,Harbor的Core组件会首先收到请求,在校验后将请求转发给ChartMuseum进行Chart文件的读写。

  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的支持。

  虽然被废弃,但是并不意味着不能用Harbor存储chart了,而是用 OCI chart替代。

  • 从v2.6.0 开始弃用Chartmuseum,并在v2.8.0中开始删除。更多详情,请参阅讨论:https://github.com/goharbor/harbor/discussions/15057 从 v2.6.0 开始弃用 Notary(签名者和服务器),并在 v2.8.0 中开始删除。更多详情,请参阅讨论:https://github.com/goharbor/harbor/discussions/16612
  • Harbor版本必须是1.6+到2.8.0才支持存储Helm Chart(我这用的是2.6.2);
  • 默认新版harbor不会启用chart repository service,需要在安装harbor时指定--with-chartmuseum参数;
  • 创建项目chartrepo(公有项目);

Harbor版本: 2.6.2Harbor地址:​https://192.168.2.30:443​部署路径: /app/harbor证书位置:/app/harbor/ssl/

安装Chartmuseum组件

2.1 修改配置文件

  在absolute_url​参使用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表示使用绝对路径!

2.2 停止Harbor

$ docker-compose stop
图片

2.3 注入配置

  执行./prepare将新的配置注入到各个组件中。

$  ./prepare

2.4 安装chartmuseum

  在执行install.sh安装时,通过--with-chartmuseum参数安装chart插件,安装完后会自动启动Harbor。

$ ./install.sh  --with-notary --with-trivy --with-chartmuseum
✔ ----Harbor has been installed and started successfully.----  #输出该信息则表示安装成功

2.5 查看组件服务状态

  通过docker-compose ps命令可以看到harbor的组件中多了个chartmuseum的容器。

$ docker-compose ps
图片

2.6 验证是否安装了chartmuseum组件

登录Harbor UI管理界面:【项目】==>【library】==> 【Helm Charts】

图片

安装helm-push插件

通过Harbor UI界面可以将制作好的chart包直接上传到Harbor,但是命令行上传、下载Chart则需要安装helmpush插件。

通常在kubernetes的master节点进行操作,前提是已经安装好helm。

3.1 在线直接安装

$ helm plugin install https://github.com/chartmuseum/helm-push
Downloading and installing helm-push v0.9.0 ...
https://github.com/chartmuseum/helmpush/releases/download/v0.9.0/helmpush_0.9.0_linux_amd64.tar.gz
Installed plugin: push
$ helm plugin list
NAME    VERSION DESCRIPTION
cm-push 0.10.3  Push chart package to ChartMuseum
$ ls /root/.local/share/helm/plugins/helmpush/bin/helmpush
/root/.local/share/helm/plugins/helm-push/bin/helmpush
图片

上传Chart包到Harbor

4.1 Harbor UI上传Chart

  登录Harbor管理界面,进入要将chart包上传的projects(项目),选择【Helm Charts】,然后选择【上传】按钮将本地电脑中制作好的Chart包上传到Harbor中。

图片
图片
图片

然后点击【上传】

图片
图片

4.2 命令行上传Chart

1)下载测试用的chart包

$ helm repo list
NAME          URL
bitnami       https://charts.bitnami.com/bitnami 
ali-incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
$ helm search repo bitnami | head  -2
NAME              CHART VERSION APP VERSION   DESCRIPTION
bitnami/airflow          14.0.13       2.5.1         Apache Airflow is a tool to express and execute...
$ helm pull bitnami/airflow
$ ls
airflow-14.0.13.tgz
图片

2)添加Harbor repo

  • 拷贝https相关证书
$ scp 192.168.2.30:/app/harbor/ssl/{ca.pem,harbor.pem,harbor-key.pem}  ./
  • 添加repo
$ helm repo add harbor-library https://192.168.2.30:443/chartrepo/library --username admin --password Harbor12345 \
--ca-file ca.pem --key-file harbor-key.pem --cert-file harbor.pem
"harbor-library" has been added to your repositories

harbor-library​:自定义的repo名称;https://192.168.2.30:443/chartrepo/library​为chart连接地址,chartrepo固定格式,“library”为chart所在项目的名称,请结合自身的实际环境修改。--username​:指定Harbor的用户名(该用户必须对project对象拥有权限);--password​:指定密码;--ca-file​:为harbor颁发证书的颁发者证书;--key-file​: Harbor的私钥;--cert-file:指定harbor的证书;

Cfssl工具格式

Openssl工具格式

--ca-file

ca.pem

ca.crt

--cert-file

harbor.pem

harbor.crt

--key-file

harbor-key.pem

图片
  • 查看是否添加成功
$ helm repo list
NAME           URL
harbor-library https://192.168.2.30:443/chartrepo/library
图片

3)将打包应用从命令行push到harbor

格式:helm cm-push chart包 repo名称

$ helm cm-push airflow-14.0.13.tgz harbor-library \
--ca-file ca.pem --key-file harbor-key.pem \
--cert-file harbor.pem
图片

4)验证是否上传成功

图片

基于Harbor中的Chart包发布服务

  使用helm包管理工具将存放在Harbor中的chart包部署到kubernetes集群中

5.1 查看chart概要

  在Harbor UI点击chart名称即可查看该chart的概要信息,包括chart介绍、安装、卸载、配置等,可以根据概要信息来使用相关的管理命令。

图片

图5.1-1

图片

图5.1-2

图片

图5.1-3

5.2 添加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

1)拷贝harbor相关证书

将harbor相关的证书拷贝到Helm所在服务器(一般是kubernetes集群中的master节点)。

$ scp 192.168.2.30:/app/harbor-cert/{ca.pem, harbor.pem, harbor-key.pem}  ./

2)添加harbor的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

表示添加成功!

图片

3)查看验证

$ helm repo list
NAME      URL
aliyun    https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
my-harbor https://192.168.2.22/chartrepo/lidabai

 5.3 发布服务

$ helm install --ca-file <ca file> --cert-file <cert file> --key-file <key file>  \
   --username=<username> --password=<password> --version 2.0.1 <repo name>/memcached
  • 搜索chart
$ helm search repo my-harbor
NAME     CHART VERSION APP VERSION DESCRIPTION                                       
my-harbor/memcached 2.0.1     Free & open source, high-performance, distribut...
  • 安装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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK