引言:当你的 YAML 文件多到需要一个“管家”
你是否经历过这样的场景?
- 部署一个微服务,需要同时维护
deployment.yaml、service.yaml、ingress.yaml、configmap.yaml等十几个文件。 - 开发、测试、生产环境的配置只有几个参数不同,却要复制粘贴出三套几乎一样的 YAML。
- 想回滚到上周的版本?对不起,没人记得上周的镜像 tag 是多少。
在 Kubernetes 的世界里,YAML 是通用语言,但直接管理成百上千个 YAML 文件无异于一场灾难。Helm 就是为解决这个问题而生的——它被誉为 “Kubernetes 的 apt-get/yum”,是 CNCF 官方认证的应用包管理器。
本文将带你从零开始,彻底掌握 Helm 的核心概念、实战技巧,并深入剖析 2025 年底发布的 Helm 4.0 革命性新特性,助你构建高效、安全、可复用的云原生应用交付体系。
第一部分:Helm 是什么?为什么它是 K8s 的必备神器?
1. 传统部署之痛
在 Helm 出现之前,我们通过 kubectl apply -f *.yaml 来部署应用。这种方式在面对复杂应用时暴露了诸多问题:
- 缺乏版本管理:无法轻松追踪和回滚到历史版本。
- 配置难以复用:不同环境的微小差异导致大量重复代码。
- 依赖关系混乱:一个应用可能依赖数据库、缓存等多个组件,手动管理顺序极易出错。
2. Helm 的核心价值
Helm 通过引入 Chart 的概念,将一组相关的 Kubernetes 资源打包成一个可管理的单元。
- Chart:就像一个软件安装包(如
.deb或.rpm),包含了应用运行所需的所有资源定义和配置模板。 - Release:Chart 在集群中的一次具体部署实例。同一个 Chart 可以被多次部署,每次都是一个独立的 Release,并拥有唯一的版本号。
一句话总结:Helm 让你用声明式、版本化的方式管理 Kubernetes 应用,极大地提升了部署效率和可靠性。
第二部分:Helm 核心概念与架构演进
1. Helm 2 vs Helm 3:去 Tiller 化
- Helm 2:采用客户端/服务器架构,包含一个名为 Tiller 的服务端组件,运行在集群内。这带来了严重的安全和权限问题。
- Helm 3(当前主流):彻底移除了 Tiller,完全基于客户端操作,所有权限由用户的
kubeconfig控制,安全性和易用性大幅提升。
2. Helm 4.0:现代化的飞跃(2025年11月发布)
作为六年来的首次重大升级,Helm 4.0 引入了多项革命性改进:
- Server-Side Apply (SSA) 全面启用:取代了旧的 3-Way Merge 策略,从根本上解决了资源配置冲突和漂移问题,让
helm upgrade的行为更可预测。 - WebAssembly (WASM) 插件系统:插件开发不再局限于 Go 语言,任何能编译成 WASM 的语言(如 Rust, Python)都可以用来扩展 Helm 的功能。
- 现代化日志与 SDK:采用标准的 Go 日志接口,为集成到 Argo CD、Flux 等 GitOps 工具提供了更强大的嵌入能力。
- 增强的安全性:改进了 Chart 签名和验证流程,更好地应对供应链攻击。
重要提示:截至 2026 年,Helm 4.0 已成为新项目的首选,但 Helm 3 的大部分工作流依然兼容。
第三部分:Helm 实战入门:创建、安装与管理你的第一个 Chart
1. 安装 Helm CLI
# Linux / Mac
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 验证安装
helm version
2. 创建你的第一个 Chart
# 创建一个名为 my-app 的 Chart
helm create my-app
# 目录结构
my-app/
├── charts/ # 子 Chart 依赖
├── templates/ # Kubernetes 资源模板
│ ├── deployment.yaml
│ ├── service.yaml
│ └── ...
├── Chart.yaml # Chart 的元数据
└── values.yaml # 默认配置值
3. 关键文件解析
-
values.yaml:这是 Helm 的灵魂。它定义了所有可配置的参数。replicaCount: 2 image: repository: nginx tag: "1.25" service: type: ClusterIP port: 80 -
templates/deployment.yaml:这是一个 Go 模板文件,通过{{ .Values.xxx }}语法引用values.yaml中的值。apiVersion: apps/v1 kind: Deployment spec: replicas: {{ .Values.replicaCount }} template: spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
4. 安装与升级
# 安装 Release
helm install my-release ./my-app --namespace my-ns --create-namespace
# 使用自定义 values 覆盖默认值
helm install my-prod-release ./my-app -f prod-values.yaml
# 升级 Release
helm upgrade my-release ./my-app --set image.tag="1.26"
# 查看历史版本
helm history my-release
# 回滚到上一个版本
helm rollback my-release 1
第四部分:高级技巧:打造企业级 Helm Chart
1. 多环境管理:Kustomize + Helm
虽然 Helm 本身支持 -f 参数覆盖,但对于复杂的多环境场景,推荐结合 Kustomize 使用:
- 将通用的 Chart 放在
base/目录。 - 为每个环境(dev/staging/prod)创建一个
overlay/目录,只存放差异化的kustomization.yaml和values.yaml。
2. 依赖管理
在 Chart.yaml 中声明对其他 Chart 的依赖:
dependencies:
- name: redis
version: "16.x.x"
repository: "https://charts.bitnami.com/bitnami"
- name: postgresql
version: "12.x.x"
repository: "https://charts.bitnami.com/bitnami"
然后运行 helm dependency update,Helm 会自动下载依赖到 charts/ 目录。
3. Hook 机制
Helm 提供了强大的 Hook 机制,用于在 Release 生命周期的特定时刻执行任务,例如:
- pre-install:在安装前创建一个 Job 来初始化数据库。
- post-delete:在卸载后清理一些外部资源。
在模板文件的 metadata 中添加注解即可:
apiVersion: batch/v1
kind: Job
metadata:
name: "{{ .Release.Name }}-init-db"
annotations:
"helm.sh/hook": pre-install
"helm.sh/hook-weight": "-5"
spec:
# ...
第五部分:Chart 仓库与分发:构建你的内部应用市场
1. 使用公共仓库
Helm Hub (Artifact Hub) 汇集了数千个社区维护的高质量 Chart。
# 添加 Bitnami 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 搜索并安装 Redis
helm search repo redis
helm install my-redis bitnami/redis
2. 搭建私有仓库(腾讯云 TCR 场景)
腾讯云容器镜像服务(TCR)不仅支持 Docker 镜像,也支持 Helm Chart 的托管。
-
推送 Chart 到 TCR:
# 打包 Chart helm package my-app # 登录 TCR helm registry login <your-tcr-endpoint> -u <username> -p <password> # 推送 Chart helm push my-app-0.1.0.tgz oci://<your-tcr-endpoint>/helm-charts -
从 TCR 安装 Chart:
helm install my-app oci://<your-tcr-endpoint>/helm-charts/my-app --version 0.1.0
这种方式将应用制品(镜像+Chart)统一管理,完美契合 DevOps 流水线。
第六部分:安全与最佳实践
1. Chart 签名与验证
为防止恶意 Chart 被部署,可以使用 Cosign 对 Chart 进行签名,并在安装时验证。
# 签名
cosign sign --key cosign.key my-app-0.1.0.tgz
# 验证并安装
helm install --verify --key cosign.pub my-app my-app-0.1.0.tgz
2. 生产环境 Checklist
- 最小权限原则:确保执行
helm install的用户只拥有必要的 RBAC 权限。 - 避免硬编码:所有敏感信息(密码、密钥)应通过
Secret注入,而非写在values.yaml中。 - 版本锁定:在
Chart.yaml中明确指定依赖的版本范围,避免意外升级。 - 拥抱 SSA:如果你已升级到 Helm 4.0,请充分利用 Server-Side Apply 带来的稳定性和可预测性。
结语:从包管理到应用交付的基石
至此,你已经掌握了 Helm 从基础概念到企业级实践的完整知识体系。Helm 的价值远不止于简化 YAML 管理,它更是构建标准化、自动化云原生交付流水线的基石。
无论是与 Argo CD 结合实现 GitOps,还是与 Jenkins 集成构建 CI/CD 流水线,一个设计良好的 Helm Chart 都是高效、可靠交付的核心。
互动邀请:你在使用 Helm 时踩过哪些坑?或者有什么独门的 Chart 设计技巧?欢迎在评论区分享!


1633

被折叠的 条评论
为什么被折叠?



