Harbor 是啥?细节不科普…… 你查到本文,那你肯定是已经在使用 Harbor了,下面直入正文。

说明

如果你没用过 harbor 然后你仅仅需要搭建一个 helmchart 仓库服务,那么你不必使用 harbor,如果你的环境中已经有 nexus3 了,你可以直接使用 nexus3 作为 helmchart 仓库,很好用且支持直接代理缓存第三方 helmchart 仓库。

如果你已经在用 harbor,刚好你也需要有一个地方可以存储 helmchart,那么你可以为 harbor 开启 helmchart 服务支持,这样就不必额外再安装另外的 helmchart 服务中间件了。


我的开发环境有 nexus3 也有 harbor,我一直是直接在 nexus3 中配置 helm 代理的,这本来也没什么挺好用的。

后来上生产环境,生产环境是 Kubernetes 集群的,所以生产环境有一个 harbor 仓库服务,里面存储了镜像制品。

生产环境也有 hemlchart 的需求,常规想法是在生产直接启一个 nexus3 不就行了嘛,这样确实可以。但是 nexus3 似乎更开发环境一些,生产环境似乎没有 nexus3 的需要,我大可不必在生产安装和维护一个 nexus3。生产只是需要给 hemlchart 一席之地即可,没有那么重的其他需求。

因为生产是有 harbor 的,而 harbor 也可以开启 helmchart 支持,这不就刚好嘛,就用它了。

安装 harbor 的 helmchart repository

默认新版 harbor 不会启用 chart repository service,如果需要管理 helm,我们需要在安装时添加额外的参数,例如:

默认安装是下面这样的

$ cd /usr/local/harbor
$ ./install.sh

启用 chart repository service 服务的安装方式要添加一个参数 ​​--with-chartmuseum​

$ cd /usr/local/harbor
$ ./install.sh --with-chartmuseum

等待安装,你户看到如下类似提示

Creating chartmuseum   ... done

然后,就可以登录 harbor 来管理 helm charts 了。

发布 helm charts

方式一、基于 UI 的可视化上传

这种方式没什么可说的,使用浏览器登录 harbor 后,在对应的管理界面操作即可,如下图:

Harbor 启用 helmchart 服务_推送

方式二、基于命令的 CLI 推送

更多时候基于第1种UI界面的上传并不能满足我们的实际需求,大部分情况我们都是要通过脚本发布helmchart 的。

1、安装插件

为了能使用命令推送,我们需要安装并使用 helm push 插件包,地址:​​https://github.com/chartmuseum/helm-push/releases​

a) 在线安装插件:

helm plugin install https://github.com/chartmuseum/helm-pus

b) 离线安装插件:

下载安装包 ​​helm-push_0.10.1_linux_amd64.tar.gz​​​,再使用命令 ​​helm env​​​ 获取 ​​HELM_PLUGINS​​​ 路径,然后放置和解压安装包,最后使用 ​​helm plugin list​​ 查看结果,如下:

[root@shy-test chart]# helm env | grep HELM_PLUGINS
HELM_PLUGINS="/root/.local/share/helm/plugins"
[root@shy-test chart]# mkdir -p /root/.local/share/helm/plugins/helm-push
[root@shy-test chart]# mv helm-push_0.10.1_linux_amd64.tar.gz /root/.local/share/helm/plugins/helm-push/
[root@shy-test chart]# cd /root/.local/share/helm/plugins/helm-push/
[root@shy-test helm-push]# tar -xzvf helm-push_0.10.1_linux_amd64.tar.gz
[root@shy-test helm-push]# helm plugin list
NAME VERSION DESCRIPTION
cm-push 0.10.1 Push chart package to ChartMuseum
2、添加 harbor 仓库到本地 helm 仓库列表

先到 harbor 中创建一个项目,或者直接使用你已经存在的项目也行,下面的脚本示例是以创建的项目 helmchart_repo 为例的。

