Kubernetes 包管理工具 Helm

Helm 是 Kubernetes 的包管理器,Kubernetes 是一个开源容器编排平台。 Helm 通过提供一种将应用程序及其依赖项打包、版本化和管理为可重用、可共享的 Helm Chart 的方法,简化了在 Kubernetes 集群上部署和管理应用程序的过程。

以下是与 Helm 相关的一些关键概念的细分:

图表:图表是预先配置的 Kubernetes 资源包,用于定义、安装和管理应用程序或服务。 图表可能包含用于部署 Pod、服务、部署、配置映射等的 YAML 清单,以及用于自定义的模板和值文件。

模板:Helm 使用 Go 模板来实现 Kubernetes 清单的参数化和动态生成。 这允许用户轻松自定义部署,而无需直接修改底层 YAML 文件。

:值文件用于向 Helm 图表提供配置参数。 这些参数可以在图表的模板中使用,以根据特定要求自定义部署。

存储库:Helm 图表存储在存储库中,存储库可以是公共的(如官方 Helm Hub),也可以是私有的。 Helm 允许您添加、更新和删除存储库以发现和安装图表。

发布:发布是部署到 Kubernetes 集群上的图表实例。 每个版本都有唯一的名称,并且可以独立管理,包括升级、回滚和卸载。

总体而言,Helm 通过提供标准化的方式来打包、部署和管理复杂 Kubernetes 应用程序,从而简化了管理复杂 Kubernetes 应用程序的过程,从而促进 Kubernetes 生态系统内的可重用性和协作。

三大概念

Chart 是一个 Helm 包。它包含在 Kubernetes 集群内运行应用程序、工具或服务所需的所有资源定义。可以将其视为 Kubernetes 版的 Homebrew 公式、Apt dpkg 或 Yum RPM 文件。

Repository 是可以收集和共享 Chart 的地方。它类似于 Perl 的 CPAN 存档或 Fedora 包数据库,但适用于 Kubernetes 包。

Release 是在 Kubernetes 集群中运行的 Chart 实例。一个 Chart 通常可以多次安装到同一个集群中。每次安装时都会创建一个新版本。考虑一个 MySQL Chart。如果您希望集群中运行两个数据库,则可以安装该 Chart 两次。每个数据库都有自己的版本,而版本又有自己的版本名称。

考虑到这些概念,我们现在可以这样解释 Helm:

Helm 将 Chart 安装到 Kubernetes 中,为每个安装创建一个新版本。要查找新图表,您可以搜索 Helm 图表存储库。

安装 Helm

$ brew install helm

使用 Helm

‘helm search’:Finding Charts 查找图表

Helm 附带一个强大的搜索命令。它可用于搜索两种不同类型的源:

$ helm search hub wordpress

helm search hub 会公开 artifacthub.io 上位置的 URL,但不公开实际的 Helm 存储库。helm search hub –list-repo-url 会公开实际的 Helm 存储库 URL,这在您想要添加新存储库时非常有用:helm repo add [NAME] [URL]。

使用 helm search repo,您​​可以在已添加的存储库中找到图表的名称:

$ helm repo add brigade https://brigadecore.github.io/charts
$ helm search repo brigade

‘helm install’: Installing a Package

Using Helm

$ helm upgrade --install helm-example ./helm-chart-example --dry-run --debug
#$ helm upgrade --install helm-example ./helm-chart-example

$ helm uninstall helm-example
$ helm install happy-panda bitnami/wordpress

现在 wordpress chart 已安装。请注意,安装 chart 会创建一个新的发布对象。上面的发布名为 happy-panda。(如果您希望 Helm 为您生成名称,请忽略发布名称并使用 –generate-name。)

在安装过程中,helm 客户端将打印有关创建了哪些资源、发布状态如何以及您是否可以或应该采取其他配置步骤的有用信息。

Helm 不会等到所有资源都运行完毕后才退出。许多图表需要大小超过 600MB 的 Docker 镜像,并且可能需要很长时间才能安装到集群中。

要跟踪发布状态或重新读取配置信息,您可以使用 helm status:

$ helm status happy-panda
$ helm upgrade --install --create-namespace myChart ./path/to/my/chart \
  --set image.tag=v1.0.0 \
  --set env=production \
  --set environment.SENDGRID_APIKEY=myKey \
  --set environment.DEFAULT_FROM_ADDRESS="my@email.com" \
  --set environment.DEFAULT_FROM_NAME="Lucas Santos"

安装前自定义图表

我们这里的安装方式只会使用此图表的默认配置选项。很多时候,您需要自定义图表以使用您喜欢的配置。

要查看图表上可配置的选项,请使用 helm show values:

$ helm show values bitnami/wordpress
$ echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml
$ helm install -f values.yaml bitnami/wordpress --generate-name

上述命令将创建一个名为 user0 的默认 MariaDB 用户,并授予此用户对新创建的 user0db 数据库的访问权限,但将接受该图表的所有其他默认值。

在安装期间传递配置数据有两种方法:

–values(或 -f):指定带有覆盖的 YAML 文件。可以多次指定,最右边的文件将优先 –set:在命令行上指定覆盖。

更多安装方法

helm install 命令可以从多个来源安装:

‘helm upgrade’ and ‘helm rollback’: Upgrading a Release, and Recovering on Failure

安装/升级/回滚的有用选项 您可以指定其他几个有用的选项,以在安装/升级/回滚期间自定义 Helm 的行为。请注意,这不是 CLI 标志的完整列表。要查看所有标志的描述,只需运行 helm –help。

‘helm uninstall’: Uninstalling a Release

从上面的输出中,我们可以看到 happy-panda 版本已被卸载。

在以前的 Helm 版本中,删除版本时,会保留删除记录。在 Helm 3 中,删除也会删除版本记录。如果您希望保留删除版本记录,请使用 helm uninstall –keep-history。使用 helm list –uninstalled 将仅显示使用 –keep-history 标志卸载的版本。

helm list –all 标志将显示 Helm 保留的所有版本记录,包括失败或已删除项目的记录(如果指定了 –keep-history):

$ helm list --all

请注意,由于现在默认删除发布,因此不再可能回滚已卸载的资源。

‘helm repo’: Working with Repositories

$ helm repo list

可以使用 helm repo add [NAME] [URL] 添加新存储库:

$ helm repo add dev https://example.com/dev-charts

由于图表存储库经常更改,因此您可以随时通过运行 helm repo update 来确保您的 Helm 客户端是最新的。

可以使用 helm repo remove 删除存储库。

Creating Your Own Charts

$ helm create deis-workflow

现在 ./deis-workflow 中有一个图表。您可以编辑它并创建自己的模板。

在编辑图表时,您可以通过运行 helm lint 来验证它是否格式正确。

当需要将图表打包以供分发时,您可以运行 helm package 命令:

$ helm package deis-workflow
$ helm install deis-workflow ./deis-workflow-0.1.0.tgz

结论

本章介绍了 helm 客户端的基本使用模式,包括搜索、安装、升级和卸载。它还介绍了一些有用的实用程序命令,如 helm status、helm get 和 helm repo。

有关这些命令的更多信息,请查看 Helm 的内置帮助:helm help。

在下一章中,我们将介绍开发图表的过程。