【问题标题】:Helm Chart: How do I install dependencies first?Helm Chart:如何先安装依赖项?
【发布时间】:2020-06-02 14:42:12
【问题描述】:

我一直在开发一个原型图表,它依赖于在其中一个子图表中定义的一些 custom resource definitions

更具体地说,我正在尝试在我的 helm 图表中创建在 strimzi-kafka-operator 中定义的资源,并希望首先显式安装依赖项。我关注helm documentation 并将以下内容添加到我的 Chart.yaml

dependencies:
- name: strimzi-kafka-operator
  version: 0.16.2
  repository: https://strimzi.io/charts/

我跑了:

$ helm dep up ./prototype-chart
$ helm install ./prototype-chart
> Error: unable to build Kubernetes objects from release manifest: unable to recognize "": no matches for kind "KafkaTopic" in version "kafka.strimzi.io/v1beta1"

这表明它正在尝试在我的依赖项之前部署我的图表。首先安装依赖项然后安装父图表的正确方法是什么?

(作为参考,这是我在 GitHub 上直接用 Strimzi 打开的问题,他们告诉我他们不确定如何将他们的 helm 用作依赖项: https://github.com/strimzi/strimzi-kafka-operator/issues/2552 )

【问题讨论】:

    标签: kubernetes-helm


    【解决方案1】:

    关于 CRD:Helm 默认不会管理这些1 是一项功能,而不是错误。如果不存在,它仍然会安装它们;但它不会修改或删除现有的 CRD。以前版本的 Helm (v2) 确实,但是(根据经验)如果你不小心的话,可能会给你带来各种各样的麻烦。引用您引用的链接:

    目前不支持使用 Helm 升级或删除 CRD。由于存在意外数据丢失的危险,这是经过多次社区讨论后做出的明确决定。 [...] Helm 2 中使用的 crd-install 方法的明显缺点之一是由于 API 可用性的变化而无法正确验证图表(CRD 实际上是在向 Kubernetes 集群添加另一个可用的 API)。如果图表安装了 CRD,则 helm 不再有一组有效的 API 版本可供使用。 [...] 使用 CRD 安装的新 crds 方法,我们现在确保 Helm 拥有关于集群当前状态的完全有效信息。

    这里的想法是 Helm 应该只在发布数据级别(添加/删除部署、存储等)运行;但是使用 CRD,您实际上是在修改 Kubernetes API 本身的扩展,可能会无意中破坏使用相同定义的其他版本。考虑一下,如果您所在的团队拥有一个在多个图表之间共享 CRD 的“库”,并且您想要卸载一个 - 以前,使用 v2,Helm 很乐意让您随意修改甚至删除它们,而无需检查如果/如何在其他版本中使用它们。 对 CRD 的更改是对您的控制平面/核心 API 的更改,应该这样对待 - 您正在修改全局资源。

    简而言之:在 v3 中,Helm 将自己定位为一个定义、模板和管理发布的“开发者”工具;然而,CRD 意味着要独立管理,例如由“集群管理员”。归根结底,这对各方来说都是一场胜利,因为开发人员可以随意设置/拆除部署,并确信它不会破坏其他地方的功能......而且随时待命的人都不必处理警报,如果/当您不小心删除/修改 CRD 并破坏生产中的东西时:)


    有关此决定背后的更多背景信息,另请参阅here 的广泛讨论。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2021-07-11
      • 2022-08-18
      相关资源
      最近更新 更多