我目前正在为我的多服务应用程序编写一个Helm图表。在应用程序中,我依赖于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预挂钩安装之外了吗?
发布于 2019-11-27 04:46:20
Helm v2的简单答案是在运行helm install时手动选择--no-crd-hook标志。
使用内置.Capabilities变量的解决方法可以是一种解决方法。例如,使用这个:
{{- if not (.Capabilities.APIVersions.Has "virtualmachineinstancepresets.kubevirt.io/v1beta1/MyResource") }}
apiVersion: ...
{{- end}}然而,这也意味着您将再也无法管理由Helm安装的CRD。
查看博文Helm V2 CRD管理的一个长长的答案,它解释了不同的方法。不过,我引述如下:
CRD管理层在掌舵是,说得好一点,完全可怕。
就我个人而言,我建议通过依赖于它的应用程序/库图表之外的单独图表来管理CRD,因为它们的生命周期完全不同。
https://stackoverflow.com/questions/55093143
复制相似问题