Skip to content

Helm 入门系列 01:核心认知——Helm 在云原生生态的定位与架构拆解

约 2066 字大约 7 分钟

Helm 入门系列云原生Helm

2026-03-31

如果你刚接触云原生和 Kubernetes(简称 K8s),大概率会被一堆 YAML 配置文件搞到头疼:部署一个简单的 WordPress,要写 Deployment、ConfigMap、Secret、Service 等十几种资源配置,少则几百行,多则上千行,安装、升级、删除全靠手动改文件,效率低还容易出错。

而 Helm 就是为解决这个痛点而生的——它是 K8s 的「软件包管理器」,就像 macOS 的 Homebrew、Ubuntu 的 Apt 一样,能把 K8s 应用的所有资源打包成一个「软件包」,实现一键安装、更新、删除。这篇文章我们就从云原生生态的底层逻辑讲起,搞懂 Helm 到底是什么、解决了什么问题、核心架构又是什么。

一、先搞懂:云原生生态里,Helm 站在什么位置?

要理解 Helm,得先明白它所处的云原生环境——毕竟 Helm 是为 K8s 服务的,而 K8s 又是为微服务和容器而生的。我们用最通俗的话拆解这层关系:

1. 微服务:把「大应用」拆成「小零件」

传统应用是「全家桶」:一个电商网站的商品管理、支付、购物车功能全塞在一个程序里,编译成一个大文件运行,出问题就全崩。 云原生的思路是「拆零件」:把电商网站拆成支付服务、商品目录服务、购物车服务等一个个「微服务」,每个服务只干一件事,通过网络通信协同工作。好处是单个服务改Bug、升级,不会影响整个应用。

2. 容器:给「小零件」装个「标准化盒子」

微服务要落地,得解决「运行环境不一致」的问题:比如你写的 Python 3 服务,在我电脑上跑不起来,因为我装的是 Python 2。 容器(比如 Docker)就是给每个微服务装个「盒子」:盒子里包含服务运行需要的所有依赖(Python 3 运行时、库文件等),不管放到哪台机器,只要有容器运行环境,就能直接跑。而且不同盒子之间互不干扰,一台机器能同时跑 Python 2 和 Python 3 服务。

3. K8s:给「盒子们」找活干、管起来

当容器多了(比如几百个微服务容器),就需要一个「调度员」:谁来决定哪个容器跑在哪个机器上?怎么分配 CPU/内存?容器挂了怎么自动重启? K8s 就是这个「调度员」,核心能力是「声明式管理」:你只需要告诉 K8s「我要3个Nginx容器,每个用0.5核CPU,挂载/data目录」,K8s 会自动搞定所有配置,不用你一步步手动操作。

但 K8s 有个明显的痛点:管理一个应用需要写大量 YAML 配置。比如部署 WordPress,要写 Deployment(运行服务)、ConfigMap(存配置)、Secret(存密码)、Service(提供访问入口)等一堆配置文件,手动管理成本极高——这就是 Helm 要解决的核心问题。

二、Helm 的核心目标:让 K8s 用起来像「装软件」一样简单

Helm 自 2015 年诞生起,核心目标就三个,总结成大白话就是:

1. 降低 K8s 门槛:5 分钟就能装一个应用

新手用 K8s,光写 YAML 就得学半天。Helm 提供了现成的「应用包」,你不用从零写配置,只要执行 helm install 应用名 包名,5 分钟就能把应用装到 K8s 集群里,先跑起来再慢慢学底层逻辑。

2. 对标传统包管理器:给 K8s 做「应用商店」

把 K8s 看成「云原生操作系统」,那 Helm 就是这个系统的「应用商店」:

  • 你可以通过 Helm 搜索现成的应用包(比如 Nginx、MySQL);
  • helm install/upgrade/delete 一键安装、升级、删除应用;
  • 支持多实例部署:比如一台电脑只能装一个 MySQL,但 K8s 里能装几十个,Helm 用「发布名称」区分不同实例,哪怕是同一个包,名字不同就是独立的应用。

