- Helm学习指南:Kubernetes上的应用程序管理
- (美)马特·布彻 马特·法里纳 乔什·多利茨基
- 1804字
- 2025-04-08 08:52:27
2.4 安装程序包
在下一章中,我们将深入探讨如何在Helm中安装软件包的细节。不过,在本节中,我们将了解安装Helm chart的基本机制。
在Helm中安装chart至少需要两条信息:安装的名称和要安装的chart。
回想一下,在上一章中,我们区分了安装(installation)和chart。这是安装和升级期间的一个重要区别。在操作系统软件包管理器中,我们可以请求它安装一个软件。但在一个操作系统上,我们需要多次安装同一个软件包的情况极为罕见。Kubernetes集群是不同的。在Kubernetes中说“我想为应用程序A安装一个MySQL数据库,为应用程序B安装第二个MySQL数据库”是完全有意义的。即使这两个数据库的版本完全相同,配置也完全相同,为了适当地管理应用程序,我们可能希望有两个实例运行。
因此,Helm需要一种方法来区分同一chart的不同实例。因此,chart的installation是chart的一个特定实例。一个chart可能有许多installation。当我们运行helm install命令时,我们需要给它指定一个installation名和chart名。所以最基本的installation命令如下:

前面的代码将创建bitnami/drupal chart的一个实例,并将这个实例命名为mysite。
在install命令运行时,它将返回大量信息,包括有关开始使用Drupal的面向用户的说明。
在以后的helm install示例中,为了简洁起见,我们将省略返回的输出。但是,当使用Helm时,你将看到每个安装的输出。在下一章中,我们还将看到如何使用helm get命令再次查看该输出。
此时,集群中现在有一个名为mysite的实例。如果我们尝试重新运行前面的命令,就不会得到第二个实例。相反,我们会得到一个错误,因为名称mysite已经被使用:

需要进一步澄清。在Helm 2中,实例名是集群范围的。每个集群只能有一个名为mysite的实例。在Helm 3中,命名规则已经改变。现在实例名称的作用域是Kubernetes命名空间。我们可以安装两个名为mysite的实例,只要它们各自位于不同的命名空间中即可。
例如,以下内容在Helm 3中是完全合法的,尽管它会在Helm 2中引发致命错误:

这将在第一个命名空间中安装一个名为mysite的Drupal站点,在第二个命名空间中安装一个相同配置的名为mysite的实例。这一点一开始可能会让人困惑,但当我们将命名空间看作名称的前缀(prefix on a name)时,情况就更清楚了。从这个意义上说,我们有一个名为“first mysite”的网站和另一个名为“second mysite”的网站。
在整个Helm中使用命名空间标志
使用命名空间和Helm时,可以使用--namespace或-n标志指定所需的命名空间。
2.4.1 安装时的配置
在前面的示例中,我们以几种不同的方式安装了相同的chart。在所有情况下,它们的配置都是相同的。虽然使用默认配置有时是不错的,但更多的时候我们希望将自己的配置传递给chart。
许多chart允许你提供配置值。如果我们看看Drupal的Artifact Hub页面(https://oreil.ly/baxxf),就会看到一长串可配置参数。例如,我们可以通过设置drupalUsername值来配置Drupal管理员账户的用户名。
在下一章中,我们将学习如何使用helm命令获取这些信息。
有几种方法可以告诉Helm要配置哪些值。最好的方法是创建一个包含所有配置覆盖值的YAML文件。例如,我们可以创建一个文件来设置drupalUsername和drupalEmail的值:

现在我们有一个文件(按惯例命名为values.yaml),它拥有我们所有的配置。因为它在一个文件中,所以很容易复制相同的安装。你还可以将此文件签入版本控制系统,以跟踪随时间变化的值。Helm核心维护人员认为将配置值保存在YAML文件中是一种很好的做法。但是,请务必记住,如果配置文件中包含敏感信息(如口令或身份验证令牌),则应采取措施确保这些信息不会泄漏。
helm install和helm upgrade都提供了一个--values标志,它指向具有覆盖值的YAML文件:

注意,在前面的输出中,Username(用户名)现在是admin而不是user。Helm的一个很好的特性是甚至可以使用你提供的值来更新帮助文本。
可以多次指定--values标志。有些人使用此功能以便在一个文件中具有“公共”覆盖,而在另一个文件中具有特定覆盖。
第二个标志可用于向安装或升级添加单个参数。--set标志直接接受一个或多个值。它们不需要存储在YAML文件中:

这只设置了drupalUsername这一个参数。此标志使用简单的key=value格式。
配置参数可以结构化。也就是说,一个配置文件可以有多个部分。例如,Drupal chart具有特定于MariaDB数据库的配置。这些参数都分组到mariadb部分中。在前面的示例的基础上,我们可以覆盖MariaDB数据库名称,如下所示:

当使用--set标志时,子部分要复杂一些。你将需要使用虚线表示法:--set mariadb.db.name=my-database。当设置多个值时,这可能会变得冗长。
一般来说,Helm核心维护人员建议将配置存储在values.yaml文件中(注意,文件名不一定是“values”),仅在绝对必要时才使用--set。通过这种方式,你可以很容易地访问在操作期间使用的值(并且可以随着时间的推移跟踪这些值),同时还可以缩短Helm命令。使用文件还意味着不必像在命令行上设置内容时那样转义那么多字符。
在继续介绍升级之前,我们先快速了解一条最有用的Helm命令。