如何从Custom渲染中排除CustomResourceDefinition?

时间:2019-03-10 22:44:32

标签: kubernetes kubernetes-helm

我目前正在为我的多服务应用程序编写Helm Chart。在应用程序中,我依赖于CustomResources,我通过"helm.sh/hook": crd-install钩子将其应用到其他所有具有掌舵功能的地方。

现在我要升级应用程序。头盔失败,因为已经安装了CRD。 在某些GH问题中,我了解了Helm模板中的内置.Capabilities变量。我想用“ if”包装CRD,以检查CRD是否已安装:

{{- if (not (.Capabilities.APIVersions.Has "virtualmachineinstancepresets.kubevirt.io")) }}

很遗憾,我误解了APIVersions属性。
所以我的问题是,Helm是否提供一种检查CustomAPI是否已经安装的方法,以便可以将其从Helm挂机前安装中排除?

1 个答案:

答案 0 :(得分:1)

Helm v2的简单答案是在运行--no-crd-hook时手动选择helm install标志。

使用内置.Capabilities变量的解决方法可能是一种解决方法。例如,使用此:

{{- if not (.Capabilities.APIVersions.Has "virtualmachineinstancepresets.kubevirt.io/v1beta1/MyResource") }}
apiVersion: ...
{{- end}}

但是,这也意味着您将永远无法再通过Helm管理已安装的CRD。

请查看博客文章Helm V2 CRD Management的详尽回答,其中解释了不同的方法。但是,我引用这个:

  

更令人高兴的是,掌舵的CRD管理简直太可怕了。

我个人建议通过依赖于它的应用程序/库图表之外的单独图表来管理CRD,因为它们的生命周期完全不同。