chart 存储库指南

本节介绍如何创建和使用Helm chart存储库。 在高层次上,chart存储库是可以存储和共享打包chart的位置。

官方chart库由Kubernetes chart维护,我们欢迎参与。 但是,Helm还可以轻松创建和运行自己的chart存储库。 本指南解释了如何做到这一点。

必备条件

创建chart存储库

Chart存储库是一个HTTP服务器,它包含一个index.yaml文件和可选的一些打包chart。 当您准备好分享您的chart时,首选方法是将其上传到chart存储库。

对于Helm 2.0.0,chart存储库没有任何内部认证。 在GitHub中有一个跟踪进度的issure

由于chart存储库可以是任何可以提供YAML和tar文件并可以响应GET请求的HTTP服务器,因此当您托管自己的chart存储库时,您有很多选择。 例如,您可以使用Google云端存储(GCS)存储,Amazon S3存储,Github Pages,甚至可以创建自己的Web服务器。

chart库结构

Chart存储库由打包chart和名为index.yaml的特殊文件组成,其中包含存储库中所有chart的索引。 通常情况下,index.yaml描述的chart也被托管在同一台服务器上,起源文件也是如此。

例如,存储库https://example.com/charts的布局可能如下所示:

  1. charts/
  2. |
  3. |- index.yaml
  4. |
  5. |- alpine-0.1.2.tgz
  6. |
  7. |- alpine-0.1.2.tgz.prov

在这种情况下,index文件将包含有关一个chart(Alpine图表)的信息,并为该图表提供下载URL https://example.com/charts/alpine-0.1.2.tgz。

不要求chart包与index.yaml文件位于同一台服务器上。 但是,这样做通常是最简单的。

index文件

index文件是一个叫做index.yaml的yaml文件。 它包含一些关于包的元数据,包括chart的Chart.yaml文件的内容。 一个有效的chart存储库必须有一个index文件。 index文件包含有关chart存储库中每个chart的信息。 helm repo index命令将根据包含打包chart的给定本地目录生成索引文件。

这是一个Index文件的例子:

  1. apiVersion: v1
  2. entries:
  3. alpine:
  4. - created: 2016-10-06T16:23:20.499814565-06:00
  5. description: Deploy a basic Alpine Linux pod
  6. digest: 99c76e403d752c84ead610644d4b1c2f2b453a74b921f422b9dcb8a7c8b559cd
  7. home: https://k8s.io/helm
  8. name: alpine
  9. sources:
  10. - https://github.com/kubernetes/helm
  11. urls:
  12. - https://technosophos.github.io/tscharts/alpine-0.2.0.tgz
  13. version: 0.2.0
  14. - created: 2016-10-06T16:23:20.499543808-06:00
  15. description: Deploy a basic Alpine Linux pod
  16. digest: 515c58e5f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cd78727
  17. home: https://k8s.io/helm
  18. name: alpine
  19. sources:
  20. - https://github.com/kubernetes/helm
  21. urls:
  22. - https://technosophos.github.io/tscharts/alpine-0.1.0.tgz
  23. version: 0.1.0
  24. nginx:
  25. - created: 2016-10-06T16:23:20.499543808-06:00
  26. description: Create a basic nginx HTTP server
  27. digest: aaff4545f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cdffffff
  28. home: https://k8s.io/helm
  29. name: nginx
  30. sources:
  31. - https://github.com/kubernetes/charts
  32. urls:
  33. - https://technosophos.github.io/tscharts/nginx-1.1.0.tgz
  34. version: 1.1.0
  35. generated: 2016-10-06T16:23:20.499029981-06:00

生成的索引和包可以从基本的网络服务器提供。 您可以使用helm serve命令在本地进行测试,该命令启动本地服务器。

  1. $ helm serve --repo-path ./charts
  2. Regenerating index. This may take a moment.
  3. Now serving you on 127.0.0.1:8879

上面的内容启动一个本地网络服务器,服务于它在./charts中找到的图表。 serve命令将在启动过程中为您自动生成一个index.yaml文件。

HOSTING CHART REPOSITORIES

本部分介绍了提供chart存储库的几种方法。

Google Cloud Storage

第一步是创建您的GCS存储。 我们会调用给我们的fantastic-charts。

chart库 - 图1

接下来,通过编辑存储权限使您的存储公开。

chart库 - 图2

插入此订单项以公开您的存储分区:

chart库 - 图3