3. 安全、可重用、可配置:让应用包「靠谱又灵活」

  • 安全性:你可以验证应用包的来源(有没有被篡改),安装前还能通过 helm lint(语法检查)、--dry-run(试运行)预览要创建的 K8s 资源,避免装到恶意包;
  • 可重用性:同一个应用包,能在不同 K8s 集群、不同命名空间里重复安装,不用改配置;
  • 可配置性:安装时能自定义参数(比如改服务端口、数据库密码),不用改包本身的代码,一套包能适配开发、生产不同环境。

三、Helm 核心架构:拆解「应用包」的底层逻辑

Helm 的核心概念不多,搞懂这几个,就掌握了它的工作原理:

1. Chart:Helm 的「应用安装包」

Chart 是 Helm 里最核心的概念,就是「应用包」的官方叫法。它不是单一文件,而是一组按固定规则组织的文件/目录,核心组成:

组件通俗作用
Chart.yaml应用包的「说明书」:写清楚包名、版本、作者、依赖等基本信息
values.yaml应用的「默认配置」:比如默认端口、默认密码,安装时能覆盖
templates/应用的「配置模板」:里面是 K8s 资源的模板文件(比如 Deployment、Service 模板),支持动态替换参数

Chart 有两种形态:

  • 开发时:是一个文件夹(比如 wordpress/),方便改代码、调试;
  • 分发时:打包成 .tgz 压缩文件(比如 wordpress-1.2.3.tgz),能放到「Chart 仓库」里供人下载。

2. 清单(Manifest):模板渲染后的「最终配置」

Chart 里的 templates 是「模板」,不是直接能用的配置。Helm 会把你自定义的参数(或 values.yaml 的默认值)代入模板,生成最终的 K8s 配置文件(YAML 格式),这个文件就是「清单」。

比如你把 service.port 改成 8080,Helm 会把模板里的 ${service.port} 替换成 8080,生成能直接给 K8s 用的 Service 配置。

3. 发布(Release):安装后的「应用实例」

当你执行 helm install my-wordpress wordpress 时,Helm 会把 wordpress Chart 渲染成清单,提交给 K8s 创建资源,这个安装后的实例就叫「发布」,my-wordpress 是发布名称(唯一)。

哪怕是同一个 wordpress Chart,安装时命名为 wp-devwp-prod,就是两个独立的发布,对应 K8s 里两套完全隔离的资源。

4. 版本(Revision):发布的「历史记录」

每次对发布执行安装、升级、回滚操作,Helm 都会生成一个「版本号」。比如:

  • 第一次安装 my-wordpress,版本是 1;
  • 执行 helm upgrade 升级配置,版本变成 2;
  • 升级出问题,执行 helm rollback 回滚,版本变成 3。

通过版本号,你能追溯应用的所有变更,出问题时快速回滚。

Helm 工作流程:一句话总结

你执行 helm install → Helm 读取 Chart 模板 + 你的配置参数 → 渲染成 K8s 清单 → 提交给 K8s → K8s 创建资源,完成应用部署。

四、最后:Helm 到底是什么?

总结下来,Helm 就是 K8s 的「软件包管理器」,核心价值是把复杂的 K8s 资源配置打包成可复用、可配置的 Chart,让开发者不用再手写上千行 YAML,实现「一键部署、升级、删除」K8s 应用。

它不是替代 K8s,而是让 K8s 用起来更简单——就像你用手机 App 商店装软件,不用管软件的安装包怎么解压、怎么配置环境,点一下「安装」就行。

下一篇文章,我们会从实操入手,教你安装 Helm、用 Helm 部署第一个应用、自定义应用配置,把今天的理论落地成实际操作。


小提示:如果你用过 Helm 2,需要注意 Helm 3 已经移除了 Tiller 组件,Chart 格式也升级到了 v2(更简洁的依赖声明方式),现在官方已经废弃了 Helm 2,建议直接用 Helm 3。