我使用 Kubernetes 和 Helm 已经有一段时间了,现在第一次遇到 Kustomize。
但是 Kustomize 和 Helm 之间到底有什么区别呢?
两者都只是捆绑 K8s 元素(如服务、部署等)的不同解决方案吗?或者同时使用 Helm 和 Kustomize 是否有意义?
我使用 Kubernetes 和 Helm 已经有一段时间了,现在第一次遇到 Kustomize。
但是 Kustomize 和 Helm 之间到底有什么区别呢?
两者都只是捆绑 K8s 元素(如服务、部署等)的不同解决方案吗?或者同时使用 Helm 和 Kustomize 是否有意义?
描述差异的最佳方式是将它们称为不同类型的部署引擎。一个是模板引擎,一个是覆盖引擎。
那么这些是什么?好吧,当您使用模板引擎时,您会创建文件的样板示例。从那里您可以使用已知过滤器抽象出内容,并在这些抽象中提供对变量的引用。这些变量通常被抽象到另一个文件中,您可以在其中插入特定于您的环境的信息。然后,在运行时,当您执行模板引擎时,模板被加载到内存中,并且所有变量都与其占位符交换。
这在一些细微的方面与覆盖引擎不同。通常关于信息如何进入配置示例。注意到我在那里使用了词examples而不是templates。这是故意的,因为 Kustomize 不使用模板。相反,您创建一个Kustomization.yml文件。这个文件然后指向两个不同的东西。你的基地 和你的覆盖。在运行时,您的 Base 被加载到内存中,如果存在任何匹配的 Overlay,它们将合并到您的 Base 配置之上。
后一种方法允许您更轻松地将配置扩展到大量变体。想象一下,为 10,000 种不同的配置维护 10,000 组不同的变量文件。现在想象一下维护可以以任何组合或排列方式继承的模块化和小型配置的层次结构?它将大大减少冗余并大大提高可管理性。
另一个需要注意的细微差别是项目的所有权。Helm 由第三方运营。Kustomize 由 Kubernetes 团队直接开发。事实上,Kubectl 直接支持 Kustomize 功能。您可以像这样构建和执行 Kustomize 项目:kubectl apply -k DIR
. 但是,嵌入在 kubectl 二进制文件中的 kustomize 版本已经过时并且缺少一些新功能。
Kustomize 中还有一些其他的改进,虽然稍微小一些,但仍然值得一提。它可以引用来自互联网或其他非标准路径的碱基。它支持生成器根据文件和字符串文字自动为您构建配置文件。它支持健壮和细粒度的 JSON 补丁。它支持跨配置文件注入元数据。
在下面的评论中添加了以下链接以进行更多比较:
几乎所有的。就像问 Apache 和 Nginx 之间有什么区别 :) 他们做的工作大致相似,但量化差异是不可能的。
简而言之,Helm 是一个基于去中心化模型的模板驱动系统,用于图表共享。Kustomize 基于 YAML 数据的深度合并和其他结构化转换。
在某些情况下,两者都使用是合理的,例如将 helm 模板的输出馈送到 kustomize 以进行叠加。