Helm仓库的使用
本节介绍如何创建和使用 Helm仓库。 chart库是存储chart包的地方,软件包都存储在helm仓库中。
官方 chart 库由 Helm Charts 维护 。当然,我们也H可以轻松创建和运行自己的 chart 库。本教程,你能学到如何创建一个helm的仓库。
创建一个 chart 仓库
chart库是带有一个 index.yaml 文件和任意个打包 chart 的 HTTP 服务器。我们可以将一个压缩文件上传到一个http服务器
注意: 对于 Helm 2.0.0,chart库没有任何内部认证。
由于 chart 库可以是任何可以提供 YAML 和 tar 文件的web服务器,只要能从浏览器上打开或者下载,就可以了。
仓库只需要是可以回答GET请求的HTTP服务器,因此我们可以使用nginx、tomcat、node.js作为服务器都可以。
Helm仓库的结构
Helm仓库的结构由打包的 chart 和一个名为的index.yaml的文件组成, index.yaml 其中包含helm库中所有 chart 的索引。
例如,Helm仓库的文件结构 https://example.com/charts 如下所示,只需要把这些放到一个http服务器中就可以了。
charts/ | |- index.yaml | |- alpine-0.1.2.tgz | |- alpine-0.1.2.tgz.prov
这种情况下,索引文件包含有关一个 chart(Alpine chart)的信息,并提供该 chart 的下载 URL https://example.com/charts/alpine-0.1.2.tgz
。
不要求 chart 包与 index.yaml 文件位于同一台服务器上 。但是,放在一起这样做通常是最简单的。
helm仓库是不是很简单呢?现在我们只需要知道index.yaml的格式就可以了。
index.yaml索引文件
索引文件是一个叫做 yaml 文件 index.yaml。它包含一些关于包的元数据,包括 chart 的 Chart.yaml 文件的内容。一个有效的 chart 库必须有一个索引文件。索引文件包含有关 chart 库中每个 chart 的信息。helm repo index
命令将根据包含打包的 chart 的给定本地目录生成索引文件。
下面一个索引文件的例子:
apiVersion: v1 entries: alpine: - created: 2016-10-06T16:23:20.499814565-06:00 description: Deploy a basic Alpine Linux pod digest: 99c76e403d752c84ead610644d4b1c2f2b453a74b921f422b9dcb8a7c8b559cd home: https://k8s.io/helm name: alpine sources: - https://github.com/helm urls: - https://technosophos.github.io/tscharts/alpine-0.2.0.tgz version: 0.2.0 - created: 2016-10-06T16:23:20.499543808-06:00 description: Deploy a basic Alpine Linux pod digest: 515c58e5f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cd78727 home: https://k8s.io/helm name: alpine sources: - https://github.com/helm urls: - https://technosophos.github.io/tscharts/alpine-0.1.0.tgz version: 0.1.0 nginx: - created: 2016-10-06T16:23:20.499543808-06:00 description: Create a basic nginx HTTP server digest: aaff4545f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cdffffff home: https://k8s.io/helm name: nginx sources: - https://github.com/helm/charts urls: - https://technosophos.github.io/tscharts/nginx-1.1.0.tgz version: 1.1.0 generated: 2016-10-06T16:23:20.499029981-06:00
可以使用 helm serve 启动本地服务器,在本地测试所有内容。
$ helm serve --repo-path ./charts Regenerating index. This may take a moment. Now serving you on 127.0.0.1:8879
上面启动了一个本地 web 服务器,为它在 ./charts
目录找到的 chart 提供服务。serve 命令将在启动过程中自动生成一个 index.yaml
文件。
helm server 是在本地启动命令的简单方法,只需要一个目录就行。
创建helm仓库的另外方法
本部分介绍了提供 helm库的几种方法。
ChartMuseum
Helm 提供了一个 open-source Helm 库服务叫 ChartMuseum ,我们可以自己安装这个程序.
ChartMuseum 支撑多种云存储后端. 配置它指向你存放 chart 包的目录或者 bucket,index.yaml 文件会自动动态生成。
它也可以通过 Helm chart 部署:
helm install stable/chartmuseum
命令执行后,出现以下提示:
NAME: wrapping-rat LAST DEPLOYED: Thu Mar 12 14:44:19 2020 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Deployment NAME READY UP-TO-DATE AVAILABLE AGE wrapping-rat-chartmuseum 0/1 1 0 0s ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE wrapping-rat-chartmuseum-5fd89f599f-mkx6d 0/2 Init:0/1 0 0s ==> v1/Secret NAME TYPE DATA AGE wrapping-rat-chartmuseum Opaque 0 0s ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE wrapping-rat-chartmuseum ClusterIP 10.1.71.87 <none> 8080/TCP 0s NOTES: ** Please be patient while the chart is being deployed ** Get the ChartMuseum URL by running: export POD_NAME=$(kubectl get pods --namespace default -l "app=chartmuseum" -l "release=wrapping-rat" -o jsonpath="{.items[0].metadata.name}") echo http://127.0.0.1:8080/ kubectl port-forward $POD_NAME 8080:8080 --namespace default
安装上面的提示,你就能访问启动的ChartMuseum了。
使用docker安装ChartMuseum
也可以使用docker安装ChartMuseum,Docker image:
docker run --rm -it \ -p 8080:8080 \ -v $(pwd)/charts:/charts \ -e DEBUG=true \ -e STORAGE=local \ -e STORAGE_LOCAL_ROOTDIR=/charts \ chartmuseum/chartmuseum
你可以将它加到本地存储库:
helm repo add chartmuseum http://localhost:8080
ChartMuseum 提供其他特性, 如 chart 上传的 API. 查看更多信息 README.
如果想老师完整介绍一下chartmuseum的使用,可以给我们留言哦。
普通的 web 服务器
要配置普通 Web 服务器来服务 Helm chart,只需执行以下操作:
- 将索引和 chart 置于服务器目录中
- 确保
index.yaml
可以在没有认证要求的情况下访问 - 确保
yaml
文件的正确内容类型(text/yaml
或text/x-yaml
)
例如,如果想在 $WEBROOT/charts
以外的目录为 chart 提供服务,请确保 Web 根目录中有一个 charts/
目录,并将索引文件和 chart 放入该文件夹内。
普通web服务的搭建,我们这里就不举例了,如果有需要可以留言给老师。
创建一个helm仓库,并更新索引
现在已有一个helm存储库,那么怎么维护他呢?
让我们上传一个 软件包(chart) 和一个索引文件到存储库。chart 库中的 chart 必须正确打包(helm package chart-name/
)和版本(遵循 SemVer 2 标准)。
好了,我们正式开始创建一个仓库。
准备好打包 chart 后,创建一个新目录,并将打包 chart 移动到该目录。
$ helm package docs/examples/alpine/ $ mkdir fantastic-charts $ mv alpine-0.1.0.tgz fantastic-charts/ $ helm repo index fantastic-charts --url https://fantastic-charts.storage.googleapis.com
最后一条命令采用刚创建的本地目录的路径和远程 chart 库的 URL,并在给定的目录路径中生成 index.yaml
。
https://fantastic-charts.storage.googleapis.com这是你要讲index.yaml和tgz包放到的位置,如果你要放在本地,127.0.0.1也是可以的。
现在可以使用同步工具或手动将 chart 和索引文件上传到 chart 库。如果使用 Google 云端存储,请使用 gsutil 客户端查看此示例工作流程。对于 GitHub,可以简单地将 chart 放入适当的目标分支中。
新添加 chart 添加到现有存储库
每次将新 chart 添加到存储库时,都必须重新生成索引。helm repo index
命令将 index.yaml
从头开始完全重建该文件,但仅包括它在本地找到的 chart。
可以使用 --merge
标志向现有 index.yaml
文件增量添加新 chart(在使用远程存储库(如 GCS)时,这是一个很好的选择)。运行 helm repo index --help
以了解更多信息,
确保上传修改后的 index.yaml 文件和 chart。如果生成了出处 provenance 文件,也要上传。
与他人分享 chart
准备好分享 chart 时,只需让别人知道存储库的 URL 是什么就可以了。
他们将通过 helm repo add [NAME] [URL]
命令将仓库添加到他们的 helm 客户端,并可以起一个带有任何想用来引用仓库的名字。
$ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com $ helm repo list fantastic-charts https://fantastic-charts.storage.googleapis.com
如果 chart 由 HTTP 基本认证支持,也可以在此处提供用户名和密码:
$ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com --username my-username --password my-password $ helm repo list fantastic-charts https://fantastic-charts.storage.googleapis.com
** 注意:** 如果存储库不包含有效信息库 index.yaml
文件,则添加不会成功。
之后,用户将能够搜索 chart。更新存储库后,他们可以使用该 helm repo update 命令获取最新的 chart 信息。
原理是helm repo add
和helm repo update
命令获取index.yaml文件并将它们存储在 $HELM_HOME/repository/cache/
目录中。这是helm search 找到有关chart的信息的地方。