发布于 2026-01-06 7 阅读
0

6 分钟 HELM 简介

6 分钟 HELM 简介

简化 Kubernetes 应用管理

图片来自pexels.com图片来自pexels.com

在为一个客户项目完成了为期四个月的工作后,我意识到需要将项目中的“原始”Kubernetes YAML 文件完全迁移到 Helm Charts,以便他人阅读,也方便自己更好地学习。这篇文章是我之前发布的Kubernetes 八分钟入门教程
的精简版,如果您还不熟悉 Kubernetes 的基本概念,请务必先阅读那篇教程。

太长不看

您可以通过简单的命令在 K8S 集群上安装依赖项和专有软件:helm install https://dev.to/prodopsio/an-8-minute-introduction-to-kubernetes-1oi/mysql,有数百个像这样的可用安装示例,但您也可以使用自己的产品/服务执行此操作!


什么是 HELM?

  1. 舵手或‘掌舵人’是指驾驶船舶、帆船、潜艇、其他类型海事船只或航天器的人。”——维基百科

  2. “Helm 是 Kubernetes 的包管理器;它是查找、共享和使用专为 Kubernetes 构建的软件的最佳方式。” — Helm.sh

我们为什么需要它?

我曾多次问自己一个问题,试图理解这个神奇的安装程序是如何改善我的 Kubernetes 工作体验的。
其实,Helm 可以让你获取、部署和管理应用程序的生命周期,包括第三方产品和你自己开发的应用程序。

无需再维护描述 Pod、副本集、服务、RBAC 设置等的杂乱无章的 YAML 文件(或冗长的文件)。Helm 提供了一种结构和约定,用于定义一个软件包,该软件包定义了一个 YAML 层templates和一个用于修改模板的层values。值会被注入到模板中,从而实现配置分离,并定义允许更改的位置。整个软件包被称为“ Helm Chart ”。

本质上,您需要创建结构化的应用程序包,其中包含在 Kubernetes 集群上运行所需的一切;包括应用程序所需的依赖项。


Helm 是一个命令行界面 (CLI),Tiller 是它的后端。

实际上,Helm 是一个命令行工具,它与名为“Tiller”的后端服务器进行交互。Tiller 通常通过发送命令进行安装helm init,并驻留在kube-system命名空间中(除非另有指示)。它负责部署 Helm 请求的 Chart。

当安装 Chart 时,Tiller 会创建一个“版本”并开始跟踪其变更。这样,Helm 不仅参与安装,而且还是一个真正的部署工具,它使用 Chart 版本及其修订来管理集群中应用程序的生命周期。


舵概念 |图表

Helm 使用 Charts 来打包应用程序部署、运行和扩展所需的所有 Kubernetes 组件。它还用于定义依赖项,以及更新和维护配置。

按照约定,图表根目录只能包含一个文件Chart.yaml
它可以选择性地(如果您使用 `helm create` 命令,则默认情况下会包含)包含一些其他组件,我稍后会详细介绍。但首先,以下是一个典型的图表结构:

    ├── Chart.yaml
    ├── templates
    │   ├── service.yaml
    │   └── replicaset.yaml
    ├── charts
    │   ├── nginx-ingress-1.1.2.tgz
    ├── requirements.lock
    ├── requirements.yaml
    └── values.yaml
Enter fullscreen mode Exit fullscreen mode

在这个图表(我们称之为“web-UI”)中,有 `<template>`Service和`<template>` 模板,它们会在 Helm 安装后使用列表底部的文件ReplicaSet创建。 此外,web-UI 图表需要 Nginx 才能运行,因此 Nginx 会作为 ` <directory> ` 目录下的 ` <dependency>` 文件出现。` <dependency>` 文件描述了实际的需求,并在其中列出了 Nginx。`<dependency>` 文件也是 `<pack>` 的一部分,它会在 Helm 使用 `helm dependency update` 命令安装依赖项时创建。values.yaml
subchartchartsrequirements.yaml

AChart.yaml是软件包的描述,实际上也是其中唯一必需的文件,只有三个必需条目:apiVersionnameversion。以下是一个示例:(您可以在此处
的图表中找到完整的选项和条目列表。)

    apiVersion: v1
    name: drone
    version: 1.0.0
Enter fullscreen mode Exit fullscreen mode

模板

模板是图表中的一个可选子目录。
它们将 Kubernetes 组件(例如 Service、ReplicaSet、Deployment 等)转换为Go 模板格式,以便后续进行值匹配。
让我们来看一个部分模板示例:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: {{ .Values.name }}
      labels:
        app: {{ .Values.name }}
        somelabel: {{ .Values.labels.somelabelkey }}
