图表仓库指南

本节介绍如何创建和使用舵图表仓库。从高层次上讲,图表仓库是存储和共享打包图表的位置。

分布式社区舵图表仓库位于 Artifact Hub 并欢迎参与。但舵也使创建和运行您自己的图表仓库成为可能。本指南介绍了如何做到这一点。

先决条件

创建图表仓库

图表仓库 是一个 HTTP 服务器,它包含一个 index.yaml 文件,以及可选的一些打包图表。当您准备好分享您的图表时,推荐的方式是将它们上传到图表仓库。

从舵 2.2.0 开始,支持对仓库进行客户端 SSL 身份验证。其他身份验证协议可能以插件形式提供。

由于图表仓库可以是任何可以提供 YAML 和 tar 文件以及能够回答 GET 请求的 HTTP 服务器,因此在托管您自己的图表仓库时,您拥有大量的选择。例如,您可以使用 Google Cloud Storage (GCS) 存储桶、Amazon S3 存储桶、GitHub Pages,甚至创建您自己的 Web 服务器。

图表仓库结构

图表仓库包含打包图表和一个名为 index.yaml 的特殊文件,其中包含仓库中所有图表的索引。通常,index.yaml 描述的图表也托管在同一个服务器上,来源文件 也是如此。

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

charts/
  |
  |- index.yaml
  |
  |- alpine-0.1.2.tgz
  |
  |- alpine-0.1.2.tgz.prov

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

图表包不一定必须与 index.yaml 文件位于同一个服务器上。但是,这样做通常是最简单的。

索引文件

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

这是一个索引文件的示例

apiVersion: v1
entries:
  alpine:
    - created: 2016-10-06T16:23:20.499814565-06:00
      description: Deploy a basic Alpine Linux pod
      digest: 99c76e403d752c84ead610644d4b1c2f2b453a74b921f422b9dcb8a7c8b559cd
      home: https://helm.kubernetes.ac.cn/helm
      name: alpine
      sources:
      - https://github.com/helm/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://helm.kubernetes.ac.cn/helm
      name: alpine
      sources:
      - https://github.com/helm/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://helm.kubernetes.ac.cn/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

托管图表仓库

这部分展示了几个服务图表仓库的方法。

Google Cloud Storage

第一步是 **创建您的 GCS 存储桶**。我们将把我们的存储桶命名为 fantastic-charts

Create a GCS Bucket

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

Edit Permissions

插入此行项目以 **使您的存储桶公开**

Make Bucket Public

恭喜,现在您拥有一个空的 GCS 存储桶,可以用来提供图表!

您可以使用 Google Cloud Storage 命令行工具或使用 GCS Web UI 上传您的图表仓库。可以通过以下地址以简单的 HTTPS 访问公共 GCS 存储桶:https://bucket-name.storage.googleapis.com/

Cloudsmith

您也可以使用 Cloudsmith 设置图表仓库。阅读有关使用 Cloudsmith 的图表仓库的更多信息 这里

JFrog Artifactory

同样,您也可以使用 JFrog Artifactory 设置图表仓库。阅读有关使用 JFrog Artifactory 的图表仓库的更多信息 这里

GitHub Pages 示例

以类似的方式,您可以使用 GitHub Pages 创建图表仓库。

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

  • 通过将项目配置为提供其 docs/ 目录的内容
  • 通过将项目配置为提供特定分支

我们将采用第二种方法,尽管第一种方法同样简单。

第一步将是 **创建您的 gh-pages 分支**。您可以在本地执行此操作,例如。

$ git checkout -b gh-pages

或者通过 Web 浏览器使用 GitHub 仓库上的 **分支** 按钮

Create GitHub Pages branch

接下来,您需要确保您的 **gh-pages 分支** 设置为 GitHub Pages,点击您的仓库 **设置** 并向下滚动到 **GitHub Pages** 部分,并按照如下设置

Create GitHub Pages branch

默认情况下,**源** 通常设置为 **gh-pages 分支**。如果默认情况下未设置,则选择它。

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

