news 2026/7/9 23:47:35

Helm Chart 是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Helm Chart 是什么?

Helm Chart 是什么?

文章目录

  • Helm Chart 是什么?
      • 一、Helm 与 Helm Chart 是什么?
      • 二、为什么需要 Helm Chart?
      • 三、Helm Chart 的核心结构
      • 四、Helm 的核心概念与工作流程
      • 五、如何使用 Helm Chart?
      • 六、总结:Helm Chart 的价值

本文是一篇关于Helm Chart的详细介绍,涵盖其概念、核心组件、工作原理以及使用价值。

一、Helm 与 Helm Chart 是什么?

首先,我们需要分清 Helm 和 Helm Chart。

  • Helm: 是 Kubernetes 的包管理器。你可以把它类比为 Ubuntu 的apt、CentOS 的yum或 Node.js 的npm。它的主要作用是简化在 Kubernetes 集群上查找、共享、安装、升级和管理应用程序的过程。
  • Helm Chart: 是 Helm 使用的打包格式。一个 Chart 就是一个包含了在 Kubernetes 上运行一个应用、工具或服务所需的所有资源定义文件的集合。你可以把它想象成一个“软件包”,就像.deb.rpm或 Docker 镜像一样,但它是专门为 Kubernetes 环境设计的。

简单来说:Helm 是工具,Chart 是打包好的应用。

二、为什么需要 Helm Chart?

在 Kubernetes 上部署一个简单的应用(例如一个 Nginx Web 服务器)可能只需要几个 YAML 文件(Deployment, Service)。但是,部署一个复杂的微服务应用(例如包含前端、后端、数据库、缓存、配置等)可能需要几十个甚至上百个 YAML 文件。

传统方式(kubectl apply -f)的痛点:

  1. 管理繁琐:需要手动维护大量 YAML 文件。
  2. 缺乏复用性:为不同环境(开发、测试、生产)部署时,需要复制并修改大量配置。
  3. 发布流程复杂:升级、回滚操作困难,需要记录和管理每个资源的版本。
  4. 依赖管理:如果应用依赖其他服务(如 Redis、MySQL),需要手动确保这些依赖先被部署。

Helm Chart 的解决方案:

  1. 打包和复用:将所有相关资源打包成一个 Chart,便于分享和版本控制。
  2. 模板化配置:通过 Go 模板语言,将需要动态变化的配置(如镜像标签、副本数、服务端口)提取为变量。
  3. 参数化部署:通过一个中心化的values.yaml文件,可以为不同环境提供不同的配置值,而无需修改模板本身。
  4. 生命周期管理:Helm 提供了installupgraderollbackuninstall等完整命令,方便管理应用的整个生命周期。
  5. 依赖管理:可以在 Chart 中声明对其他 Charts 的依赖,Helm 会帮你自动安装它们。

三、Helm Chart 的核心结构

一个典型的 Helm Chart 目录结构如下:

my-awesome-app-chart/ ├── Chart.yaml # 【必需】Chart 的元数据文件(名称、版本、依赖等) ├── values.yaml # 【必需】Chart 的默认配置值 ├── templates/ # 【必需】模板文件目录,包含所有 Kubernetes 资源 YAML 模板 │ ├── deployment.yaml │ ├── service.yaml │ ├── configmap.yaml │ └── ingress.yaml ├── charts/ # 【可选】存放本 Chart 依赖的其他子 Charts ├── README.md # 【可选】使用说明 └── crds/ # 【可选】自定义资源定义文件

关键文件详解:

  1. Chart.yaml:

    • 描述 Chart 自身的元信息。
    • 包含字段:apiVersion(Chart API 版本)、name(Chart 名称)、version(遵循语义化版本)、appVersion(所打包应用的版本)、descriptiondependencies(依赖列表)等。
  2. values.yaml:

    • 定义 Chart 中模板可以使用的默认配置值
    • 例如:replicaCount: 2image.repository: nginximage.tag: "latest"
    • 用户可以通过自定义的values.yaml文件或命令行参数(--set)来覆盖这些默认值。
  3. templates/目录:

    • 这是 Chart 的“引擎室”。里面的文件是标准的 Kubernetes YAML 资源清单,但使用了Go 模板语言进行增强。

    • 模板中可以使用变量、函数和流程控制语句。

    • 示例 (templates/deployment.yaml片段):

      apiVersion:apps/v1kind:Deploymentmetadata:name:{{.Release.Name}}-{{.Chart.Name}}spec:replicas:{{.Values.replicaCount}}template:spec:containers:-name:{{.Chart.Name}}image:"{{ .Values.image.repository }}:{{ .Values.image.tag }}"
      • {{ .Release.Name }}: 发布名称,由用户helm install [RELEASE_NAME]时指定。
      • {{ .Chart.Name }}: 来自Chart.yaml的名称。
      • {{ .Values.replicaCount }}: 来自values.yaml或用户覆盖的值。

四、Helm 的核心概念与工作流程

  • Chart: 如上所述,是应用包。
  • Release: 是 Chart 在 Kubernetes 集群中的一个运行实例。同一个 Chart 可以安装多次,每次安装都会创建一个新的 Release(例如:为团队 A 和团队 B 分别安装myappchart,会创建两个独立的 Release:team-a-myappteam-b-myapp)。
  • Repository(Repo): Chart 的存储库,一个 HTTP 服务器,存放并共享 Charts。类似于 Docker Hub。

