惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

李锋镝的博客

LiteLLM 本地代理搭建 Claude-HUD 使用文档 Kratos+ —— Kratos 主题二次开发记录 译文:如何将单体应用拆解为微服务 codebase-memory-mcp 极简完整使用指南 Claude Haiku 4.5、Claude Sonnet 4.6、Claude Opus 4.7 区别以及各自的新特性 SchedulingConfigurer详解 踩坑60+次后,我终于搞懂 Claude Skill 怎么写才会真的触发 Everything Claude Code 详细使用文档 配置Jackson使用字段而不是getter/setter来序列化和反序列化 这个域名注册整整十年了,十年时间,真快啊 Claude Code全维度实战指南:从入门到精通,解锁AI编程新范式 Apollo配置中心中的protalDB的作用是什么 org.apache.ibatis.plugin.Interceptor类详细介绍及使用 岁末 Excel2016右键新建工作表,打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的解决办法 wordpress增加说说功能 Java 为什么有这么多 “O”? 别再背线程池的七大参数了,现在面试官都这么问 2024年11月1号 农历十月初一 我的第一个WordPress插件:Dylan Custom Plugin上线了 推荐一款比较养眼的Xshell配色方案 hnswlib installation failed 开工啦~ 阳了... MybatisCodeHelperPro激活 @Async注解的坑 新买的笔记本发货啦…… 这个中秋节感觉过的好累啊 IDEA下载源码报:Cannot connect to the Maven process. Try again later.
什么是Helm?
李锋镝 · 2025-06-04 · via 李锋镝的博客

Helm 是 Kubernetes 的包管理工具,用于简化复杂应用的部署、升级和回滚操作。类比于 Linux 中的 aptyum,Helm 让你可以将多个 Kubernetes 资源(如 Deployment、Service、ConfigMap 等)打包成一个 Chart,实现应用的一键部署与管理。

一、核心概念

1. Chart

  • 定义:Helm 的打包单位,包含部署应用所需的所有资源定义(YAML 文件)。
  • 结构
    mychart/
    ├── Chart.yaml          # 图表信息(名称、版本等)
    ├── values.yaml         # 默认配置参数
    ├── charts/             # 依赖的子 Chart
    └── templates/          # 模板文件(结合 values 生成 Kubernetes 资源)

2. Release

  • 定义:Chart 在 Kubernetes 集群中的一个实例。同一个 Chart 可部署多次,每次部署生成一个独立的 Release。
  • 示例:部署 MySQL Chart 两次,分别作为应用 A 和应用 B 的数据库,生成两个不同的 Release。

3. Repository

  • 定义:存储和共享 Charts 的仓库,类似 Maven 仓库或 npm registry。
  • 官方仓库Artifact Hub,社区维护的公开 Chart 库。

二、Helm 的工作原理

  1. 模板渲染
    Helm 将 templates/ 目录下的模板文件与 values.yaml(或用户自定义参数)结合,生成最终的 Kubernetes 资源 YAML。

    # 模板示例(templates/deployment.yaml)
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: {{ .Release.Name }}-web
    spec:
     replicas: {{ .Values.replicaCount }}  # 使用 values 中的参数
  2. 客户端-服务端架构

    • Helm 客户端:用户命令行工具(如 helm install)。
    • Tiller(已弃用):早期版本中,Helm 使用 Tiller 作为服务端组件,运行在集群中;从 Helm 3 开始,移除了 Tiller,安全性提升。

三、Helm 的核心功能

1. 应用部署与管理

  • 安装 Chart
    helm install my-release stable/mysql  # 从官方仓库安装 MySQL
  • 查看 Releases
    helm list  # 列出所有部署的 Releases
  • 升级与回滚
    helm upgrade my-release stable/mysql --set mysqlRootPassword=newpass  # 升级配置
    helm rollback my-release 1     # 回滚到上一个版本

2. 参数化配置

  • 通过 values.yaml 或命令行参数自定义部署配置,避免硬编码:
    helm install my-app ./mychart --values custom-values.yaml  # 使用自定义参数

3. 依赖管理

  • Chart.yaml 中声明依赖的子 Chart,Helm 自动处理依赖关系:
    dependencies:
    - name: redis
      version: 15.5.6
      repository: https://charts.bitnami.com/bitnami

4. 钩子(Hooks)

  • 在特定阶段执行自定义操作(如部署前初始化数据库):
    apiVersion: batch/v1
    kind: Job
    metadata:
    annotations:
      "helm.sh/hook": pre-install  # 安装前执行
    spec:
    template:
      spec:
        containers:
        - name: init-db
          image: mysql

四、Helm 的优势

  1. 简化复杂应用部署
    一键部署包含多个组件(如 Web 服务、数据库、缓存)的应用,无需逐个编写 YAML 文件。

  2. 版本控制
    记录每次 Release 的变更历史,支持回滚到任意历史版本。

  3. 参数化与复用
    通过 values 文件实现配置复用,适应不同环境(开发/测试/生产)的需求。

  4. 社区生态丰富
    官方和第三方仓库提供大量预打包的 Charts(如 Nginx、Prometheus、WordPress),直接可用。

五、典型使用场景

  1. 微服务架构
    部署包含多个服务的微服务应用,如一个电商系统包含订单、用户、支付等服务。

  2. CI/CD 流水线
    在 Jenkins、GitLab CI 等工具中集成 Helm,实现自动化部署。

  3. 环境一致性
    使用相同的 Chart 在不同环境(开发/测试/生产)中部署,确保配置一致。

  4. 第三方应用集成
    快速安装和配置监控(Prometheus+Grafana)、消息队列(RabbitMQ)等中间件。

六、Helm vs 原生 Kubernetes

对比项 原生 Kubernetes Helm
配置管理 手动维护多个 YAML 文件 打包为单一 Chart,支持参数化
部署复杂度 需逐个应用 kubectl apply 一键部署,自动处理依赖关系
版本控制 需手动记录每次变更 自动记录 Release 历史,支持回滚
环境适配 为不同环境复制/修改 YAML 文件 通过 values 文件适应不同环境
社区支持 基础资源定义,需自行编写 大量预打包的成熟 Charts 可用

七、安装与使用

1. 安装 Helm

# macOS(通过 Homebrew)
brew install helm

# Linux(通过脚本)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

2. 基本操作示例

# 添加官方仓库
helm repo add stable https://charts.helm.sh/stable
helm repo update

# 搜索 Chart
helm search repo mysql

# 安装 Chart
helm install my-mysql stable/mysql --set mysqlRootPassword=secret

# 查看 Release 详情
helm status my-mysql

# 卸载 Release
helm uninstall my-mysql

八、总结

Helm 是管理 Kubernetes 应用的必备工具,通过 Chart 模板化参数化配置,大幅降低了复杂应用的部署和维护成本。无论是开发团队快速迭代,还是运维团队统一管理,Helm 都能显著提升效率。建议在学习 Kubernetes 后尽快掌握 Helm,以应对实际项目中的复杂场景。

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/yun-wei/4445