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

ava*_*sin 2 kubernetes kubernetes-helm

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

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

deployment.yaml

{{- if .Values.isDev }}
deployment code
{{- end }}
Run Code Online (Sandbox Code Playgroud)

service.yaml

{{- if .Values.isDev }}
service code
{{- end }}
Run Code Online (Sandbox Code Playgroud)

Bar*_*two 14

此外,对于当前版本的 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
Run Code Online (Sandbox Code Playgroud)

values.yaml可能有:

one-dep:
  enabled: true

another-dep:
  enabled: false
Run Code Online (Sandbox Code Playgroud)

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

这是文档的链接


Cmy*_*ker 7

在 Helm 3 之前,无法在requests.yaml中禁用“本地”解压图表,存储库字段始终是必需的,因此始终无法禁用解压图表。此评论中也提到了这一点是否可以禁用 kubernetes 中图表文件夹中的图表?

\n

在 Helm 3 中,这个问题得到了解决,感谢https://github.com/helm/helm/issues/3742#issuecomment-574056164
\nMy Chart.yaml 如下所示:

\n
dependencies:\n  - name: mongodb-replicaset\n    version: ^3.15.1\n    repository: https://kubernetes-charts.storage.googleapis.com\n    condition: mongodb.enabled\n  - name: elasticmq\n    version: 0.1.0\n    condition: elasticmq.enabled\n  - name: jhipster-registry\n    version: 0.1.0\n    condition: jhipster-registry.enabled\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
Update Complete. \xe2\x8e\x88Happy Helming!\xe2\x8e\x88\nSaving 3 charts\nDownloading mongodb-replicaset from repo https://kubernetes-charts.storage.googleapis.com\nDependency elasticmq did not declare a repository. Assuming it exists in the charts directory\nDependency jhipster-registry did not declare a repository. Assuming it exists in the charts directory\nDeleting outdated charts\n
Run Code Online (Sandbox Code Playgroud)\n

因此内置图表禁用不会再破坏任何内容并且可以使用。

\n


Rad*_*nka 5

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

{{- if .Values.enabled }}
...
{{- end }}
Run Code Online (Sandbox Code Playgroud)

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

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

mysql:
  enabled: false

mysql-dev:
  enabled: true
Run Code Online (Sandbox Code Playgroud)