Helm 简介:Kubernetes 的包管理器

简介: Helm 简介:Kubernetes 的包管理器

本文介绍了Helm,一个简化Kubernetes应用程序部署的软件包管理器,包括其工作原理、charts的使用、配置和部署流程,以及创建自定义charts的方法。

简介

将应用程序部署到 Kubernetes(一个功能强大且流行的容器编排系统)可能会很复杂。设置单个应用程序可能涉及创建多个相互依赖的 Kubernetes 资源,例如 pods、services、deployments 和 replicasets,每个资源都需要编写详细的 YAML 清单文件。

Helm 是 Kubernetes 的一个软件包管理器,允许开发人员和运维人员更轻松地将应用程序和服务打包、配置和部署到 Kubernetes 集群上。

Helm 现在是一个官方的 Kubernetes 项目,并且是云原生计算基金会的一部分,该基金会是一个支持 Kubernetes 生态系统内外的开源项目的非营利组织。

在本文中,我们将概述 Helm 及其使用的各种抽象,以简化将应用程序部署到 Kubernetes。如果您对 Kubernetes 还不熟悉,建议先阅读《Kubernetes 简介》以熟悉基本概念。

如果您正在寻找托管的 Kubernetes 主机服务,请查看我们为增长而构建的简单、托管的 Kubernetes 服务。

Helm 概述

几乎每种编程语言和操作系统都有自己的软件包管理器,以帮助安装和维护软件。Helm 提供了与许多您可能已经熟悉的软件包管理器(如 Debian 的 apt 或 Python 的 pip)相同的基本功能集。

Helm 可以:

  • 安装软件。
  • 自动安装软件依赖项。
  • 升级软件。
  • 配置软件部署。
  • 从存储库获取软件包。

Helm 通过以下组件提供这些功能:

  • 一个命令行工具 helm,它为所有 Helm 功能提供用户界面。
  • 一个伴随的服务器组件 tiller,它运行在您的 Kubernetes 集群上,监听来自 helm 的命令,并处理集群上软件发布的配置和部署。
  • Helm 打包格式,称为 charts
  • 一个官方的精选 charts 存储库,其中包含流行的开源软件项目的预打包 charts。

接下来我们将更详细地研究 charts 格式。

Charts

Helm 软件包称为 charts,它们由一些 YAML 配置文件和一些模板组成,这些模板被渲染为 Kubernetes 清单文件。以下是 chart 的基本目录结构:

package-name/
  charts/
  templates/
  Chart.yaml
  LICENSE
  README.md
  requirements.yaml
  values.yaml

这些目录和文件具有以下功能:

  • charts/: 可以将手动管理的 chart 依赖项放在此目录中,尽管通常最好使用 requirements.yaml 动态链接依赖项。
  • templates/: 此目录包含模板文件,这些文件与配置值(来自 values.yaml 和命令行)组合在一起,并渲染为 Kubernetes 清单。模板使用 Go 编程语言的模板格式。
  • Chart.yaml: 一个包含有关 chart 的元数据的 YAML 文件,例如 chart 名称和版本、维护者信息、相关网站和搜索关键字。
  • LICENSE: chart 的纯文本许可证。
  • README.md: 包含 chart 用户信息的自述文件。
  • requirements.yaml: 列出 chart 依赖项的 YAML 文件。
  • values.yaml: chart 的默认配置值的 YAML 文件。

helm 命令可以从本地目录安装 chart,也可以从打包成 .tar.gz 格式的此目录结构自动下载并安装 chart。这些打包的 charts 也可以从 chart 存储库或 repos 自动下载并安装。

接下来我们将看一下 chart 存储库。

Chart 存储库

Helm chart 存储库是一个简单的 HTTP 站点,提供 index.yaml 文件和 .tar.gz 打包的 charts。helm 命令有可用的子命令来帮助打包 charts 并创建所需的 index.yaml 文件。这些文件可以由任何 Web 服务器、对象存储服务或 GitHub Pages 等静态站点主机提供。

Helm 预先配置了一个名为 stable 的默认 chart 存储库。此存储库指向 https://kubernetes-charts.storage.googleapis.com 上的 Google 存储桶。stable 存储库的源代码可以在 GitHub 上的 helm/charts Git 存储库中找到。

可以使用 helm repo add 命令添加其他存储库。一些流行的备用存储库包括:

  • 官方的 incubator 存储库,其中包含尚未准备好用于 stable 的 charts。有关使用 incubator 的说明可以在官方 Helm charts GitHub 页面上找到。
  • Bitnami Helm Charts,提供一些在官方 stable 存储库中未涵盖的 charts。

