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 存储库。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
缓存 Kubernetes 应用服务中间件
k8s学习--helm的详细解释及安装和常用命令
k8s学习--helm的详细解释及安装和常用命令
k8s学习--helm的详细解释及安装和常用命令
|
2月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
285 0
|
4月前
|
Kubernetes 容器
Kubernetes(K8S) helm chart
Kubernetes(K8S) helm chart
38 1
|
4月前
|
Kubernetes Linux Docker
Kubernetes(K8S) helm 安装
Kubernetes(K8S) helm 安装
109 1
|
5月前
|
存储 Linux 数据库
k8s-dashboard、helm
k8s-dashboard、helm
112 1
|
4月前
|
Kubernetes 容器
在K8S中,helm是什么?如何使用?
在K8S中,helm是什么?如何使用?
|
4月前
|
运维 Kubernetes Go
在k8S中,Helm优缺点是什么?
在k8S中,Helm优缺点是什么?
|
7月前
|
Kubernetes NoSQL 应用服务中间件
k8s-Helm包管理器
k8s-Helm包管理器
102 1
k8s-Helm包管理器
|
7月前
|
Kubernetes 关系型数据库 数据库
Kubernetes Helm
Kubernetes Helm
146 0
Kubernetes Helm
|
9天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
下一篇
DataWorks