前言
Helm是Kubernetes的包管理器。Helm使用一种称为charts的打包格式。自1.6.0版本以来,Harbor是一个复合的云原生注册表,支持容器镜像管理和Helm Chart管理。对Harbor中Helm charts的访问由基于角色的访问控制(RBAC)控制,并受项目限制。
有两个地方可以管理Helm Charts。
-
ChartMuseum,由Harbor自1.6.0版起提供
-
兼容OCI的注册表,由Harbor从2.0.0版开始提供
这意味着您可以通过同一组项目和存储库管理Helm Charts以及容器镜像。
harbor 版本更迭
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中开始删除。
在Harbor Interface中使用ChartMuseum管理Helm Chart
Charts列表
登录Harbor界面,点击Projects,选择项目进入项目详情页面。单击Helm Charts选项卡可查看现有Helm Charts,其中包含以下信息:
- Helm Chart名称
- Charts的状态:Active或Deprecated
- Charts版本数
- 创建Chart的时间
您可以单击右上角的图标在卡片视图和列表视图之间切换。
上传新Charts
- 单击UPLOAD打开Charts上传对话框。
- 选择要从文件系统上载的Charts。
- 单击UPLOAD将其上载到Charts存储库服务器。
如果Charts是签名的,您可以从文件系统中选择相应的出处文件,然后单击UPLOAD将它们同时上传。
如果Charts上传成功,则会显示在Charts列表中。
列表Charts版本
若要查看Charts的可用版本,请单击Charts列表中的Charts名称。Charts详细信息显示以下信息:
- Charts版本号
- Charts版本的维护者
- 使用的模板引擎(默认为
gotpl
) - Charts版本的创建时间戳
Charts列表中的每个Chart至少有一个版本。您可以单击右上角的图标在卡片视图和Charts视图之间切换。
单击第一列中的复选框以选择一个或多个Charts版本,然后您可以执行以下操作:
- 单击“删除”可从Charts存储库服务器中删除选定的Charts版本。支持批量操作。
- 单击DOWNLOAD下载Charts工件文件。不支持批量操作。
- 单击UPLOAD为当前Charts上载新版本。
向Charts版本添加标签和从Charts版本删除标签
如果您具有Harbor系统管理员、项目管理员或项目开发人员角色,则可以单击“添加标签”向图表版本添加标签或从图表版本中删除标签。
按标签过滤Charts版本
Charts版本可以按标签过滤:
查看Charts版本详细信息
单击Charts版本号链接以打开图表版本详细信息视图。您可以在此处查看有关指定图表版本的更多详细信息。有三个内容部分:
-
总结:
-
Charts自述文件
-
总体元数据,如主页、创建的时间戳和应用程序版本
-
相关Helm命令,如
helm add repo
、helm install
等,供参考。
-
-
依赖:
-
显示依赖子Chart的名称、版本和存储库
-
-
Values:
-
显示
values.yaml
文件的内容,并突出显示代码预览 -
您可以单击右上角的图标按钮在YAML文件视图和键值对列表视图之间切换。
-
您可以点击右上角的下载按钮下载YAML文件。
通过Helm CLI使用ChartMuseum
作为Helm chart存储库,Harbor可以与Helm CLI进行互操作。要安装Helm CLI,请参阅安装Helm。运行命令 helm version
以确保Helm CLI的版本为v2.9.1或更高版本。
helm version
#Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
#Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
将Harbor添加到存储库列表
在使用Helm CLI之前,使用 helm repo add
命令将Harbor添加到存储库列表中。支持两种不同的模式。
-
添加Harbor作为统一的单一索引入口点。
在这种模式下,Helm可以知道位于不同项目中的所有Charts,以及当前经过身份验证的用户可以访问的Charts。
helm repo add --ca-file ca.crt --username=admin --password=Passw0rd myrepo https://xx.xx.xx.xx/chartrepo
提供CA文件和证书文件。这是必要的,因为Helm中存在问题。
-
添加Harbor项目作为单独的索引入口点。
在此模式下,Helm只能拉取指定项目中的图表。
helm repo add --ca-file ca.crt --username=admin --password=Passw0rd myrepo https://xx.xx.xx.xx/chartrepo/myproject
使用CLI将Charts推送到存储库服务器
作为替代方案,您也可以使用CLI上传图表。本机Helm CLI不支持它。必须在推送前安装社区插件。运行下面的 helm plugin install
命令,先安装 helm-push
插件。
helm plugin install https://github.com/chartmuseum/helm-push
成功安装后,运行 push
命令上传图表:
helm push --ca-file=ca.crt --username=admin --password=passw0rd chart_repo/hello-helm-0.1.0.tgz myrepo
push
命令尚不支持推送已签名chart的prov文件。
安装Charts
在安装之前,请确保Helm已使用 helm init
命令正确初始化,并且图表索引已与 helm repo update
命令同步。
如果您不确定图表的位置,请使用关键字搜索图表:
helm search hello
#NAME CHART VERSION APP VERSION DESCRIPTION
#local/hello-helm 0.3.10 1.3 A Helm chart for Kubernetes
#myrepo/chart_repo/hello-helm 0.1.10 1.2 A Helm chart for Kubernetes
#myrepo/library/hello-helm 0.3.10 1.3 A Helm chart for Kubernetes
如果一切就绪,请在Kubernetes集群中安装Charts:
helm install --ca-file=ca.crt --username=admin --password=Passw0rd --version 0.1.10 repo248/chart_repo/hello-helm
有关其他更多Helm命令,如如何签署图表,请参阅Helm文档。
使用兼容OCI的Harbor注册表管理Helm Charts
Helm 3支持与OCI兼容的注册表操作,包括推和拉。要安装最新的Helm CLI,请参阅安装Helm。另外,运行 helm version
以确保Helm CLI的版本为v3.0.0+。
helm version
#version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"}
登录到OCI兼容的Harbor注册表
在使用Harbor的OCI兼容注册表拉或推Helm Charts之前,应该使用 helm registry login
命令记录Harbor。
helm registry login --insecure xx.xx.xx.xx
由于Helm中的问题,未启用https认证的harbor需要加上--insecure 参数
使用CLI将Charts推送到工件存储库
登录后,运行 helm package
命令,保存一个chart目录,为工件的推送做好准备。
helm package dummy-chart --version
chart保存后,运行 helm push
命令推送图表:
helm push --plain-http dummy-chart:version oci://xx.xx.xx.xx/chartrepo
未启用https认证,需要加上--plain-http参数
使用CLI从工件存储库中拉取Charts
要从Harbor的OCI兼容注册表中拉取chart,请运行 helm pull
命令,就像使用Docker CLI拉取图像一样。
helm pull --plain-http oci://xx.xx.xx.xx/chartrepo/dummy-chart --version 0.2
在Harbor界面中管理Helm Charts工件
将图表推送到与OCI兼容的Harbor注册中心,就像对待任何其他类型的工件一样。您可以列出、复制、删除、更新标签,获取详细信息,以及为它们添加或删除标签,就像您可以为容器镜像一样。