Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes Helm和Kustomize之间有什么区别?_Kubernetes_Kubernetes Helm_Kustomize - Fatal编程技术网

Kubernetes Helm和Kustomize之间有什么区别?

Kubernetes Helm和Kustomize之间有什么区别?,kubernetes,kubernetes-helm,kustomize,Kubernetes,Kubernetes Helm,Kustomize,我使用Kubernetes和Helm已经有一段时间了,现在我第一次遇到了Kustomize 但是Kustomize和Helm之间到底有什么区别呢 两者是否只是捆绑K8s元素(如服务、部署等)的不同解决方案。。。?或者同时使用Helm和Kustomize有意义吗?几乎所有东西。比如问Apache和Nginx之间有什么区别:)他们做的工作大致相似,但量化差异是不可能的 简而言之,Helm是一个基于分散模型的模板驱动系统,用于图表共享。Kustomize基于YAML数据的深度合并和其他结构化转换 在某

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

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


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

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

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


在某些情况下,两者的使用都是合理的,例如将helm模板的输出输入到kustomize中以进行覆盖。

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

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

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

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

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

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

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


与模板与合并相比,技术差异和项目差异之间存在更多细微差别,应该在这样一个常见问题中加以解决。因此,我添加了一条附加评论,进一步阐述了这两个项目之间的细微差别。我猜您已经有一段时间没有使用Helm了,因为Tiller已经不在了。他们现在都使用类似的通信模型,将应用跟踪数据存储在对象本身或秘密中。此外,虽然我个人更喜欢Kustomize,但您的声明大大高估了它背后的社区支持。Helm拥有更多的用户、集成和支持。从技术上讲,Kustomize现在包含在kubectl中,但是一个版本太旧了,在大多数地方都与当前的Kustomize不兼容。Helm的安全性一直很差,Kustomize得到了Kubernetes开发者的官方支持。Kustomize的比例优于Helm,因为它支持继承的基本设计模型。Kustomize支持一个插件框架,允许用户使用生成器动态构建清单。YAML并不意味着要被模板化,因此它不能很好地模板化。Ansible&Jinja2是一种比Helm更清洁的模板化和生成结果Kubernetes清单的解决方案。而且它可能已经在大多数现代基础设施堆栈中使用。Kustomize>Ansible>HelmKubectl(或者说kube本身)引脚Kustomize 2.0.3。再说一次,我喜欢Kustomize,并用它来控制我自己,但你仍然大大夸大了社区在这一点上的一致性。你没有错,但你仍然错了:D@TJZimmermanHelm的安全问题特定于Helm 2版本。由于舵柄在《掌舵3》中被移除,我认为您所描述的问题适用于第2版。是的,这已经被多次提及,我已经相应地更新了我的原始答案。我的主张并不是说舵手3的存在仍然是一个安全问题。我的主张是,在项目的大部分时间里,赫尔姆都使用舵柄。开发人员并不急于删除该功能。赫尔姆因缺乏安全感而名声大噪,这种情况不会很快消失。不管头盔3发生了什么变化。此外,Kustomize获得官方支持的事实支持了赫尔姆在未来的市场份额将低于Kustomize的说法