使用Helm

浏览 0      扫码          2019-10-27 17:16:53     码农文档      译文原文 英文原文

公告:如果您也想加入翻译队伍,或者您有相关中文文档想要贡献给大家,请联系coderdocument@163.com ,谢谢!

本指南解释了使用Helm(和Tiller)管理Kubernetes集群上的包的基础知识。它假设你已经安装了Helm客户端和Tiller服务端(通常由helm init)。

如果你只是对运行一些快速命令感兴趣,您可能希望从快速入门指南开始。本章包含了Helm命令的细节,并解释了如何使用Helm。

三个大概念

chart是一个Helm包。它包含了在Kubernetes集群中运行应用程序、工具或服务所需的所有资源定义。可以把它看作Kubernetes的Homebrew formula、一个Apt dpkg或一个Yum RPM文件。

仓库(repository)是可以收集和共享chart的地方。它类似于Perl的CPAN归档Fedora包数据库,但仓库针对的是Kubernetes包。

发布(release)是在Kubernetes集群中运行的chart的实例。一个chart通常可以多次安装到同一个集群中。每次安装它时,都会创建一个新的发布。考虑一个MySQL chart。如果希望在集群中运行两个数据库,可以安装该chart两次。每个都有自己的发布,而每个发布又有自己的发布名称

有了这些概念,我们现在可以这样解释Helm:

Helm将chart安装到Kubernetes中,为每个安装创建一个新的发布。要找到新的chart,你可以搜索Helm chart仓库

helm search:查找chart

当你第一次安装Helm时,它被预先配置为与官方的Kubernetes chart仓库进行交互。这个仓库包含许多精心策划和维护的chart。默认情况下,这个chart仓库的名称为stable

你可以运行helm search查看哪些图表可用:


   
       

如果不使用过滤器,helm search向你显示所有可用的chart。你可以使用过滤器来缩小你的搜索结果:


   
       

现在,你将只看到与过滤器匹配的结果。

为什么mariadb在列表中?因为它的包描述与MySQL相关。我们可以用 helm inspect chart进行查看:


   
       

搜索是找到可用包的好方法。一旦你找到了你想安装的软件包,你可以使用helm install来安装它。

helm install:安装chart

要安装一个新chart,使用helm install命令。最简单的形式,它只需要一个参数:chart的名称。


   
       

现在安装了mariadb chart。注意,安装chart会创建一个新的发布对象。上面的发布名称为happy-panda。(如果你想使用自己的发布名称,只需在helm install上使用--name选项即可。)

在安装期间,helm客户端将打印关于创建了哪些资源、发布的状态如何以及是否可以或应该执行其他配置步骤的有用信息。

Helm不会等到所有资源都运行之后才退出。许多chart需要大小超过600M的Docker镜像,并且可能需要很长时间才能安装到集群中。

为了跟踪发布的状态,或者重新读取配置信息,你可以使用helm status


   
       

上面显示了你的发布的当前状态。

安装之前自定义chart

按照我们这里的方式安装将只使用此chart的默认配置选项。很多时候,你需要自定义chart来使用你期望的配置。

要查看chart上哪些选项是可配置的,请使用 helm inspect values


   
       

然后可以在YAML格式的文件中覆盖这些设置,然后在安装期间传递该文件。


   
       

上面将创建一个名为user0的默认MariaDB用户,并授予该用户对新创建的user0db数据库的访问权,但将接受该chart的所有其余默认值。

在安装过程中有两种传递配置数据的方法:

  • --values 或者 -f:指定YAML文件覆盖配置项。可以指定多次,最右边的文件将优先;
  • --set 与其变种 --set-string--set-file:在命令行中指定要覆盖的配置项。

如果两者都使用,--set值将合并到具有更高优先级的 --values 值中。用--set指定的覆盖将持久化在ConfigMap中。可以通过 helm get values <release-name>查看通过--set已设置的值。通过 --set 设置的值可以执行 helm upgrade时指定 --reset-values来清除。

--set的格式和限制

--set选项接受零个或多个名称/值对。最简单的用法是这样的:--set name=value。YAML对应的是:


   
       

多个值由字符分隔。所以, --set a=b,c=d变为:


   
       

支持更复杂的表达式。例如, --set outer.inner=value被转换成:


   
       

列表可以用{}中的值表示。例如,--set name={a, b, c}转换为:


   
       

从Helm 2.5.0开始,可以使用数组索引语法访问列表项。例如: --set servers[0].port=80 转换为:


   
       

也可以通过这种方式设置多个值。--set servers[0].port=80,servers[0].host=example 转换为:


   
       

有时需要在--set行中使用特殊字符。你可以使用反斜杠来转义字符;--set name="value1\,value2"将转换为:


   
       

类似地,你也可以转义点序列,当chart使用toYaml函数解析注解、标签和节点选择器时,这可能会很方便。--set nodeSelector."kubernetes\.io/role"=master 转换为:


   
       

使用--set很难表示深度嵌套的数据结构。在设计值的格式时,推荐chart设计者在设置values.yaml 文件时考虑--set用法。

Helm将使用--set指定的某值转为整数。例如, --set foo=true , Helm将true转换为int64的值。如果需要字符串,可以使用--set的变体--set-string--set-string foo=true的结果是字符串值"true"

--set-file key=filepath--set的另一种变体。它读取文件并将其内容用作值。它的一个示例用例是将多行文本注入到值中,而不处理YAML中的缩进。假设你想创建一个包含5行JavaScript代码的特定值的brigade项目,你可以编写一个 values.yaml


   
       