无论是安装您本地开发的 chart,还是从存储库中安装 chart,您都需要为您的特定设置进行配置。接下来我们将研究配置。

Chart 配置

chart 通常在其 values.yaml 文件中具有默认配置值。一些应用程序可能可以使用默认值完全部署,但通常您需要覆盖一些配置以满足您的需求。

可以配置的值由 chart 的作者确定。有些用于配置 Kubernetes 原语,有些可能传递到底层容器以配置应用程序本身。

以下是一些示例值的片段:

service:
  type: ClusterIP
  port: 3306

这些是用于配置 Kubernetes Service 资源的选项。您可以使用 helm inspect values chart-name 来转储 chart 的所有可用配置值。

这些值可以通过编写自己的 YAML 文件并在运行 helm install 时使用它们来进行覆盖,也可以通过使用 --set 标志在命令行上单独设置选项来进行覆盖。您只需要指定您想要从默认值更改的那些值。

使用特定配置部署的 Helm chart 称为 release。接下来我们将讨论发布。

发布版本

在安装图表时,Helm 将图表的模板与用户指定的配置和values.yaml中的默认配置合并。这些被渲染成 Kubernetes 清单,然后通过 Kubernetes API 部署。这样就创建了一个 发布版本,即特定图表的特定配置和部署。

发布版本的概念很重要,因为您可能希望在集群上部署同一个应用程序多次。例如,您可能需要具有不同配置的多个 MySQL 服务器。

您可能还希望单独升级图表的不同实例。也许一个应用程序准备好升级 MySQL 服务器,但另一个应用程序没有准备好。使用 Helm,您可以单独升级每个发布版本。

您可能会升级一个发布版本,因为其图表已更新,或者因为您想要更新发布版本的配置。无论哪种方式,每次升级都会创建发布版本的新 修订版本,并且 Helm 将允许您轻松回滚到以前的修订版本,以防出现问题。

创建图表

如果找不到要部署的软件的现有图表,您可能希望创建自己的图表。Helm 可以使用 helm create chart-name 命令输出图表目录的脚手架。这将创建一个包含我们在上面的图表部分中讨论的文件和目录的文件夹。

然后,您需要在 Chart.yaml 中填写图表的元数据,并将 Kubernetes 清单文件放入 templates 目录中。然后,您需要从清单中提取相关配置变量,并将其放入 values.yaml 中,然后再使用模板系统将其包含回清单模板中。

helm 命令有许多可用的子命令,可帮助您测试、打包和提供图表。有关更多信息,请阅读有关开发图表的官方 Helm 文档。

结论

在本文中,我们回顾了 Helm,Kubernetes 的包管理器。我们概述了 Helm 架构和各个 helmtiller 组件,详细介绍了 Helm 图表格式,并查看了图表存储库。我们还深入探讨了如何配置 Helm 图表以及如何将配置和图表组合并部署为 Kubernetes 集群上的发布版本。最后,我们简要介绍了在没有合适图表可用时创建图表的基础知识。

有关 Helm 的更多信息,请查看官方 Helm 文档。要找到 Helm 的官方图表,请查看 GitHub 上的官方 helm/charts Git 存储库。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
11月前
|
缓存 Kubernetes 应用服务中间件
k8s学习--helm的详细解释及安装和常用命令
k8s学习--helm的详细解释及安装和常用命令
372 0
k8s学习--helm的详细解释及安装和常用命令
|
11月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
927 0
|
Kubernetes 容器
Kubernetes(K8S) helm chart
Kubernetes(K8S) helm chart
105 1
|
Kubernetes Linux Docker
Kubernetes(K8S) helm 安装
Kubernetes(K8S) helm 安装
389 1
|
存储 Linux 数据库
k8s-dashboard、helm
k8s-dashboard、helm
516 1
|
Kubernetes NoSQL 应用服务中间件
k8s-Helm包管理器
k8s-Helm包管理器
196 1
k8s-Helm包管理器
|
Kubernetes 容器
在K8S中,helm是什么?如何使用?
在K8S中,helm是什么?如何使用?
|
运维 Kubernetes Go
在k8S中,Helm优缺点是什么?
在k8S中,Helm优缺点是什么?
|
Kubernetes 关系型数据库 数据库
Kubernetes Helm
Kubernetes Helm
262 0
Kubernetes Helm
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
154 9

推荐镜像

更多