Nelm 与 Helm 4 的比较:现有差异与未来规划

admin 百科 13

helm 4 最近正式发布,借此契机,flant 团队将其与在 werf 中孵化并逐步独立的替代方案 nelm 进行了深度对比。本文详细梳理了 helm 4 与 nelm 各自引入的关键新特性,系统剖析二者在核心能力上的差异,并同步公布了 nelm 的中长期演进路线图。

Helm 4 为云原生生态带来了多项实质性升级。其中最显著的用户体验改进是全面采用 Kubernetes 原生的 Server-Side Apply(SSA)机制,取代沿用多年的 3-Way Merge 策略,从根本上缓解了因合并逻辑导致的资源配置错误;同时集成 kstatus 实现更精准的资源状态观测。其余更新则侧重于技术债清理与架构轻量化。

尽管 SSA 的落地已属重大突破,但社区对 Helm 4 的期待远不止于此。呼声最高的两大需求是:提供 Go 模板之外的模板语言选项,以及增强对自定义资源定义(CRD)全生命周期管理的支持。

Helm 的版本迭代节奏在本次发布前明显提速,但由于其在生产环境中的广泛部署及严苛的向后兼容性承诺,涉及底层架构的重大调整仍可能延至后续主版本。

Nelm 与 Helm 4 的核心差异

Nelm 并非 Helm 的简单复刻,而是面向现代交付场景设计的下一代 Helm 兼容部署引擎——它在保持对 Helm Chart 格式与 Release 行为完全兼容的前提下,聚焦于快速引入前沿功能。

Nelm 起源于 werf 项目内部,最初为满足用户对更精细、更可控部署能力的诉求而开发,后演变为可独立运行的通用工具(无需依赖 werf 运行时)。其底层复用了 Helm 的部分基础模块,但对部署引擎、资源编排、状态跟踪等关键组件进行了彻底重构。

以下是 Nelm 相较 Helm 4 的六大差异化能力:

1. CRD 部署支持

Helm 官方推荐将 CRD 放置在 crds/ 目录下,但该目录内容仅在首次 helm install 时生效,后续 upgrade 操作完全忽略,无法实现 CRD 版本更新。

部分用户转而将 CRD 放入 templates/ 目录作为普通资源渲染,但这会破坏声明式部署语义,难以保障 CRD 必须早于依赖它的资源创建;且大型 CRD 文件易超出 Secret 存储限制。

更有开源 Chart 采用子 Chart 方式单独管理 CRD,进一步增加维护复杂度。

Nelm 则原生支持 crds/ 目录的全周期管理:CRD 不仅会在首次安装时部署,还会在每次 upgraderollback 时自动比对、更新并应用变更,真正实现 CRD 的声明式演进。

2. 可编程的资源部署顺序

Helm 主要依赖 hooks 实现有限的顺序控制,适用于 rollout 前后执行简单 Job 场景。

但当 Job 依赖 Deployment 就绪、或需在发布流程中途触发特定操作时,Helm 缺乏标准化机制。

Nelm 在每次发布前动态构建“操作图”(Operation Graph),显式建模资源间的依赖关系。通过 werf.io/deploy-dependency 注释,可精确指定某资源必须等待另一资源处于指定状态(如 state=ready,kind=StatefulSet,name=postgres)后才启动部署。

Nelm 与 Helm 4 的比较:现有差异与未来规划-第1张图片-佛山资讯网

示例:

kind: Deployment
metadata:
  name: backend
  annotations:
    werf.io/deploy-dependency-db: state=ready,kind=StatefulSet,name=postgres

登录后复制

表示 backend Deployment 的创建/更新,将严格延迟至 postgres StatefulSet 成功创建且进入就绪状态之后。

Nelm 与 Helm 4 的比较:现有差异与未来规划-第2张图片-佛山资讯网

该注释同时适用于常规资源与 hooks。未来还将支持跨 chart 的依赖声明。

此外,Nelm 还提供 werf.io/weight(类比 helm.sh/hook-weight)、external-dependency.werf.io/resource(用于声明对 Helm 外部资源如 Operator 创建的 Secret 的依赖)等高级注释。当然,Helm 原生的 hook 机制也完全兼容。

3. 细粒度资源生命周期控制

Helm 仅通过 helm.sh/resource-policy: keephelm.sh/hook-delete-policy 提供基础级资源保留策略,面对“发布中途部署不可变 Job”、“部署后自动清理临时资源”或“跨多次发布共享同一资源”等复杂场景,表达力严重不足。

Nelm 引入三类全新生命周期注释:

标签: git go typescript app 工具 ai kubernetes

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~