【问题标题】:What is the difference between Helm and Kustomize?Helm 和 Kustomize 有什么区别?
【发布时间】:2020-06-16 14:01:37
【问题描述】:

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

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

对于捆绑 K8s 元素(如服务、部署等)来说,这两者只是不同的解决方案吗?或者同时使用 Helm 和 Kustomize 是否有意义?

【问题讨论】:

    标签: kubernetes kubernetes-helm kustomize


    【解决方案1】:

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

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

    这在一些细微的方面与覆盖引擎不同。通常关于信息如何进入配置示例。注意到我在那里使用了 examples 这个词而不是 templates。这是故意的,因为 Kustomize 不使用模板。相反,您创建一个 Kustomization.yml 文件。这个文件然后指向两个不同的东西。你的 Base 和你的 Overlays。在运行时,您的 Base 被加载到内存中,如果存在任何匹配的 Overlay,它们将合并到您的 Base 配置之上。

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

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

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

    以下cmets中添加了以下链接以进行更多比较:

    【讨论】:

    • 我猜你已经有一段时间没有使用 Helm 了,因为 Tiller 已经不在了。他们现在都使用类似的模型进行通信,将应用跟踪数据存储在对象本身或 Secret 中。此外,虽然我个人更喜欢 Kustomize,但您的声明大大高估了它背后的社区支持。 Helm 拥有更多的用户、集成和支持。从技术上讲,Kustomize 现在包含在 kubectl 中,但是版本太旧了,在大多数地方实际上与当前的 Kustomize 不兼容。
    • Helm 有着糟糕的安全历史,而 Kustomize 得到了 Kubernetes 本身的开发人员的官方支持。由于支持继承的基础设计模型,Kustomize 的扩展性比 Helm 更好。 Kustomize 支持插件框架,允许用户使用生成器动态构建清单。 YAML 不应该被模板化,因此它不能很好地模板化。无论如何,Ansible & Jinja2 是一个比 Helm 更干净的模板和生成 Kubernetes 清单的解决方案。它可能已经在大多数现代基础设施堆栈中使用。 Kustomize > Ansible > Helm
    • Kubectl(或者更确切地说是 kube 本身)固定 Kustomize 2.0.3。再一次,我喜欢 Kustomize 并自己使用它而不是 Helm,但你仍然在这一点上夸大了社区协议的水平。你没有错,但你还是错了:D
    • @TJZimmerman Helm 的安全问题是 Helm 2 版本特有的。由于 Tiller 在 Helm 3 中被删除,我认为您描述的问题适用于版本 2。
    • 是的,这已经被多次提及,我已经相应地更新了我的原始答案。我的主张并不是 Tiller 的存在在 Helm 3 中继续成为安全问题。我的主张是,在项目的大部分生命周期中,Helm 都使用了 Tiller。开发人员并不急于删除该功能。 Helm 以不安全而闻名,而且这种情况不会很快消失。不管 Helm 3 发生了什么变化。此外,官方支持 Kustomize 的事实支持 Helm 未来的市场份额将低于 Kustomize 的说法
    【解决方案2】:

    几乎所有东西。就像问 Apache 和 Nginx 之间有什么区别 :) 它们的工作大致相似,但量化差异是不可能的。

    简而言之,Helm 是一个基于去中心化模型的模板驱动系统,用于图表共享。 Kustomize 基于 YAML 数据的深度合并和其他结构化转换。

    在某些情况下两者都使用是合理的,例如将 helm 模板的输出馈送到 kustomize 以进行叠加。

    【讨论】:

    • 与模板与合并相比,技术差异和项目差异存在更多细微差别,值得在这样一个常见问题中加以解决。因此,我添加了一条附加评论,进一步阐述了这两个项目之间的细微差别。
    【解决方案3】:

    两者都有其优点和缺点。让我们看看这张表

    Helm 特别适用于打包、移植和安装定义明确的应用,而 Kustomize 最适合修改现有的 Kubernetes 应用。

    事实上 Kustomize 和 Helm 提供了独特的具体好处,最好的做法是同时使用这两种工具。

    【讨论】:

      猜你喜欢
      • 2023-02-20
      • 2020-12-15
      • 2021-12-11
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      相关资源
      最近更新 更多