并检查 **强制使用 HTTPS** 是否已勾选,这样在提供图表时将使用 **HTTPS**。

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

如果您决定使用 GitHub 页面来托管图表仓库,请查看 图表发布器动作。图表发布器动作是一个 GitHub 操作工作流,用于使用 helm/chart-releaser CLI 工具将 GitHub 项目变成一个自托管的舵图表仓库。

普通 Web 服务器

要将普通 Web 服务器配置为提供舵图表,您只需执行以下操作

  • 将您的索引和图表放在服务器可以提供的目录中
  • 确保 index.yaml 文件可以访问,无需身份验证要求
  • 确保 yaml 文件使用正确的 MIME 类型提供(text/yamltext/x-yaml

例如,如果您想从 $WEBROOT/charts 提供您的图表,请确保您的 Web 根目录中有一个 charts/ 目录,并将索引文件和图表放在该文件夹中。

ChartMuseum 仓库服务器

ChartMuseum 是一个用 Go(Golang)编写的开源舵图表仓库服务器,支持云存储后端,包括 Google Cloud StorageAmazon S3Microsoft Azure Blob Storage阿里云 OSS 存储Openstack 对象存储Oracle Cloud Infrastructure 对象存储百度云 BOS 存储腾讯云对象存储DigitalOcean SpacesMinioetcd.

您也可以使用 ChartMuseum 服务器从本地文件系统托管图表仓库。

GitLab 包注册表

使用 GitLab,您可以在项目的包注册表中发布舵图表。阅读有关使用 GitLab 设置舵包仓库的更多信息 这里.

管理图表仓库

现在您已经拥有了一个图表仓库,本指南的最后一部分介绍了如何在该仓库中维护图表。

将图表存储在您的图表仓库中

现在您已经拥有了一个图表仓库,让我们将一个图表和一个索引文件上传到该仓库。图表仓库中的图表必须打包(helm package chart-name/)并正确版本化(遵循 SemVer 2 指南)。

以下步骤组成一个示例工作流,但您可以随意使用任何您喜欢的流程来存储和更新图表仓库中的图表。

拥有一个打包图表后,创建一个新目录,并将您的打包图表移动到该目录。

$ 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

最后一条命令采用您刚刚创建的本地目录的路径和远程图表仓库的 URL,并在给定的目录路径中编写一个 index.yaml 文件。

现在,您可以使用同步工具或手动将图表和索引文件上传到图表仓库。如果您使用的是 Google Cloud Storage,请查看此 示例工作流,该工作流使用 gsutil 客户端。对于 GitHub,您可以简单地将图表放在适当的目标分支中。

将新图表添加到现有仓库

每次想要向你的仓库添加新的图表时,都需要重新生成索引。helm repo index 命令将从头开始完全重建 index.yaml 文件,只包含它在本地找到的图表。

但是,你可以使用 --merge 标志将新的图表增量添加到现有的 index.yaml 文件中(对于使用像 GCS 这样的远程仓库来说是一个很棒的选择)。运行 helm repo index --help 来了解更多信息。

确保你上传了修改后的 index.yaml 文件和图表。如果你生成了来源文件,也要上传它。

与他人分享你的图表

当你准备好分享你的图表时,只需告诉其他人你的仓库 URL 是什么。

然后,他们可以通过 helm repo add [NAME] [URL] 命令将仓库添加到他们的 helm 客户端,其中 [NAME] 是他们用来引用仓库的任意名称。

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

如果图表由 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,则不会添加。

注意: 如果你的 helm 仓库例如使用自签名证书,你可以使用 helm repo add --insecure-skip-tls-verify ... 来跳过 CA 验证。

之后,你的用户就可以搜索你的图表。在你更新了仓库之后,他们可以使用 helm repo update 命令获取最新的图表信息。

在幕后,helm repo addhelm repo update 命令会获取 index.yaml 文件并将它们存储在 $XDG_CACHE_HOME/helm/repository/cache/ 目录中。这就是 helm search 函数查找图表信息的地址。