Kubernetes 是一种流行的容器编排系统,可以从单个容器到规模化的容器部署应用程序。其中,helm 是一种 Kubernetes 应用程序包管理工具,它是为 Kubernetes 安装的软件包提供了一种简便而统一的方式。
本文将深入探讨 helm 如何管理 Kubernetes 应用程序包,并介绍如何使用 helm 来管理基础架构和微服务部署。我们将详细讨论丰富的 helm 命令和各种配置文件,以帮助您快速上手并提高工作效率。
helm 的概述
helm 是一种命令行工具,它可以管理和安装 Kubernetes 应用程序。类似于其他 Linux 包管理器,例如 APT、yum、brew 等,helm 允许开发人员打包,并在 Kubernetes 中使用、分享、部署和管理这些软件包。helm 还提供了一套可重用的模板,以帮助您快速创建和部署 Kubernetes 应用程序。
helm 包含两个组件:
- helm 命令行客户端(helm CLI):该组件是使用 helm 的主要方式。它安装在您的计算机上,并与 Kubernetes API 进行交互,以管理 Kubernetes 应用程序包。
- Tiller:该组件作为命令行客户端的服务器端,它与 Kubernetes API 通信,以部署和管理 Kubernetes 应用程序包。然而,自helm 3.0 版本起,Tiller 已经被弃用,无需使用。
helm 有助于库存和共享 Kubernetes 应用程序,并简化了 DevOps 流程。helm 能够轻松地与 CI/CD 流程集成,并能够轻松地部署新应用程序或更新已有应用程序。
helm 的工作方式
在开始使用 helm 之前,先了解其工作原理。helm 将 Kubernetes 应用程序打包成稳定的发行包(chart),运用对应的发布(publish)文件形成文件仓库(repository), 以实现部署的再利用。 chart 是一个预打包的可重复部署单元,它包含了一组 Kubernetes 资源的定义。 chart 中还包含 chart 的元数据和模板定义。
helm 的工作流程如下:
- 编写 chart:创建一个用于打包 Kubernetes 应用程序的 Chart。
- 打包应用:使用 helm pkg 命令打包 chart,并将其保存到本地文件系统中。
- 发布 chart:使用 helm push 命令将 chart 上传到远程 Chart 仓库(repositories)中。您还可以将 chart 保存到本地 helm chart 仓库之后再部署。
- 部署 chart:在 Kubernetes 群集中使用 helm install 命令, 下载 chart 到本地并在 Kubernetes 中安装应用程序。
安装 helm
在本地机器上使用 helm 命令之前, 我们需要安装 helm CLI。您可以从 helm 官方网站上下载预构建的二进制文件,以便在本地机器上使用命令。
$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
此命令将在您的本地计算机上自动安装 helm 命令行客户端。安装好 helm 后,请确保在终端中输入 helm 命令后,能够正常打印 helm 版本。
实战操作
现在,我们将演示如何使用 helm 命令部署一个应用程序。
- 创建一个新的 chart
运行以下命令,创建一个名为 sample-chart 的新 chart:
$ helm create sample-chart
这将创建一个包含 Chart.yaml、values.yaml 和 templates 文件夹的文件夹。
- Chart.yaml 包含 chart 的元数据
- values.yaml 定义默认值(也称为值)对于将在 chart 中使用的每个变量
- templates 包含将创建 Kubernetes 资源的文件
默认情况下,templates 目录包含一个名为 deployment.yaml 的文件。该文件定义了运行容器的 Kubernetes Deployment。
- 编辑 deployment.yaml 文件
打开 deployment.yaml,修改容器映像(image)及其参数,以适合您的应用程序要求。例如,将 image: nginx 更改为 image: mynginx,以指向您的自定义 nginx 映像。您还可以更改容器的资源和环境变量。
修改后的 deployment.yaml 应如下所示:
// javascriptcn.com 代码示例 apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "sample-chart.fullname" . }} labels: {{- include "sample-chart.labels" . | nindent 4 }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: {{- include "sample-chart.selectorLabels" . | nindent 6 }} template: metadata: labels: {{- include "sample-chart.selectorLabels" . | nindent 8 }} spec: containers: - name: {{ .Chart.Name }} image: mynginx # <-- change this to your custom image ports: - containerPort: 80 env: - name: FOO value: BAR
- 编辑 values.yaml 文件
打开 values.yaml,为容器模板中使用的每个变量设置值。h赋值方法有多种, 可以在这里将其定义为静态值:
replicaCount: 3 # 三个容器副本 image: repository: nginx tag: stable pullPolicy: IfNotPresent
- 安装 chart
现在您已经准备好部署 chart 了。运行以下命令,将 chart 部署到名为 sample-chart 的 Kubernetes 名称空间:
$ helm install sample-chart sample-chart/ --namespace=sample-chart
该命令将下载 chart 和其依赖,并使用 values.yaml 定义的值为应用程序镜像和其他变量提供值,以创建 Kubernetes 资源(deployments, services)。
- 验证安装
运行以下命令,检查应用程序的状态:
$ kubectl get all -n sample-chart
该命令将打印 sample-chart 名称空间中的所有状态。
恭喜你, 如果一切顺利, 应该可以看到相关 Pod、Service、Deployment 等资源完全正常。
- 升级 chart
我们还可以使用 helm 升级 chart。假设您对您的应用程序更新了 container 的映像和其他部分,需要将这些更改部署到 Kubernetes。helm 安装时,您可以指定要使用的 chart 版本,helm 会跟踪安装的 chart 的版本。您可以将 chart 发布到 chart 仓库并升级所有应用程序的版本。
首先,编辑 values.yaml 文件,修改 image.tag 为新映像的版本:
replicaCount: 3 image: repository: nginx tag: <new version> pullPolicy: IfNotPresent
然后运行以下命令发起升级:
$ helm upgrade sample-chart sample-chart/ --namespace=sample-chart
该命令将更新该 chart 的镜像(tag)部分。
- 删除 chart
如果您不再需要该 chart,则可以使用 helm 命令从 Kubernetes 中删除 chart:
$ helm uninstall sample-chart --namespace=sample-chart
该命令将删除与您的 chart 相对应的所有 Kubernetes 资源。
总结
在本文中,我们向您介绍了 helm 工具的工作原理和使用场景。我们深入探讨了 chart 的结构和如何编辑 values.yaml 文件,以及如何使用 helm 安装、升级和删除 chart。如果您在编写应用程序包(Chart)时遇到问题,请参阅 helm 的官方文档,它提供了更详细的信息,可以帮助您更快地开始使用 helm。
helm 的出现,实现了让 Kubernetes 应用程序规范化的目标, 不过学习 helm 需要高度的抽象建模思想, 除此之外, 在维护"kubernetes + helm" 运维体系时, 有时也需要一定的管理经验。如果您从事 Kubernetes 运维工作,helm 能够大大提高您的效率, 也有助于您实现更好的 DevOps 流程.
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6583b453d2f5e1655de8830a