引言

将应用程序部署到 Kubernetes ——强大而流行的容器——编排系统——可能会很复杂。 设置单个应用程序可能涉及创建多个相互依赖的 Kubernetes 资源——比如 pods、服务、部署和复制集——每个资源都需要您编写详细的 YAML 清单文件。

Helm 是一个用于 Kubernetes 的包管理器,它允许开发人员和操作人员更容易地将应用程序和服务打包、配置和部署到 Kubernetes 集群上。

Helm 现在是一个官方的 Kubernetes 项目,并且是云本地计算基金会(Cloud Native Computing Foundation)的一部分,该基金会是一个非营利组织,支持在 Kubernetes 生态系统内部和周围的开源项目。

在本文中,我们将概述 Helm 及其用于简化在 Kubernetes 部署应用程序的各种抽象概念。 如果你刚到 Kubernetes,先阅读《 Kubernetes 概论》 ,熟悉一些基本概念可能会有所帮助。

海尔姆概述

大多数的编程语言和操作系统都有自己的包管理器来帮助软件的安装和维护。 Helm 提供了与您可能已经熟悉的许多包管理器相同的基本功能集,例如 Debian 的 apt 或 Python 的 pip。

赫尔姆可以:

  • 安装软件。
  • 自动安装软件依赖项。
  • 升级软件。
  • 配置软件部署。
  • 从软件仓库获取软件包。

Helm 通过以下组件提供这一功能:

  • 一个命令行工具,Helm,为 Helm 的所有功能提供用户界面。
  • 在 Kubernetes 集群上运行的伙伴服务器组件 tiller 监听来自 helm 的命令,并处理集群上软件版本的配置和部署。
  • 赫尔姆包装格式,称为图表。
  • 一个官方的图表库,里面包含了流行的开源软件项目的预先打包的图表。

接下来我们将更详细地研究图表的格式。

图表

Helm 包称为 charts,它们由一些 YAML 配置文件和一些模板组成,这些配置文件被呈现到 Kubernetes 清单文件中。 下面是一个图表的基本目录结构:

Example chart directory
package-name/
  charts/
  templates/
  Chart.yaml
  LICENSE
  README.md
  requirements.yaml
  values.yaml

这些目录和文件具有以下功能:

  • Charts / : 可以将手动管理的图表依赖项放在这个目录中,不过通常最好使用 requirements.yaml 动态链接依赖项。
  • Templates / : 此目录包含模板文件,这些文件与配置值(来自 values.yaml 和命令行)组合并呈现到 Kubernetes 清单中。 这些模板使用 Go 编程语言的模板格式。
  • Yaml: 一个 YAML 文件,包含关于图表的元数据,如图表名称和版本、维护人员信息、相关网站和搜索关键字。
  • License: 图表的明文许可证。
  • Readme.md: 一个包含图表用户信息的自述文件。
  • 列出图表依赖项的 YAML 文件。
  • Values.YAML: 图表的默认配置值的 YAML 文件。

Helm 命令可以从本地目录或。 Gz 打包了这个目录结构的版本。 这些打包的图表也可以从图表存储库或 repos 中自动下载和安装。

我们接下来会看到图表仓库。

图表储存库

Helm chart repo 是一个简单的 HTTP 站点,它提供 index.yaml 文件和。 Tar.gz 包装图表。 Helm 命令有子命令可用于帮助包图表和创建所需的 index.yaml 文件。 这些文件可以由任何 web 服务器、对象存储服务或静态站点主机(如 GitHub Pages)提供。

Helm 预先配置了一个默认的图表存储库,称为 stable。 这份回购协议指向了 https://kubernetes-charts.Storage.googleapis.com 的一个谷歌存储桶。 Stable repo 的源代码可以在 GitHub 上的 Git 仓库中找到 helm / charts。

可以使用 helm repo add 命令添加备用 repos:

  • 官方的孵化器回购协议,其中包含尚未准备好稳定的图表。 在官方的 Helm charts GitHub 页面上可以找到孵化器的使用说明。
  • 比特纳米舵轮图提供了一些官方稳定回购协议中没有包括的图表。

无论是安装本地开发的图表,还是从回购商那里安装的图表,都需要为特定的安装进行配置。 我们接下来会调查这个秘密。

图表配置

图表通常在其 values.yaml 文件中包含默认配置值。 有些应用程序可以使用默认值完全部署,但是您通常需要重写一些配置以满足需要。

为配置公开的值由图表的作者决定。 有些用于配置 Kubernetes 原语,有些可能通过底层容器来配置应用程序本身。

下面是一些示例值的片段:

values.yaml
service:
  type: ClusterIP
  port: 3306

这些是配置 Kubernetes 服务资源的选项。 您可以使用舵轮检查值图表-名称转储一个图表的所有可用配置值。

可以通过编写自己的 YAML 文件并在运行 helm install 时使用它,或者通过使用 -- set 标志在命令行上单独设置选项来覆盖这些值。 您只需指定要从默认值更改的那些值。

使用特定配置部署的舵轮图称为发行版。

公布

在图表安装过程中,Helm 将图表的模板与用户指定的配置和 value.yaml 中的缺省值组合在一起。 然后通过 Kubernetes API 将这些信息呈现到 Kubernetes 的舱单中。 这将创建一个版本、一个特定的配置和一个特定图表的部署。

这个版本的概念很重要,因为您可能希望在一个集群上部署同一个应用程序多次。 例如,您可能需要多个具有不同配置的 MySQL 服务器。

您可能还希望单独升级图表的不同实例。 也许一个应用程序已经为更新的 MySQL 服务器做好了准备,但是另一个应用程序没有。 有了 Helm,你可以单独升级每个版本。

您可能升级一个发行版,因为它的图表已经更新,或者因为您想要更新该发行版的配置。 无论哪种方式,每次升级都会创建一个新版本,而 Helm 将允许您轻松地回滚到以前的版本,以防出现问题。

创建图表

如果您无法找到您正在部署的软件的现有图表,您可能需要创建自己的图表。 Helm 可以输出一个图表目录的脚手架,并创建图表名称。 这将创建一个文件夹,其中包含我们在上面的图表部分中讨论的文件和目录。

从那里,您将需要用 Chart.yaml 填充图表的元数据,并将 Kubernetes 清单文件放入模板目录中。 然后您需要将相关的配置变量从您的清单中提取出来并放入 values.yaml 中,然后使用模板系统将它们包含回您的清单模板中。

Helm 命令有许多子命令可用来帮助您测试、打包和服务您的图表。 欲了解更多信息,请阅读官方赫尔姆文件的发展图表。

总结

在本文中,我们回顾了 Kubernetes 的软件包管理器 Helm。 我们概述了 Helm 架构和各个舵柄和舵柄组件,详细介绍了 Helm 图表格式,并查看了图表存储库。 我们还研究了如何配置 Helm 图,以及如何在 Kubernetes 集群上组合和部署配置和图表。 最后,我们谈到了创建一个图表的基本知识,当一个合适的图表还没有出现的时候。

有关 Helm 的更多信息,请参阅 Helm 的官方文档。 要找到 Helm 的官方图表,可以查看 GitHub 上 Git 仓库的官方图表。