使用自定义资源定义(CRD)时,区分两个不同的部分很重要:
foo.example.com/v1
。任何拥有 apiVersion: example.com/v1
和种类 Foo 的资源都是使用 CRD 的资源Helm 优化为尽可能快地将尽可能多的资源加载到 Kubernetes 中。通过设计,Kubernetes 可以采取一整套 manifests,并将它们全部启动在线(这称为 reconciliation 循环)。
但是与 CRD 有所不同。对于 CRD,声明必须在该 CRDs 种类的任何资源可以使用之前进行注册。注册过程有时需要几秒钟。
一种方法是将 CRD 定义放在一个 chart 中,然后将所有使用该 CRD 的资源放入另一个 chart 中。
在这种方法中,每个 chart 必须单独安装。
要将这两者打包在一起,在 CRD 定义中添加一个 crd-install 钩子,以便在执行 chart 的其余部分之前完全安装它。
请注意,如果使用crd-install hook创建CRD ,则该CRD定义在helm delete运行时不会被删除。