Enter fullscreen mode Exit fullscreen mode

价值观

值在 values.yaml 文件中描述,该文件必须是一个 YAML 结构,其中包含与模板匹配的值。以上述模板为例,匹配的 values 文件应如下所示:

    name: web-ui
    labels:
      somelabelkey: somelabelvalue
Enter fullscreen mode Exit fullscreen mode

子图表

子图(也称为依赖项)是当前图表所必需的图表。
您可以将其视为另一种应用程序打包方式,例如,如果我的后端需要 Redis 缓存才能运行,则可以
使用子图进行设置。子图的另一种用途是将其视为一种继承机制,允许获取带有模板的标准图表,并将其用作多个父图表的子图表,从而为这些父图表提供相应的值。


Helm概念 |仓库

Helm Charts 存放和维护在仓库中。本质上,它们是一组以代码形式存储的模板和配置值(有时会打包成一个.tar.gz文件)。
默认情况下,当你运行 `helm install stable/redis` 命令时,Helm 会连接到GitHub 上的 Helm/Charts 仓库,并在 stable 分支下进行搜索。

访问此仓库,您还会找到孵化器子目录,其中提供了尚未标记为生产就绪(稳定版)的孵化版 Chart,您可以在这里获取并安装它们。但这并不意味着您不能使用它们;您可以尝试在开发集群中引入并使用它们。Helm 社区严格遵循语义化版本控制(sem-ver)规范,即使是最小的更改也会创建一个新的 Chart 版本。您可以放心,如果远程 Chart 的特定版本运行正常,它绝不会突然出现故障。

使用不同存储库的一个绝佳例子是 Elastic 的 ElasticSearch Chart,它以前是由该公司在 Helm/Charts 存储库中维护的。

Elastic 已决定将其产品迁移到 Helm 代码库,要获取最新的官方 Chart,您现在可以add通过以下方式将他们的代码库迁移到 Helm:
helm repo add elastic https://helm.elastic.co,
然后:
helm install --name elasticsearch elastic/elasticsearch


Helm 概念 |发布

可以将发布版本视为一种用于跟踪 Kubernetes 集群上已安装应用程序的机制;当 Helm 安装应用程序时,就会创建一个发布版本。您可以为同一产品(例如 Redis)创建不同的安装版本,并在集群中创建和跟踪两个不同的发布版本。

可以使用 `helm ls` 命令跟踪版本发布,每个版本都有一个“修订版”(revision),这是 Helm 版本控制术语;如果某个版本进行了更新,例如,为 Redis 版本增加了内存,则修订版号会递增。Helm 允许回滚到特定修订版,因此它实际上可以作为部署管理器和生产状态处理器。


TLS

Tiller 和 Helm 需要一种通信方式。默认情况下,这种连接安全性不高,这意味着如果其中一个端点被攻破或被攻破的组件可以访问,那么流量就可能被读取和分析。除了讨论系统间通信不安全所带来的实际攻击面之外,我们还可以使用自动生成的证书轻松创建安全的 TLS 连接。为此,我们提供了一个脚本,它将引导您完成整个过程,并且可以部署在任何地方。


贡献

你可能会遇到(就像我一样)官方图表中新增的功能或特性需求github.com/helm/charts,这很可能是一个 bug(孵化图表出现这种情况并不罕见)。由于 Helm 及其图表都是拥有数百名贡献者的开源项目,因此它们非常活跃。你可以修改所需的图表并提交 PR,如果所有需求都已提出并满足,团队会在几天内批准更改。

虽然这个过程相当繁琐(我们应该为此感到庆幸),但修改意见会很快得到审核和批准或否决。阅读更多关于如何为项目做贡献的信息;请注意,如果您只是进行一些小的修改,那么文档的大部分内容对您来说并不适用,因为它概述的是新图表的要求。


就是这样。

我希望你现在已经了解了 Helm 以及它为何如此强大。这只是一个入门介绍,想要真正学习和“感受”它,就必须进行大量的实践操作,例如部署第三方产品和构建自己的 Helm Chart。

我叫奥默,是ProdOps的一名工程师。ProdOps是一家全球咨询公司,我们通过践行DevOps文化,以可靠、安全、简洁的方式交付软件。欢迎在下方评论区留言,或者直接在Twitter上关注我@omergsr 如果您喜欢这篇文章,请点赞,这将有助于我更好地创作。

文章来源:https://dev.to/prodopsio/a-6-minute-introduction-to-helm-bc3