Helm和Kustomize有什么区别?

时间:2020-03-04 06:03:15

标签: kubernetes kubernetes-helm kustomize

我使用Kubernetes和Helm已有一段时间了,现在第一次遇到Kustomize。

但是Kustomize和Helm之间到底有什么区别?

用于捆绑K8s元素(例如服务,部署等)的两个解决方案是否完全不同?还是同时使用Helm和Kustomize有意义吗?

2 个答案:

答案 0 :(得分:20)

描述差异的最好方法是将它们称为不同类型的部署引擎。一个是模板引擎,另一个是叠加引擎

这些是什么?好吧,当您使用模板引擎时,您将创建文件的样板示例。在这里,您可以使用已知的过滤器提取内容,并在这些抽象中提供对变量的引用。通常,这些变量会抽象到另一个文件中,在其中插入特定于环境的信息。然后,在运行时,当您执行模板引擎时,会将模板加载到内存中,并且所有变量都将与它们的占位符交换。

这与覆盖引擎在某些细微差别上有所不同。通常关于信息如何进入配置示例。注意,我在那里使用的是 examples 而不是 templates 。这是故意的,因为Kustomize不使用模板。而是创建一个 Kustomization.yml 文件。然后,该文件指向两个不同的事物。您的 Base 和您的重叠。在运行时,您的Base会加载到内存中,如果存在匹配的Overlay,则会将它们合并到Base配置之上。

后一种方法使您可以更轻松地将配置扩展到大量变体。想象一下,为10,000个不同的配置维护10,000个不同的变量文件集。现在想象维护一个模块化和小型配置的层次结构,该结构可以以任何组合或排列来继承吗?它将大大减少冗余并大大提高可管理性。

需要注意的另一个细微差别是项目的所有权。头盔由第三方操作。 Kustomize由Kubernetes团队直接开发。实际上,Kubectl直接支持Kustomize功能。您可以像这样kubectl apply -k DIR来构建和执行Kustomize项目。但是,嵌入在kubectl二进制文件中的kustomize版本已经过时,缺少一些新功能。

在Kustomize中还有其他一些改进,虽然有些微小,但仍然值得一提。它可以引用来自Internet或其他非标准路径的基准。它支持生成器根据文件和字符串文字自动为您构建配置文件。它支持健壮且细粒度的JSON修补。它支持跨配置文件注入元数据。

以下评论中添加了以下链接,以进行更多比较:

答案 1 :(得分:5)

几乎所有内容。就像问Apache和Nginx之间有什么区别:)他们做了相似的工作,但是量化差异是不可能的。

简短的版本是Helm是一个基于分散模型的图表驱动系统,用于图表共享。 Kustomize基于YAML数据的深度合并和其他结构化转换。

在某些情况下,使用两者是合理的,例如将头盔模板的输出馈送到kustomize中进行覆盖。

相关问题