是否可以禁用位于 kubernetes 图表文件夹中的图表?

Is it possible to disable chart located in charts folder in kubernetes?

我在 charts/ 目录中有一个子图。我想为某些部署禁用它。

有可能吗?目前我看到了向所有模板添加条件的唯一方法,如下所示:

deployment.yaml

{{- if .Values.isDev }}
deployment code
{{- end }}

service.yaml

{{- if .Values.isDev }}
service code
{{- end }}

作为一般的经验法则,我总是

{{- if .Values.enabled }}
...
{{- end }}

在每个子图中的每个文件中。根据情况,常规组件的默认值将是 true 或与开发相关的 false,或者如果我想以完全选择性的方式启用它们,则所有内容的默认值将是 false。这种方法的典型部署值如下所示:

api:
  enabled: true
  database:
    host: mysql-dev

mysql:
  enabled: false

mysql-dev:
  enabled: true

此外,对于当前版本的Helm(此时为2.12),也可以写一个requirements.yaml,其中不仅可以指定Helm下载的远程图表,还可以指定内部图表。 charts 文件夹。在此 requirements.yaml 中,可以为每个依赖项指定一个 condition 字段。该字段是父值的路径。

因此,例如,鉴于此 requirements.yaml

dependencies:
  - name: one-dep
    version: 0.1.0
    condition: one-dep.enabled
  - name: another-dep
    version: 0.1.0
    condition: another-dep.enabled

您的 values.yaml 可能有:

one-dep:
  enabled: true

another-dep:
  enabled: false

这将导致 Helm 仅包含 one-dep 图表。 值得注意的是,如果condition中指定的路径不存在,则默认为true.

Here's the link to the doc

在 Helm 3 之前,无法在 requirements.yaml“本地”解压图表中禁用,存储库字段始终是必需的,因此无法禁用解压图表一直。这个评论里也提到了

在 Helm 3 中,这个问题已经解决,感谢 https://github.com/helm/helm/issues/3742#issuecomment-574056164
我的 Chart.yaml 看起来像这样:

dependencies:
  - name: mongodb-replicaset
    version: ^3.15.1
    repository: https://kubernetes-charts.storage.googleapis.com
    condition: mongodb.enabled
  - name: elasticmq
    version: 0.1.0
    condition: elasticmq.enabled
  - name: jhipster-registry
    version: 0.1.0
    condition: jhipster-registry.enabled

我的 helm 版本是 3.2.1
现在它只是像这样显示警告,但条件仍然有效:

Update Complete. ⎈Happy Helming!⎈
Saving 3 charts
Downloading mongodb-replicaset from repo https://kubernetes-charts.storage.googleapis.com
Dependency elasticmq did not declare a repository. Assuming it exists in the charts directory
Dependency jhipster-registry did not declare a repository. Assuming it exists in the charts directory
Deleting outdated charts

所以内置图表禁用不会再破坏任何东西并且可以使用。