介绍
将应用程序部署到Kubernetes – 功能强大且流行的容器编排系统 – 可能很复杂。 设置单个应用程序可能涉及创建多个相互依赖的Kubernetes资源(如pod,服务,部署和复制集),每个资源都要求您编写详细的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包装格式,称为图表 。
- 一个官方的策划图表存储库,包含流行的开源软件项目的预先打包图表。
接下来我们将更详细地研究图表格式。
图表
Helm包称为图表 ,它们由几个YAML配置文件和一些呈现在Kubernetes清单文件中的模板组成。 这是图表的基本目录结构:
package-name/ charts/ templates/ Chart.yaml LICENSE README.md requirements.yaml values.yaml
这些目录和文件具有以下功能:
- charts /:手动管理的图表依赖项可以放在此目录中,但通常最好使用
requirements.yaml
动态链接依赖项。 - templates /:此目录包含与配置值(来自
values.yaml
和命令行)组合的模板文件,并呈现为Kubernetes清单。 模板使用Go编程语言的模板格式 。 - Chart.yaml:包含图表元数据的YAML文件,例如图表名称和版本,维护者信息,相关网站和搜索关键字。
- 许可证:图表的明文许可证。
- README.md:包含图表用户信息的自述文件。
- requirements.yaml:列出图表依赖关系的YAML文件。
- values.yaml:图表的默认配置值的YAML文件。
helm
命令可以从本地目录或此目录结构的.tar.gz
打包版本安装图表。 这些打包的图表也可以从图表存储库或repos自动下载和安装。
接下来我们将查看图表存储库。
图表存储库
Helm chart repo是一个简单的HTTP站点,它提供index.yaml
文件和.tar.gz
打包图表。 helm
命令具有可用于帮助打包图表并创建所需index.yaml
文件的子命令。 这些文件可以由任何Web服务器,对象存储服务或静态站点主机(如GitHub Pages)提供。
Helm预先配置了默认的图表存储库,称为stable 。 此repo指向https://kubernetes-charts.storage.googleapis.com
上的Google存储桶。 稳定 仓库的源代码可以在GitHub上的helm / charts Git仓库中找到 。
可以使用helm repo add
命令添加备用存储库。 一些流行的备用存储库是:
- 官方孵化器回购包含尚未准备稳定的图表。 有关使用培养箱的说明,请参阅官方的Helm chart GitHub页面 。
- Bitnami头盔图表提供了官方稳定回购中未涵盖的一些图表。
无论您是安装本地开发的图表还是回购中的图表,都需要根据特定设置对其进行配置。 接下来我们将研究配置。
图表配置
图表通常在其values.yaml
文件中带有默认配置值。 某些应用程序可以使用默认值完全部署,但您通常需要覆盖某些配置以满足您的需求。
为配置公开的值由图表的作者确定。 一些用于配置Kubernetes原语,一些可以传递到底层容器以配置应用程序本身。
以下是一些示例值的片段:
service: type: ClusterIP port: 3306
这些是配置Kubernetes 服务资源的选项。 您可以使用helm inspect values chart-name
来转储helm inspect values chart-name
所有可用配置值。
可以通过编写自己的YAML文件并在运行helm install
时使用它来覆盖这些值,也可以通过在命令行上使用--set
标志单独设置选项来覆盖这些值。 您只需要指定要从默认值更改的值。
使用特定配置部署的Helm图称为发布 。 接下来我们将谈论发布。
发布
在安装图表期间,Helm将图表的模板与用户指定的配置和value.yaml
的默认值value.yaml
。 这些将呈现为Kubernetes清单,然后通过Kubernetes API进行部署。 这将创建特定图表的发布 ,特定配置和部署。
这种发布概念很重要,因为您可能希望在群集上多次部署同一个应用程序。 例如,您可能需要多个具有不同配置的MySQL服务器。
您可能还希望单独升级图表的不同实例。 也许一个应用程序已准备好更新的MySQL服务器,但另一个不是。 使用Helm,您可以单独升级每个版本。
您可以升级版本,因为它的图表已更新,或者您要更新版本的配置。 无论哪种方式,每次升级都会创建一个新版本的版本,Helm将允许您在出现问题时轻松回滚到以前的版本。
创建图表
如果找不到要部署的软件的现有图表,则可能需要创建自己的图表。 Helm可以使用helm create chart-name
输出图表目录的脚手架。 这将创建一个文件夹,其中包含我们在上面的图表部分中讨论过的文件和目录。
从那里,您将要在Chart.yaml
填写图表的元数据,并将您的Kubernetes清单文件放入templates
目录中。 然后,您需要从清单中提取相关的配置变量并将其提取到values.yaml
,然后使用模板系统将它们包含回清单模板中。
helm
命令有许多子命令可用于帮助您测试,打包和提供图表。 有关更多信息,请阅读有关开发图表的官方Helm文档 。
结论
在本文中,我们回顾了Kubernetes的包管理器Helm。 我们概述了Helm架构以及各个helm
和tiller
组件,详细介绍了Helm图表格式,并查看了图表存储库。 我们还研究了如何配置Helm图表以及如何将组态和图表组合并部署为Kubernetes集群上的版本。 最后,我们谈到了在没有合适的图表时创建图表的基础知识。
有关Helm的更多信息,请查看官方Helm文档 。 要查找Helm的官方图表,请查看GitHub上的官方头盔/图表Git存储库 。