恭喜,现在你有一个空的GCS准备好服务chart!

您可以使用Google Cloud Storage命令行工具或使用GCS Web UI上传chart存储库。 这是官方Kubernetes Charts存储库托管其chart的技术,因此如果遇到困难,您可能需要查看该项目

公共GCS存储可以通过简单的HTTPS访问,地址为https://bucket-name.storage.googleapis.com/。

Github Pages例子

以类似的方式,您可以使用GitHub Pages创建chart存储库。

GitHub允许您以两种不同的方式提供静态网页:

  • 通过配置一个项目来提供其docs /目录的内容
  • 通过配置一个项目来为特定分支提供服务

我们会采取第二种方法,尽管第一种方法很简单。

第一步是创建你的gh-pages分支。 你可以在本地做到这一点。

  1. $ git checkout -b gh-pages

或者通过网络浏览器使用Github存储库上的分支按钮:

chart库 - 图4

接下来,您需要确保您的gh-pages分支设置为Github Pages,点击您的repo Settings并向下滚动到Github页面部分并按照以下设置:

chart库 - 图5

默认情况下,Source通常被设置为gh-pages分支。 如果这不是默认设置,那么选择它。

如果您愿意,您可以在那里使用自定义域名。

并检查是否勾选了强制HTTPS,以便在提供图表时使用HTTPS。

在这种设置中,您可以使用主分支来存储图表代码,并将gh-page分支作为chart存储库,例如:https://USERNAME.github.io/REPONAME。 演示TS chart存储库可通过https://technosophos.github.io/tscharts/访问

普通的网络服务器

要配置普通Web服务器来服务Helm图表,您只需执行以下操作:

  • 将您的index文件和chart放入服务器可以访问的目录中
  • 确保index.yaml文件可以在没有认证要求的情况下被访问
  • 确保yaml文件的内容类型正确(text/yaml或text/x-yaml)

例如,如果您想要将chart从$WEBROOT/charts中提取出来,请确保您的web根目录中有一个charts/目录,并将该index文件和chart放入该文件夹中。

管理chart库

现在您已拥有chart存储库,本指南的最后一部分介绍了如何维护该存储库中的chart。

将chart存储在chart存储库中

现在您已有一个chart存储库,让我们上传一个chart和一个index文件到存储库。 chart存储库中的chart必须打包(helm package chart-name/)并版本正确(遵循SemVer 2准则)。

接下来的这些步骤组成了一个示例工作流程,但欢迎您使用您喜欢的任何工作流程来存储和更新chart存储库中的chart。

准备好打包chart后,创建一个新目录,并将打包chart移动到该目录。

  1. $ helm package docs/examples/alpine/
  2. $ mkdir fantastic-charts
  3. $ mv alpine-0.1.0.tgz fantastic-charts/
  4. $ helm repo index fantastic-charts --url https://fantastic-charts.storage.googleapis.com

最后一条命令采用刚刚创建的本地目录的路径和远程chart存储库的URL,并在给定的目录路径中组成一个index.yaml文件。

现在,您可以使用同步工具或手动将chart和index文件上传到chart存储库。 如果您使用Google云端存储,请使用gsutil客户端查看此示例工作流程。 对于GitHub,您可以简单地将chart放入适当的目标分支中。

将新chart添加到现有存储库

每次要将新chart添加到存储库时,都必须重新生成索引。 helm repo index命令将从头开始完全重建index.yaml文件,仅包括它在本地找到的chart。

但是,您可以使用—merge标志将新图表增量添加到现有的index.yaml文件(在使用像GCS这样的远程存储库时是一个很好的选择)。 运行helm repo index —help 了解更多信息,

确保您上传修改过的index.yaml文件和chart。 如果您生成了provenance文件,也要上传。

与他人分享您的chart

当您准备好分享您的chart时,只需让别人知道您的存储库的URL是什么。

从那里,他们将通过helm repo add [NAME][URL]命令将他们的仓库添加到他们的helm客户端,并使用他们想用来引用仓库的任何名称。

  1. $ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com
  2. $ helm repo list
  3. fantastic-charts https://fantastic-charts.storage.googleapis.com

如果chart由HTTP基本认证支持,您也可以在此处提供用户名和密码:

  1. $ helm repo add fantastic-charts https://username:password@fantastic-charts.storage.googleapis.com
  2. $ helm repo list
  3. fantastic-charts https://username:password@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的信息的地方。