我目前正在为我的多服务应用程序编写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挂机前安装中排除?
答案 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,因为它们的生命周期完全不同。