由于内嵌在YAML中,因此很难使用IDE特性和测试框架等支持编写代码的功能。相反,你可以使用--set-file defaultScript=brigade.jsbrigade.js包含如下内容:


   
       

更多安装方式

helm install命令可以从几个来源进行安装:

  • chart仓库,如上所述
  • 本地chart归档文件(helm install foo-0.1.1.tgz
  • 解压的chart仓库(helm install path/to/foo
  • 一个完整URL(helm install https://example.com/charts/foo-1.2.3.tgz

helm upgradehelm rollback,升级发布,并在失败时进行恢复

当一个chart的新版本发布时,或者当你想要改变发布的配置时,你可以使用helm upgrade命令。

升级采用现有版本并根据你提供的信息进行升级。因为Kubernetes chart可能很大也很复杂,Helm试图执行侵入性最小的升级。它将只更新自上一个版本以来更改的内容。


   
       

在上面的例子中,happy-panda 发布使用相同的chart进行了升级,但是使用了一个新的YAML文件:


   
       

我们可以使用helm get values来查看新设置是否生效。


   
       

helm get命令是查看集群中某个发布的有用工具。正如我们在上面所看到的,它显示了我们从panda.yaml得到的、被部署到集群中的新值。

现在,如果在发布期间有些事情没有按照计划进行,使用 helm rollback [RELEASE] [REVISION]很容易回滚到以前的发布。

以上是我们的happy-panda的第一个发布版本。发布版本是一个增量修订。每次安装、升级或回滚发生时,修订号都增加1。第一个修订号总是1。我们可以使用helm history [RELEASE]来查看某个发布的修订号。

安装、升级、回滚的有用选项

在安装、升级、回滚期间,还可以指定几个其他有用的选项来自定义Helm的行为。请注意,这不是一个完整的命令行选项。要查看所有选项的描述,只需运行 helm <command> --help

  • --timeout:等待Kubernetes命令完成的秒数值,默认为300(5分钟)
  • --wait:等待,直到所有的pod都处于就绪状态,PVC被绑定,部署在就绪状态中有最少的pod(Desired 减去maxUnavailable),服务有一个IP地址(如果是LoadBalancer类型,则为Ingress),然后才将发布标记为成功。它将等待与--timeout值一样长的时间。如果超时,则发布将被标记为FAILED。注意:在部署将 replicas设置为1maxUnavailable不设置为0作为滚动更新策略的一部分的场景中,--wait将返回Ready,因为它满足了Ready条件下的最少Pod。
  • --no-hooks:跳过钩子执行
  • --recreate-pods(只对 upgraderollback可用) :此选项将导致重新创建所有pod(属于部署的pod除外)

helm delete:删除发布

当从集群卸载或删除一个发布时,使用helm delete命令:


   
       

这将从集群中删除发布。你可以使用helm list命令查看你目前部署的所有发布:


   
       

从上面的输出中,我们可以看到happy-panda发布被删除了。

然而,Helm总是记录发布的内容。需要查看已删除的发布吗?helm list --delete显示那些已删除的发布,和helm list --all显示所有发布(删除的和当前部署的,以及失败的发布):


   
       

因为Helm保存了已删除的发布的记录,所以发布名称不能被重用。(如果你确实需要重用发布名称,可以使用--replace选项,但它只简单地重用现有的发布并替换其资源。)

注意,因为发布是以这种方式保存的,所以你可以回滚已删除的资源,并重新激活它。

helm repo:操作仓库

到目前为止,我们只安装了来自stable仓库的chart。但是你可以配置helm使用其他仓库。Helm在helm repo 命令下提供了几个仓库工具。

你可以使用helm repo list查看配置了哪些仓库:


   
       

使用helm repo add添加一个新仓库:


   
       

由于chart仓库经常更改,在任何时候都可以通过运行helm repo update来确保helm客户端是最新的。

创建自己的chart

chart开发指南解释了如何开发自己的chart。但是你可以使用helm create命令快速入门:


   
       

现在有一个chart在 ./deis-workflow中。你可以编辑它并创建自己的模板。

在编辑chart时,可以通过运行helm lint验证其格式是否正确。

当该把chart打包发行时,你可以运行helm package命令:


   
       

这个chart现在可以很容易地通过helm install进行安装 。


   
       

归档的chart可以加载到chart仓库中。请参阅chart仓库服务器的文档以了解如何上传。

注意:stable仓库是在Helm Charts GitHub仓库中管理的。该项目接受chart源代码,并(在审计之后)为你打包这些源代码。

Tiller、命名空间和RBAC

在某些情况下,你可能希望确定Tiller的范围或将多个Tiller部署到单个集群。以下是在这些情况下操作的一些最佳实践。

  • Tiller可以安装到任何一个命名空间。默认情况下,它安装在kube-system中。你可以运行多个Tiller,只要它们在各自的命名空间中运行。
  • 限制Tiller只能安装到特定的名称空间和/或资源类型是由Kubernetes RBAC角色和角色绑定控制的。你可以通过helm init --service-account <NAME>配置Helm时向Tiller添加一个服务帐户。你可以在这里找到更多相关信息。
  • 每个TILLER实例的发布名称都是唯一的。
  • chart应该只包含存在于单个命名空间中的资源。
  • 不建议配置多个Tiller来管理同一命名空间中的资源。

总结

本章介绍了helm客户端的基本使用模式,包括searchinstallupgradedelete。它还涵盖了有用的实用命令,如helm statushelm get,和helm repo

有关这些命令的更多信息,请参阅Helm的内置帮助:helm help

在下一章中,我们将讨论chart的开发流程。

返回顶部