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搜索 Artifact Hub,其中列出了来自数十个不同存储库的 helm 图表。helm search repo搜索您已添加到本地 helm 客户端的存储库(使用 helm repo add)。此搜索通过本地数据完成,不需要公共网络连接。
$ 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
$ 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 install foo foo-0.1.1.tgz)
- 解压后的图表目录(helm install foo path/to/foo)
- 完整 URL(helm install foo https://example.com/charts/foo-1.2.3.tgz)
‘helm upgrade’ and ‘helm rollback’: Upgrading a Release, and Recovering on Failure
安装/升级/回滚的有用选项
您可以指定其他几个有用的选项,以在安装/升级/回滚期间自定义 Helm 的行为。请注意,这不是 CLI 标志的完整列表。要查看所有标志的描述,只需运行 helm
- –timeout:等待 Kubernetes 命令完成的 Go 持续时间值。默认为 5m0s。
- –wait:等待所有 Pod 处于就绪状态、PVC 已绑定、部署具有最小(所需减去 maxUnavailable)Pod 处于就绪状态并且服务具有 IP 地址(如果是 LoadBalancer 则为 Ingress),然后将发布标记为成功。它将等待 –timeout 值的时间。如果达到超时,发布将被标记为失败。注意:在 Deployment 的副本设置为 1 且 maxUnavailable 未设置为 0(作为滚动更新策略的一部分)的情况下,–wait 将返回就绪状态,因为它已满足就绪状态的最小 Pod。
- –no-hooks:这将跳过命令的运行钩子
- –recreate-pods(仅适用于升级和回滚):此标志将导致重新创建所有 Pod(属于部署的 Pod 除外)。(在 Helm 3 中已弃用)
‘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。
在下一章中,我们将介绍开发图表的过程。