我有一个舵手图a,它依赖于第三方子图B。图B定义了图A使用的一些crd。但是,当我安装图表A(因此B也是)时,我得到一个错误,说不识别crd。CRs似乎在crd之前存储。
关于CRD的掌舵文档描述了处理此顺序的两种方法,要么将crd放在一个名为CRDs的文件夹中,要么使用两个单独的图表并依次安装它们。
我的问题如下:
- 为什么Helm不首先应用crd,不管它们在哪里?为什么需要crds文件夹?如果crd位于您不希望修改的图表中(就像我的情况一样),该怎么办?
- 第二个选项不会使依赖规范失效吗?依赖性不能有一个执行顺序吗?
- 是否有一种方法,我可能忽略了,仍然保持1图表与依赖关系,并以某种方式确保在依赖关系中定义的crd在使用之前存储?(钩子?)
(你不必回答所有的问题,任何一个问题的答案都是感激的)
有一种非常简单的方法可以让您的主图表安装依赖关系图的crd定义的对象。只要把它们和post-install
和post-upgrade
挂钩一起安装和升级就行了。
只是给你一个简单的例子。让我们想象一下,您需要安装一个证书管理器作为子图表,然后您的主图表需要安装一个Issuer
。显然,初始安装失败了,因为crd还没有安装,所以Issuer
没有通过验证。但是,如果您使用钩子(通过向Issuer
:"helm.sh/hook": post-install,post-upgrade
的模板添加以下注释),那么Issuer
将只在安装过程的最后,当cert-manager启动并启动时安装。
关于Helm如何处理crd的完整推理可以在hip-0011中找到。我建议你阅读它,但简而言之:
1。核心问题是,全球共享的资源是脆弱的。一旦安装了CRD,我们通常必须假设它是跨名称空间和用户组共享的。因此,安装、修改和删除cd是一个对该集群的所有用户和系统都有影响的过程。">
和
"这是经过大量社区讨论后的明确决定,因为有意外数据丢失的危险">
-
不,依赖项也可以用于其他目的。
-
恐怕会很复杂,看看这里的讨论。