【问题标题】:What's wrong with Helm? Why isn't it widely adopted and prioritized for k8s apps? [closed]赫尔姆有什么问题?为什么它没有被广泛采用并优先用于 k8s 应用程序? [关闭]
【发布时间】:2021-09-19 02:28:43
【问题描述】:

到目前为止,Helm 是我所知道的唯一用于 K8s 的包管理器。它可以帮助无缝地部署和管理 k8s 应用程序依赖项。为什么这么多 K8s 应用程序仍未采用或优先考虑它?

我用过不少流行的,比如Argo、Istio等,他们似乎在推广默认安装方式为$ kubectl apply -f <http path to YAML config>。有些确实支持 Helm 安装方法,但它被推到了下面,并且在许多情况下缺少文档或已过时。有些甚至不支持 Helm 图表。

人们如何实际配置、部署和管理大型 K8s 应用程序,这些应用程序具有层层依赖关系,就像在其他平台上常见的那样?他们实际上是否手动管理每个依赖项?如果是这样的话,技术债务将是巨大的,因为 K8s 管理员需要了解其应用程序中每个依赖项的配置逻辑的每个细节。

【问题讨论】:

  • 你试过 kustomize 吗? kustomize.io
  • 是的,我做到了。 Kustomize 似乎是现在最流行的选项。
  • 我也是先用helm,后来开始用kustomize。同样从 Kubectl 1.14 开始,kustomize 是内置的。所以是的,我认为这就是要走的路。
  • Kustomize 不能替代 Helm。 Kustomize 可用于安装 Helm Charts。虽然这与 op 的问题无关。

标签: kubernetes kubernetes-helm


【解决方案1】:

这个问题有几个方面。

集群安全

从历史上看,第一个是安全性。

在 Helm3 之前,Helm 确实依赖于一些 Tiller 容器,在您的集群中运行,某种集群管理员能够代表您创建资源。

当时,反对 Helm 的主要论据之一是 Tiller,它是任何试图提升其权限的攻击者的特权目标。

从 Helm 3:Tiller 消失。这个论点不再有效 - 虽然要注意 Helm 2 并没有死,但我仍然不时遇到 Tillers pod。

兼容性

Helm Charts 通常不能开箱即用,具体取决于您的集群,并且通常需要一些补丁。

一个常见问题是图表试图在没有任何 PodSecurityPolicy 或 SecurityContextConstraints 配置的情况下启动特权容器,从而导致容器无法启动。或者更普遍地缺少 Pod 或容器 SecurityContexts,无法通过现有值自定义它们,当没有配置云集成或 MetalLB 可用时,LoadBalancer 服务,...

根据经验,在没有 RBAC、没有安全性的情况下,Charts 在 Kubernetes 上的表现往往很好......事情可能会变得“复杂”,具体取决于您的集群强制执行的选项。

质量

这导致我们遇到另一个常见问题:质量。这有两个方面:提供的 Kubernetes 配置的质量、它的相关性、它如何适合您正在打包的应用程序。以及您所依赖的容器映像的质量,用于打包该应用程序。

最好的情况是,您的图表来自您尝试安装的软件的编辑器。通常,容器镜像构建得比较好。

但是编辑器可能没有很多 Kubernetes 专业知识:他们可能缺少资源分配、亲和/反亲和/拓扑扩散约束,可能有一些部署策略或滚动参数没有意义,经常在可以避免的情况下尝试绑定特权端口,...有时他们没有太多时间来处理这些主题,而是专注于他们的产品本身。

从历史上看,我可以尝试的第一个 Charts 曾经是由某个 GitHub 用户编写的,与编辑器无关,并且对他们在编写 Kubernetes 配置和 Dockerfile 中所做的事情有不同的理解。

不管编辑的参与如何,我不会特别责怪任何人,但是有各种各样的容器图像和 Helm Charts,绑定在特权端口上并以 root 身份运行,除了“这就是它的工作方式你apt-get安装”。 chmod 777s。可能不起作用的东西。东西会,但我会质疑安全影响。可以简化的事情,...

支持

评估图表时要考虑的最后一点是其容器映像和 Kubernetes 配置的维护情况。

您能在公共 CVS 上找到资源吗?它有多活跃,任何突出的错误,是否及时修复?如果您的设置出现任何不好的情况,您是否可以贡献自己的力量?

结论

基于这些方面,以及您对集群的要求(这是一个测试,应该托管 CI 的开发人员,PCI-DSS 银行的生产,...)以及您可以花费的时间来设置它up:您可能信任给定的 Helm Chart,或者更喜欢构建自己的解决方案。

虽然 Helm 架构曾经是主要障碍,但在 Helm 3 之前,现在不采用 Chart 的理由通常与它的质量有关。

我对 Helm 的第一个怨恨是图像和配置的质量参差不齐,有时甚至非常差。这并不是说没有好的或伟大的图表。但这需要您根据具体情况逐个评估。

正如 cmets 所指出的:Helm 并不总是明确的答案。你可以使用 Kustomize。 Kustomize 可以反过来安装 Helm Charts。或不。您可以应用纯文本文件。您可以考虑 ArgoCD 从 Git 存储库中应用配置。 OpenShift 有“模板”(尽管它不允许大量模板:在这方面,Helm 更好)

如果我们要考虑替代方案,这取决于您想做什么。考虑到大多数时候,我会部署几个对象,它们彼此之间有关系,......可以说,做到这一点的“最佳”方式是操作员。你可以用 Go、Ansible (operator-sdk)、Java、Python (kopf) 来编写你的……有很多可用的库。虽然 Helm/Templates/Kustomize 只会应用一堆配置, 运算符是状态机(在创建 Y 之前等待 X 启动)。


回答您的最后一个问题:人们如何实际配置、部署和管理具有层层依赖关系的大型 K8s 应用程序?

视情况而定。对此没有明确的答案。

我可以告诉你,我现在与之合作的客户使用 Terraform,它有一个自定义提供程序,它应用 Ansible Playbooks,从一些模板生成 Kustomization 文件,然后应用纯文本文件,或者有时调用托管在 Artifactories 上的 Helm Charts。这些有时会部署 Operators(用 java/go/python 编写),然后会创建自己的对象,...

您可以随心所欲地执行此操作。只要你的安全部门同意,如果你有一个,你的开发人员可以使用,你的操作可以管理,...

【讨论】:

    猜你喜欢
    • 2012-08-23
    • 2014-02-18
    • 2010-12-12
    • 1970-01-01
    • 2021-12-16
    • 2011-06-03
    • 2023-02-24
    • 2014-11-12
    • 2010-11-02
    相关资源
    最近更新 更多