Helmfile 是什么
用声明式文件管理「多个 release × 多个环境」的工具:helmfile diff 预览与集群的差异、apply 收敛现状,环境矩阵集中可读;release 之间可按 needs 定义次序。价值在于把散落在脚本与 CI 里的零散 helm 命令,收敛成一份可评审、可复现的配置。适合 release 多、环境多的团队;单 release 的小项目直接用 helm 命令更轻,别为工具而工具。
基本信息
| 结构 | helmfile.yaml + environments + releases 模板 |
|---|---|
| 命令 | helmfile diff / helmfile apply / helmfile -e prod list |
| 依赖 | 可按 needs 定义 release 间的次序 |
| 环境 | environments 段定义各环境的 values 文件 |
| 证据 | diff 输出可直接作为变更评审材料 |
| 幂等 | apply 反复执行收敛到同一目标状态 |
| 状态 | 不保存自有状态,以集群与 Helm release 为准 |
典型使用场景
- 多环境同管:dev/staging/prod 一套文件按环境取值
- 变更评审:diff 进 PR,渲染差异一眼可见
- 批量发布:多个 release 按同一节奏收敛
- 次序控制:关键依赖用 needs 显式声明
- 收敛手工命令:取代散落的 helm 升级脚本
- 环境盘点:list 快速查看某环境下有哪些 release
- 分批执行:按环境或分组逐步 apply,先小环境验证
- 与 GitOps 配合:明确 helmfile 与集群侧工具各自负责的范围
片段
片段
environments:
dev: {values: [values/dev.yaml]}
prod: {values: [values/prod.yaml]}
releases:
- name: app
chart: ./chart
namespace: '{{ .Environment.Name }}'
# 依赖次序用 needs 声明,避免隐式顺序
# 执行前先看差异:helmfile diff -e prod命令速查
| 命令 | 作用 | 场景 |
|---|---|---|
| helmfile diff | 预览与集群差异 | PR 评审 |
| helmfile apply | 收敛到声明状态 | 发布与修复 |
| helmfile -e prod list | 按环境列 release | 盘点核对 |
| helmfile destroy | 清理释放资源 | 环境下线 |
| helmfile sync | 安装或更新全部 release | 首次安装 |
helmfile diff 接进 CI:变更评审直接看渲染差异,比只看 values 改动直观。
渲染工具版本要统一:本地与 CI 用同一 helmfile 与插件版本,环境差异才可复现。
并发保护:同一环境两条流水线同时 apply 会互相打架,加锁或排队执行。
状态归属要清楚:helmfile 不保存状态,回滚依赖 Helm release 历史与制品仓库。