基本工作流程

  1. 用户编写或获取一个 Helm Chart。
  2. 用户通过helm install [RELEASE_NAME] [CHART]命令进行安装。
  3. Helm读取 Chart 和用户提供的 values。
  4. Helmtemplates/下的所有模板与 values 结合,渲染成纯 Kubernetes YAML 文件。
  5. Helm通过 Kubernetes API 将这些 YAML 文件提交给集群,创建所有定义好的资源。
  6. Helm在集群中创建一个Secret(默认存储驱动)来记录这次安装的 Release 状态、配置和版本。

helm upgradehelm rollback正是基于这个 Release 记录来实现的。

五、如何使用 Helm Chart?

  1. 安装 Helm 客户端

  2. 查找 Chart:

    helm search hub wordpress# 在 Artifact Hub(官方中心仓库)查找helm repoaddbitnami https://charts.bitnami.com/bitnami# 添加第三方仓库helm search repo bitnami/mysql# 在已添加的仓库中查找
  3. 安装 Chart:

    # 使用默认配置安装helminstallmy-wordpress bitnami/wordpress# 使用自定义 values 文件安装helminstallmy-wordpress bitnami/wordpress -f my-values.yaml# 在安装时动态设置参数helminstallmy-wordpress bitnami/wordpress --setreplicaCount=3
  4. 管理 Release:

    helm list# 列出所有 Releasehelm status my-wordpress# 查看 Release 状态helm upgrade my-wordpress bitnami/wordpress -f new-values.yaml# 升级helm rollback my-wordpress1# 回滚到版本 1helm uninstall my-wordpress# 卸载

六、总结:Helm Chart 的价值

方面传统 kubectlHelm Chart
部署单元零散的 YAML 文件一个完整的、版本化的 Chart 包
配置管理手动编辑/复制 YAML模板化,通过values.yaml集中配置
复用性低,需大量复制修改高,一次编写,多处参数化部署
生命周期手动操作,易出错完整的install/upgrade/rollback/uninstall命令
依赖管理手动处理声明式依赖,自动安装
共享与分发困难(如通过 Git)容易,通过 Chart 仓库(Harbor, Artifact Hub)

适用场景

  • 部署和管理复杂的微服务应用。
  • 需要为不同环境(开发、预发、生产)提供不同配置。
  • 希望在团队或社区内标准化和共享 Kubernetes 应用部署配置。
  • 需要实现应用的快速回滚和可重复部署。

需要权衡的方面

  • 学习成本:需要学习 Chart 结构、模板语法和 Helm 命令。
  • 复杂度:对于极其简单的应用,使用 Helm 可能显得“杀鸡用牛刀”。
  • 安全性:确保从可信的仓库获取 Charts,并审查values.yaml的配置。

总而言之,Helm Chart 是 Kubernetes 生态中实现“应用即代码”和“GitOps”实践的关键工具,它极大地提升了在 Kubernetes 上部署和管理应用的效率、可靠性和一致性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 12:43:03

Vue.js 事件处理器

Vue.js 事件处理器 引言 在Web开发中,事件处理器是前端开发中非常重要的一部分。Vue.js作为一款流行的前端框架,提供了丰富的内置事件处理机制,使得开发者可以更加方便地处理用户交互。本文将详细介绍Vue.js的事件处理器,包括事件绑定、事件修饰符、自定义事件等内容。 …

作者头像 李华
网站建设 2026/7/1 16:35:25

【YOLOv12多模态创新改进】独家创新改进首发| SCI一区Top 2025 | 引入CIMFusion 跨模态交互特征融合模块,增强可见光和红外图像之间的特征交互,含多种创新改进,顶会顶刊发文热点

一、本文介绍 🔥本文给大家介绍使用 CIMFusion 跨模态交互特征融合模块 改进 YOLOv12 的多模态目标检测模型,通过跨模态注意力机制有效融合可见光和红外图像的特征,提升了模型对多模态信息的利用效率。在恶劣天气或复杂环境下,CIM 模块增强了模型的鲁棒性和泛化能力,帮助…

作者头像 李华
网站建设 2026/7/5 20:14:22

Java毕设选题推荐:基于SpringBoot智慧学生校舍系统设计与实现基于springboot的学生宿舍管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/8 13:49:53

基于stm32的河流检测系统

文章目录 摘要一、系统功能二、总体设计程序 三、效果图源码获取 摘要 随着科技的进步,经济的发展,水污染问题日益严重,尤其以河流资源的污染情况更加严重。通过对现有河流河流水质检测仪进行研究,制定总体设计方案,主…

作者头像 李华
网站建设 2026/7/1 23:41:52

计算机小程序毕设实战-基于springboot+小程序的睡眠健康管理系统小程序基于Java的微信小程序睡眠健康管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/1 22:48:08

例说FPGA:可直接用于工程项目的第一手经验【3.6】

17.5 软件程序解析 1.main.c源文件软件程序解析 main.c的函数列表如表17-3所示。 表17-3 main.c文件的函数列表 2.int main(void)函数 该函数为主函数,其流程图如图17-16所示。在各种外设初始化后,首先让LCD显示预先存储在Flash中的背景图片;接着对波形显示窗口进行初始…

作者头像 李华