仅当存在自定义资源定义时,才使用舵创建kubernetes资源

时间:2019-12-17 08:43:46

标签: kubernetes kubernetes-helm

我有一个舵图,该舵图部署了许多Kubernetes资源。其中之一是自定义资源定义(CRD)类型的资源(ServiceMonitor使用的prometheus-operator)。

我正在寻找一种方法,只有在集群中定义了这样的CRD时,才能“告诉”我要创建此资源的头盔,或者忽略由 引起的错误。缺少这样的CRD的事实。

那有可能吗,我该如何实现呢?

2 个答案:

答案 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,那就更好了。