Kubernetes包管理器Helm简介
介绍
将应用程序部署到 Kubernetes(功能强大且流行的容器编排系统)可能很复杂。 设置单个应用程序可能涉及创建多个相互依赖的 Kubernetes 资源——例如 pod、服务、部署和副本集——每个都需要您编写详细的 YAML 清单文件。
Helm 是 Kubernetes 的包管理器,它允许开发人员和运营商更轻松地将应用程序和服务打包、配置和部署到 Kubernetes 集群上。
Helm 现在是一个官方的 Kubernetes 项目,并且是 Cloud Native Computing Foundation 的一部分,该基金会是一个支持 Kubernetes 生态系统内外的开源项目的非营利组织。
在本文中,我们将概述 Helm 及其用于简化将应用程序部署到 Kubernetes 的各种抽象。 如果您是 Kubernetes 新手,先阅读 An Introduction to Kubernetes 以熟悉基本概念可能会有所帮助。
Helm 概述
大多数编程语言和操作系统都有自己的包管理器来帮助安装和维护软件。 Helm 提供了与您可能已经熟悉的许多包管理器相同的基本功能集,例如 Debian 的 apt
或 Python 的 pip
。
头盔可以:
- 安装软件。
- 自动安装软件依赖项。
- 升级软件。
- 配置软件部署。
- 从存储库中获取软件包。
Helm 通过以下组件提供此功能:
- 一个命令行工具,
helm
,它为所有 Helm 功能提供用户界面。 - 在 Kubernetes 集群上运行的配套服务器组件
tiller
侦听来自helm
的命令,并处理集群上软件版本的配置和部署。 - Helm 打包格式,称为 charts。
- 官方策划的图表存储库,带有用于流行开源软件项目的预打包图表。
接下来我们将更详细地研究图表格式。
图表
Helm 包被称为 charts,它们由一些 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 文件,其中包含有关图表的元数据,例如图表名称和版本、维护者信息、相关网站和搜索关键字。
- LICENSE: 图表的明文许可证。
- 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 Storage 存储桶。 stable 存储库的源代码可以在 GitHub 上的 helm/charts Git 存储库中找到。
可以使用 helm repo add
命令添加备用存储库。 一些流行的备用存储库是:
- 官方孵化器回购,其中包含尚未准备好用于稳定的图表。 incubator的使用说明可以在官方Helm图表GitHub页面上找到。
- Bitnami Helm Charts 提供了一些官方 stable 存储库中未涵盖的图表。
无论您是安装本地开发的图表,还是来自存储库的图表,您都需要针对您的特定设置进行配置。 接下来我们将研究配置。
图表配置
图表通常在其 values.yaml
文件中附带默认配置值。 某些应用程序可能使用默认值完全可部署,但您通常需要覆盖某些配置以满足您的需求。
为配置公开的值由图表的作者确定。 有些用于配置 Kubernetes 原语,有些可能会传递到底层容器来配置应用程序本身。
以下是一些示例值的片段:
值.yaml
service: type: ClusterIP port: 3306
这些是配置 Kubernetes Service 资源的选项。 您可以使用 helm inspect values chart-name
转储图表的所有可用配置值。
这些值可以通过编写您自己的 YAML 文件并在运行 helm install
时使用它来覆盖,或者通过使用 --set
标志在命令行上单独设置选项来覆盖。 您只需指定要更改默认值的那些值。
使用特定配置部署的 Helm 图表称为 release。 接下来我们将讨论发布。
发布
在安装图表的过程中,Helm 会将图表的模板与用户指定的配置和 value.yaml
中的默认值相结合。 这些被渲染到 Kubernetes 清单中,然后通过 Kubernetes API 进行部署。 这将创建一个 release,一个特定图表的特定配置和部署。
这个发布的概念很重要,因为您可能希望在集群上多次部署同一个应用程序。 例如,您可能需要多个具有不同配置的 MySQL 服务器。
您可能还希望单独升级图表的不同实例。 也许一个应用程序已经为更新的 MySQL 服务器做好了准备,而另一个应用程序还没有。 使用 Helm,您可以单独升级每个版本。
您可能会升级某个版本,因为它的图表已更新,或者因为您想要更新该版本的配置。 无论哪种方式,每次升级都会创建一个新的 版本 版本,并且 Helm 将允许您轻松回滚到以前的版本以防出现问题。
创建图表
如果您找不到正在部署的软件的现有图表,您可能需要创建自己的图表。 Helm 可以通过 helm create chart-name
输出图表目录的脚手架。 这将创建一个文件夹,其中包含我们在上面的 Charts 部分中讨论的文件和目录。
从那里,您需要在 Chart.yaml
中填写图表的元数据,并将 Kubernetes 清单文件放入 templates
目录。 然后,您需要从清单中提取相关配置变量并放入 values.yaml
,然后使用 模板系统 将它们重新包含到清单模板中。
helm
命令有许多子命令可用于帮助您测试、打包和提供图表。 更多信息请阅读Helm官方文档开发图表。
结论
在本文中,我们回顾了 Kubernetes 的包管理器 Helm。 我们概述了 Helm 架构和各个 helm
和 tiller
组件,详细介绍了 Helm 图表格式,并查看了图表存储库。 我们还研究了如何配置 Helm 图表以及如何将配置和图表组合并部署为 Kubernetes 集群上的版本。 最后,我们谈到了在没有合适的图表时创建图表的基础知识。
有关 Helm 的更多信息,请查看 官方 Helm 文档 。 要查找 Helm 的官方图表,请查看 GitHub 上的官方 helm/charts Git 存储库 。