是否可以禁用位于 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
.
在 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
所以内置图表禁用不会再破坏任何东西并且可以使用。
我在 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
.
在 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
所以内置图表禁用不会再破坏任何东西并且可以使用。