我有一个舵图,该舵图部署了许多Kubernetes资源。其中之一是自定义资源定义(CRD)类型的资源(ServiceMonitor
使用的prometheus-operator
)。
我正在寻找一种方法,只有在集群中定义了这样的CRD时,才能“告诉”我要创建此资源的头盔,或者忽略由 引起的错误。缺少这样的CRD的事实。
那有可能吗,我该如何实现呢?
答案 0 :(得分:3)
Helm的Capabilities对象可以告诉您是否在集群中安装了整个API类。我认为它不能测试特定的自定义资源类型。
在.tpl
文件中,您可以将整个文件包装在{{ if }}...{{ end }}
块中。 Helm并不特别在意文件的呈现版本是否为空。
这将导致您找到一个文件,例如:
{{ if .Capabilities.APIVersions.Has "monitoring.coreos.com/v1" -}}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
...
{{ end -}}
如果将操作员安装在集群中,则会安装该文件;否则,将跳过该文件。
答案 1 :(得分:1)
如果您使用的是Helm 3,则可以将CRD放在crds/
目录中。头盔将以不同的方式处理,请参阅文档here。
在Helm 2中,还有另一种使用crd-install钩子的机制。您可以将以下内容添加到CRD中:
annotations:
"helm.sh/hook": crd-install
此方法存在一些局限性,因此,如果您使用的是Helm 3,那就更好了。