# 查看本地仓库列表(列出的是我已经添加其他仓库)
[root@shy-test chart]# helm repo list
NAME URL
rancher-stable https://nexus.shanhy.com/repository/helm_rancher_stable/

# 添加仓库地址到本地列表(其中 myharbor 为这个仓库地址在 helm 本地的名称,连接是仓库URL,后面是登录 harbor 的用户名和密码)
# URL格式:http(s)://{harbor域名或iP:端口(如果默认443或80可不加)}/chartrepo/{yourHarborProjectName}
[root@shy-test chart]# helm repo add myharbor https://harbor.shanhy.com/chartrepo/helmchart_repo --username admin --password harbor12345
"myharbor" has been added to your repositories

# 再查看(发现已添加成功)
[root@shy-test chart]# helm repo list
NAME URL
rancher-stable https://nexus.shanhy.com/repository/helm_rancher_stable/
myharbor https://harbor.shanhy.com/chartrepo/helmchart_repo

# 更新本地仓库缓存内容
[root@shy-test chart]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "myharbor" chart repository
...Successfully got an update from the "rancher-stable" chart repository
Update Complete. ⎈Happy Helming!⎈


特别说明:
1.harbor 仓库 URL 中的 ​​chartrepo​​ 是​​固定值​​。
2.在操作之前,请务必先在 harbor 中创建好项目,例如 ​​helmchart_repo​​ 即为我先创建好的项目名称。
3.如果你还是搞不清这个URL,可以在harbor界面中上传一个外面下着的 chart 包,上次成功后进入这个 chart 详细页面,在 “概要这个Tab” 的最底部区域,harbor会告诉你在本地添加仓库的URL和命令。


如果你的 https 报错,可以添加 ca 证书尝试,至少我这里没有出现错误,https 直接成功。

携带 harbor 证书的示例如下:

helm repo add --ca-file /data/harbor/certs/ca.crt --cert-file /data/harbor/certs/harbor.shanhy.com.crt --key-file /data/harbor/certs/harbor.shanhy.com.key --username admin --password harbor12345 myharbor https://harbor.shanhy.com/chartrepo/helmchart_repo
3、推送 chart 以及 chart 的更多操作

a) 打包 chart

打包的步骤非三言两语能述,此处略。

b) 推送 chart 示例

# 推送chart文件夹方式
helm push mychartdemo myharbor

# 推送chart压缩包方式
helm push mychartdemo-1.0.1.tgz myharbor


其中 myharbor 为上面已经添加到 helm 本地仓库的名称。


c) 搜索 chart 示例

[root@shy-test chart]# helm search repo rancher
NAME CHART VERSION APP VERSION DESCRIPTION
rancher-stable/rancher 2.6.2 v2.6.2 Install Rancher Server to manage Kubernetes clu...

d) 拉取 chart 示例

# myharbor 和 mychartdemo 分别对应本地 repo 名称和远程 chart 名称
[root@shy-test chart]# helm pull myharbor/mychartdemo


命令执行后,会在当前目录出现一个 tgz 文件。


e) 安装 chart 示例

# 从 helm repo 直接安装(无需先pull),其中 install 后跟的 mychartdemo 是命名,不指定的话会自动产生随机名称,推荐手工设定别让随机生成
[root@shy-test chart]# helm install mychartdemo myharbor/mychartdemo

# 或者从本地压缩文件安装
[root@shy-test chart]# helm install mychartdemo-1.0.1.tgz

# 也可以从本地目录安装
[root@shy-test chart]# helm install mychartdemo

f) 查看已安装 charts

# 注意此处不是 helm repo list
[root@shy-test chart]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mychartdemo default 1 2021-12-10 19:00:26.48673122 +0800 CST deployed mychartdemo-1.0.1

g) 删除helm charts应用

# mychartdemo 是 helm list 第一列的 NAME,如果 namespace 不是 default,也需要加上
[root@shy-test chart]# helm uninstall mychartdemo
[root@shy-test chart]# helm -n default uninstall mychartdemo

(END)