Helm 是一款功能强大的工具,可简化 Kubernetes 上应用程序的部署和管理。它充当Kubernetes的软件包管理器,就像 Linux 的 apt 或 yum 一样,允许用户定义、安装和升级最复杂的 Kubernetes 应用程序。借助 Helm,系统管理员和开发人员可以简化工作流程、降低复杂性并确保部署之间的一致性。
管理大规模应用程序是一项重大挑战。Kubernetes 已成为容器编排的事实标准,但它也存在一些复杂性。Helm 通过提供一种将 Kubernetes 资源捆绑到单个包中的方法来解决这些问题,从而更轻松地共享和部署应用程序。本指南旨在向您介绍Helm,涵盖其安装、关键概念和实际用法,以便您可以开始在 Kubernetes 环境中利用其功能。
什么是 Helm?
Helm是一个开源工具,旨在简化 Kubernetes 集群中应用程序的部署和管理。它充当 Kubernetes 的包管理器,提供一种标准化的方式来管理复杂的应用程序和服务。
Helm 的定义和目的
Helm 使用“图表”(即预先配置的 Kubernetes 资源包)简化了 Kubernetes 应用程序的部署。这些图表使用户能够使用单个命令部署应用程序,从而确保一致性并降低出错风险。
Helm 的主要特点
- 包管理:Helm 允许用户使用图表定义、安装和升级 Kubernetes 应用程序,这些图表可以通过 Helm 存储库进行存储和共享。
- 模板:Helm 使用模板来定义 Kubernetes 清单,从而轻松定制部署。
- 版本控制:Helm 图表支持版本控制,使用户能够跟踪更改并在需要时回滚到以前的版本。
- 依赖管理:图表可以声明依赖关系,确保所有必需的服务都已正确安装和配置。
安装 Helm
安装 Helm 的过程很简单,可以在各种平台上完成,包括 Linux、macOS 和 Windows。以下是如何在系统上开始使用 Helm。
系统要求
在安装 Helm 之前,请确保您满足以下先决条件:
– Kubernetes 集群(建议使用 1.16 或更高版本)
– 安装并配置 kubectl 以与 Kubernetes 集群进行通信
– curl 或 wget 用于下载 Helm
不同平台的安装步骤
以下所有步骤,无论哪个操作,都需要在终端中执行。
对于 Linux 和 macOS,它是终端;对于 Windows,它是 PowerShell。
Linux
- 下载 Helm:
在终端中运行此命令,从其官方 GitHub 存储库下载 helm 安装脚本:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
- 运行安装脚本:
chmod 700 get_helm.sh
./get_helm.sh
macOS
- 使用 Homebrew:
打开终端并运行此命令以使用 Homebrew 安装 helm:
brew install helm
- 或者,下载二进制文件:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
视窗
- 使用 Chocolatey:
choco install kubernetes-helm
- 使用 Scoop:
scoop install helm
验证安装
安装 Helm 后,请使用终端中的以下命令检查版本以验证安装:
helm version
您应该看到类似以下内容的输出:
version.BuildInfo{Version:"v3.x.x", GitCommit:"xxxxx", GitTreeState:"clean", GoVersion:"go1.xx.x"}
了解 Helm Charts
Helm 图表可能是最重要的 Helm 功能。Helm 图表是描述一组相关 Kubernetes 资源的文件集合。了解 Helm 图表的结构和关键组件对于有效使用 Helm 管理应用程序非常重要。
Helm Chart 的结构
Helm 图表通常遵循标准目录结构,其中包括几个关键文件和目录:
mychart/
Chart.yaml
values.yaml
charts/
templates/
关键组件
- Chart.yaml:这是 Helm chart 的主文件。它包含有关 chart 的元数据,例如其名称、版本和描述。
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
version: 0.1.0
- values.yaml:此文件包含图表的默认配置值。用户可以在部署图表时覆盖这些值。
replicaCount: 1
image:
repository: myimage
tag: latest
- charts/:此目录包含图表的所有依赖项。依赖项是 Helm 图表本身,该图表依赖于它。
- templates/:此目录包含 Kubernetes 清单模板。这些模板根据 values.yaml 中提供的值以及任何其他用户指定的值呈现到 Kubernetes 清单中。
部署模板示例(“deployment.yaml”):
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-myapp
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}-myapp
template:
metadata:
labels:
app: {{ .Release.Name }}-myapp
spec:
containers:
- name: myapp
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
了解这些组件可让您有效地创建和自定义 Helm 图表。图表为在 Kubernetes 上部署应用程序提供了一种可重复使用、可配置和可共享的包格式。通过使用模板和值,Helm 图表可以适应各种环境和要求,使其成为 Kubernetes 管理工具包中的强大工具。
如何创建你的第一个 Helm Chart
创建第一个 Helm 图表是学习如何有效管理 Kubernetes 应用程序的激动人心的一步。本部分将指导您完成创建基本 Helm 图表和部署简单应用程序的过程。
循序渐进指南
- 创建新的 Helm Chart
使用 `helm create` 命令来搭建新的图表:
helm create mychart
该命令生成一个包含默认文件和目录的目录结构,包括“Chart.yaml”、“values.yaml”和“templates”目录。
- 自定义Chart.yaml
打开“Chart.yaml”文件并使用适合您的图表的元数据进行更新:
apiVersion: v2
name: mychart
description: A Helm chart for a simple Kubernetes application
version: 0.1.0
- 编辑 values.yaml
修改“values.yaml”文件以设置图表的默认值。例如:
replicaCount: 2
image:
repository: nginx
tag: stable
- 在 templates/ 中创建 Kubernetes 清单
在`templates`目录中,创建一个部署模板(`deployment.yaml`):
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-nginx
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}-nginx
template:
metadata:
labels:
app: {{ .Release.Name }}-nginx
spec:
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
- 打包图表
图表准备好后,使用“helm package”命令将其打包:
helm package mychart
此命令创建一个“.tgz”文件,它是图表的打包版本。
示例项目
为了说明,让我们为 Nginx Web 服务器创建一个 Helm 图表:
- 创建图表:
helm create nginx-chart
- 更新 Chart.yaml:
apiVersion: v2
name: nginx-chart
description: A Helm chart for Nginx
version: 0.1.0
- 编辑values.yaml:
replicaCount: 2
image:
repository: nginx
tag: stable
- 在 templates/ 中创建 deploy.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-nginx
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}-nginx
template:
metadata:
labels:
app: {{ .Release.Name }}-nginx
spec:
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
- 部署图表:
helm install my-nginx nginx-chart
使用 Helm 管理应用程序
Helm 不仅简化了在 Kubernetes 上部署应用程序的过程,还使管理这些应用程序变得更加容易。本章介绍如何使用 Helm 安装、升级、回滚和管理应用程序版本。
使用 Helm 安装应用程序
要使用 Helm 图表安装应用程序,请使用“helm install”命令,后跟发布名称和图表路径或名称:
helm install my-release mychart/
– `my-release` 是你给这个安装实例起的名字。
– `mychart/` 是您想要安装的图表的路径。
例如安装上一章创建的“nginx-chart”:
helm install my-nginx nginx-chart/
使用 Helm 升级应用程序
要将现有版本升级为图表的新版本或更新配置值,请使用“helm upgrade”命令:
helm upgrade my-release mychart/
您还可以提供一个新的“values.yaml”文件或直接在命令中指定新值:
helm upgrade my-release mychart/ --values new_values.yaml
或者
helm upgrade my-release mychart/ --set replicaCount=3
回滚应用程序
如果升级出现问题,您可以使用“helm rollback”命令轻松回滚到以前的版本:
helm rollback my-release 1
在此命令中,“1” 表示您要回滚到的修订版本号。Helm 会保留发布历史记录,允许您恢复到任何以前的状态。
使用 Helm 管理应用程序发布
Helm 提供了几个命令来帮助管理和查看有关发布的信息:
- 列出所有版本:
helm list
- 获取有关特定版本的详细信息:
helm status my-release
- 卸载一个版本:
helm uninstall my-release
使用这些命令,您可以控制应用程序的生命周期,确保部署顺利且易于管理。 Helm 的强大功能简化了维护应用程序的过程,使处理复杂的 Kubernetes 环境变得更加容易。
Helm 存储库
Helm 存储库对于共享和分发 Helm 图表非常重要。Helm 存储库是一个简单的 HTTP 服务器,其中包含打包的图表和索引文件。使用 Helm 存储库,您可以查找和使用其他人创建的图表,也可以与社区分享您自己的图表。
添加和使用 Helm 存储库
Helm 附带一个名为 Helm Hub 的默认存储库,其中聚合了来自各种来源的图表。但是,您可以添加其他存储库以访问更广泛的图表。
- 添加 Helm 存储库:
使用 `helm repo add` 命令添加新的存储库:
helm repo add stable https://charts.helm.sh/stable
在这个例子中,我们添加了包含许多流行图表的稳定存储库。
- 更新存储库:
添加存储库后,更新它们以获取最新的图表列表:
helm repo update
- 搜索图表:
使用“helm search repo”命令在添加的存储库中查找图表:
helm search repo nginx
此命令在添加的存储库中搜索与 Nginx 相关的所有图表。
使用存储库中的图表
添加存储库并找到要使用的图表后,安装它就很简单了。例如,要从稳定存储库安装 Nginx 图表:
helm install my-nginx stable/nginx
此命令使用默认值安装 Nginx 图表。您可以通过提供自己的值文件或使用“–set”标志覆盖特定值来自定义安装。
结论
Helm 是一款功能强大的工具,它利用图表的概念简化了 Kubernetes 应用程序的管理,图表将多个 Kubernetes 资源捆绑到一个包中。通过使用 Helm,开发人员和系统管理员可以更高效、更一致地部署、升级和管理应用程序。
在本指南中,我们介绍了 Helm 的基本方面,从了解它是什么以及如何安装它,到创建自己的 Helm 图表并使用它们来管理应用程序。我们还探讨了如何利用 Helm 存储库来查找和部署各种预配置的图表,从而进一步简化 Kubernetes 环境的管理。