了解用于部署的 Helm 包管理器
学习目标
描述 Helm 包管理器,包括它的优势
识别不同的 Helm 组件
使用 Helm 打包并部署你的应用
Helm 概述
什么是 Helm?
随着基于微服务的应用不断增长,你需要创建、更新和维护运行应用所需的大量各种 Kubernetes 对象。你的新应用需要一个 Deployment 对象以及用于负载均衡流量的 Service。幸运的是,你可以把与应用相关的所有清单打包成一个单元,并一次性部署、更新和删除它们。
Helm 是 Kubernetes 的包管理器。它也是一个开源项目,隶属于云原生计算基金会(CNCF)。Helm 是一个简化 Kubernetes 应用安装和管理的工具。
你已经了解到,Deployment 可用于部署应用并管理其发布生命周期。借助 Helm,你可以把运行应用所需的所有 Kubernetes 对象(例如 Deployment、Service 等)打包成一个单元。这些包称为 Helm chart。随后你可以一次性部署、更新和删除所有这些资源。
许多 Helm chart 已经可以在 Helm Hub 中获取。你也可以创建 Helm chart 并将其发布到 Helm Hub。或者,只在你自己的环境中使用自己的 Helm chart。
Helm 组件
单击下面的按钮以了解每个组件的更多细节。
要使用 Helm,你必须在自己的机器上安装 Helm CLI。请遵循 Helm 文档中的说明。
Helm Chart
Helm chart 是预配置 Kubernetes 资源的包。一个 chart 包含运行应用所需的全部资源定义(清单)。每个 Helm Chart 都带有标准的项目布局和文件结构。
单击典型 Helm Chart 中的每个蓝色组件以了解更多:
使用 Helm 打包和部署应用
Helm CLI
借助 Helm CLI,你可以安装和管理 Helm chart。
Helm CLI 有三个主要的子命令:
helm install
使用此命令安装 chart。
helm upgrade
使用此命令将现有发布升级到 chart 的新版本。
helm delete
使用此命令删除发布。
Kyma 中的 Helm
"Kyma"项目使用 Helm。借助 Helm,你可以像在任何其他 Kubernetes 环境中一样,在 Kyma 集群中创建和安装 chart。
Helm 中的模板
与你在上一课中使用的部署清单不同,Helm chart 使用模板。这些模板与清单本身相同。唯一的区别是模板不是静态的。它们可以被参数化。这意味着你可以在模板中使用变量。这些变量可以在 values.yaml 文件中定义。使用变量使得同一组模板可以复用于不同场景,例如开发、测试和生产,或者无需修改模板本身就能更改应用的配置。
要查看关于如何使用 Helm 的完整指南并探索其全部功能,请访问 Helm 文档。
Helm chart 示例
让我们看一个 Helm chart 示例。我们希望使用 Helm 来创建在上一课中创建的 hello-kyma 应用。你也可以在GitHub 仓库中访问该 chart。
你可以通过运行以下命令为你的应用创建 Helm chart:helm create hello-kyma-chart
该命令会创建一个名为 hello-kyma-chart 的目录,其中包含示例文件,作为你 chart 的起点。不过,适用于我们应用的简单 chart 会是这样的:

Chart.yaml 文件包含有关 chart 的信息,例如名称、版本、描述等。
apiVersion: v2
name: hello-kyma-chart
description: A Helm chart for the Hello Kyma example application
# A chart can be either an 'application' or a 'library' chart.
type: application
# This is the chart version.
version: 0.1.0
# This is the version number of the application being deployed.
appVersion: "1.0.0"
values.yaml 文件包含 chart 的默认配置值。这些值可以在模板中使用。
replicaCount: 1
image:
tag: "1.0.0"
templates/deployment.yaml 文件包含 Kubernetes deployment 的定义。
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: hello-kyma
image: ghcr.io/sap-samples/kyma-runtime-learning-journey/hello-kyma:{{ .Chart.AppVersion }}
ports:
- containerPort: 8080
在将 chart 发送到集群之前,你可以在 helm chart 文件夹内运行以下命令对它进行 dry run。这样你就可以在不实际将其发送到集群的情况下查看 chart 的输出。
helm template hello-kyma .
如果你运行该命令,你会注意到名称 hello-kyma 会被用于变量 {{ .Release.Name }}。
总结
在本课中,你了解了 Helm 以及如何使用它创建自定义 chart。你还了解了 Helm chart 的结构以及如何在 Helm chart 中使用模板。
有关用于部署的 Helm 包管理器的延伸阅读
Helm documentation
Helm Values
Helm Chart Template Guide