Helm,Kubernetes 应用程序包管理器,已正式发布 4.0.0 版本。这是六年来的首次重大升级,也标志着 Helm 在云原生计算基金会(CNCF)指导下的十周年。此次更新旨在解决可扩展性、安全性和开发者工作流方面的若干挑战。
Helm 4 的 SDK 具备多项旨在增强集成和开发者体验的改进。它采用了现代的 Go 日志记录接口,以支持多日志记录器,并允许通过可嵌入命令将 Helm 功能直接集成到其他应用程序中。Helm 4 现在还原生支持服务器端应用(Server-Side Apply,这是 Kubernetes 的一项功能,将逻辑从 kubectl apply 命令移至 API 服务器)。这一变化反映了 Kubernetes 生态系统中朝向该方向的更广泛趋势,确保了构建在 Helm 之上的集成既强大又能与现代集群行为保持物理一致性。
插件系统也经过了重建:传统的 Helm 插件仍然可用,但用户现在也可以使用 WebAssembly(WASM)编写插件以获得更广泛的移植性。此外,在图表分发、性能、图表签名和测试自动化机制方面也有所改进。
根据 Helm 联合创始人 Rimantas Mocevicius 的博客文章,这些变化既反映了新功能,也是对 Helm v3 时代积累的设计债务的重新审视。
指导 Helm 4 开发的提案 HIP-0012(Helm 改进提案)制定了时间表,从 2024 年底的规划开始,随后是到 2025 年中的工程阶段,并于 2025 年 11 月发布。它强调了团队在合理时间范围内可以交付的功能开发,并谨慎地引入了破坏性变更。针对 Kubernetes 集成的改进,如服务器端应用、现代插件架构和图表 API 的优化,都是路线图的一部分。贡献者参与度和维护积压的问题也得到了认可,并通过流程改进加以解决。
从更广泛的用户角度来看,Jimmy Song 在其博客中捕捉到了这次发布如何“超越模板工具”并使 Helm 现代化。他提出,添加服务器端应用使其更贴近 GitOps 方法,并且拥有可重复构建、用于插件的 WASM 以及像 kstatus 这样的状态解析工具,使其与现代 Kubernetes 范式保持同步。Song 认为,这些变化意味着 Helm 正从一个图表渲染器转变为更像一个部署编排器。
Helm 生态系统中一个更具争议的问题是关于对自定义资源定义(CRD)的支持。一项旨在实现更健壮的 CRD 更新行为的提案已被提交以供纳入,该提案包括合并新版本、追加到版本列表、保留元数据以及确保向后兼容的回滚路径。然而,截至 Helm 4 的初始发布,这些提案尚未被采纳。Helm 仍会在图表安装时安装放置在特殊 crds/ 目录中的 CRD,但不会通过其正常的升级流程来升级或删除 CRD。现有文档警告,crds 文件夹中更新的 CRD 只会被跳过并发出警告,而不会被应用。
社区的反馈反映了对此疏漏的失望。在发布后不久的一次 Reddit 讨论中,用户询问 CRD 行为是否有所改善。一位用户评论道:“在 CRD 方面仍然没有改进?::(”,并指出 Helm 仍然无法安全地管理 CRD 的生命周期。另一位用户报告称,他们组织的工具和 CLI 工作流程依赖于基于注解的 CRD,适应 Helm CRD 逻辑的任何更改都将非常复杂。
其他评论,例如来自 Heinan Cabouly 的评论,认为像 Argo CD 这样的 GitOps 工具几年前就已经解决了 Helm 一些最大的工作流缺口,暗示 Helm 4 感觉更像是追赶而非重塑。然而,Helm 4 仍被认为是一个重要的里程碑,它改善了项目的长期生存能力,而不仅仅是增量修补。
从业者和博主们对 Helm 4 的部署安全改进表示欢迎,特别是新的基于就绪状态的控制,减少了滚动更新期间依赖组件之间的竞态条件。Pierre-Louis Gueugnon 在为 Enix 撰写的文章中赞扬了更智能、基于内容的图表缓存和性能改进,这些被视为对进行频繁、大规模部署的团队来说是实用的生活质量升级。
展望未来,Helm 维护者已表示,最初未为 v4 采纳的功能可能会在次要版本甚至 Helm 5 中被考虑。社区将密切关注何时 CRD 升级能够变得足够安全、稳定和文档化,以便被广泛采用。