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