将 conf 文件嵌入到 helm chart 中
embeding conf files into helm chart
我是新掌舵人。我正在构建一个包含大量配置文件的 splunk helm chart。我目前在 configmap 中使用类似的东西 ..
apiVersion: v1
kind: ConfigMap
metadata:
name: splunk-master-configmap
data:
indexes.conf: |
# global settings
# Inheritable by all indexes: no hot/warm bucket can exceed 1 TB.
# Individual indexes can override this setting.
homePath.maxDataSizeMB = 1000000
但我更希望将 conf 文件放在单独的文件夹中,例如configs/helloworld.conf 并遇到了 "tpl" 但我正在努力了解如何实施它。 - 任何人都可以建议最佳做法。在旁注中,splunk 有总统令 >> 因此可能有许多 indexes.conf 文件用于不同的位置。有没有人对如何最好地实施这个有任何想法?!??!
干杯。
如果文件的内容是静态的,那么您可以在图表中创建一个与模板目录 (not inside it) 相同级别的文件目录,并像这样引用它们:
kind: ConfigMap
metadata:
name: splunk-master-configmap
data:
{{ (.Files.Glob "files/indexes.conf").AsConfig | indent 2 }}
{{ (.Files.Glob "files/otherfile.conf").AsConfig | indent 2 }}
# ... and so on
如果您希望能够引用文件中的变量值,以便从 values.yaml 控制内容,那么这会崩溃。如果你想单独公开每个值,那么有一个 example in the helm documentation using range. But I think a good fit or your case is what the stable/mysql chart does。它有一个将值作为字符串的 ConfigMap:
{{- if .Values.configurationFiles }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "mysql.fullname" . }}-configuration
data:
{{- range $key, $val := .Values.configurationFiles }}
{{ $key }}: |-
{{ $val | indent 4}}
{{- end }}
{{- end -}}
并且 values.yaml 允许图表用户设置和覆盖文件及其内容:
# Custom mysql configuration files used to override default mysql settings
configurationFiles:
# mysql.cnf: |-
# [mysqld]
# skip-name-resolve
# ssl-ca=/ssl/ca.pem
# ssl-cert=/ssl/server-cert.pem
# ssl-key=/ssl/server-key.pem
它注释掉该内容并将其留给图表的用户进行设置,但您可以在 values.yaml 中使用默认值。
如果您需要更大的灵活性,您只需要 tpl
。 stable/keycloak chart lets the user of the chart create their own configmap and point it into the keycloak deployment via tpl。但我认为您的情况可能最接近 mysql 的情况。
编辑:tpl 函数也可用于获取用 Files.Get 加载的文件的内容,并有效地使该内容成为模板的一部分 - 如果您对此感兴趣,请参阅 How do I load multiple templated config files into a helm chart?
我是新掌舵人。我正在构建一个包含大量配置文件的 splunk helm chart。我目前在 configmap 中使用类似的东西 ..
apiVersion: v1
kind: ConfigMap
metadata:
name: splunk-master-configmap
data:
indexes.conf: |
# global settings
# Inheritable by all indexes: no hot/warm bucket can exceed 1 TB.
# Individual indexes can override this setting.
homePath.maxDataSizeMB = 1000000
但我更希望将 conf 文件放在单独的文件夹中,例如configs/helloworld.conf 并遇到了 "tpl" 但我正在努力了解如何实施它。 - 任何人都可以建议最佳做法。在旁注中,splunk 有总统令 >> 因此可能有许多 indexes.conf 文件用于不同的位置。有没有人对如何最好地实施这个有任何想法?!??!
干杯。
如果文件的内容是静态的,那么您可以在图表中创建一个与模板目录 (not inside it) 相同级别的文件目录,并像这样引用它们:
kind: ConfigMap
metadata:
name: splunk-master-configmap
data:
{{ (.Files.Glob "files/indexes.conf").AsConfig | indent 2 }}
{{ (.Files.Glob "files/otherfile.conf").AsConfig | indent 2 }}
# ... and so on
如果您希望能够引用文件中的变量值,以便从 values.yaml 控制内容,那么这会崩溃。如果你想单独公开每个值,那么有一个 example in the helm documentation using range. But I think a good fit or your case is what the stable/mysql chart does。它有一个将值作为字符串的 ConfigMap:
{{- if .Values.configurationFiles }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "mysql.fullname" . }}-configuration
data:
{{- range $key, $val := .Values.configurationFiles }}
{{ $key }}: |-
{{ $val | indent 4}}
{{- end }}
{{- end -}}
并且 values.yaml 允许图表用户设置和覆盖文件及其内容:
# Custom mysql configuration files used to override default mysql settings
configurationFiles:
# mysql.cnf: |-
# [mysqld]
# skip-name-resolve
# ssl-ca=/ssl/ca.pem
# ssl-cert=/ssl/server-cert.pem
# ssl-key=/ssl/server-key.pem
它注释掉该内容并将其留给图表的用户进行设置,但您可以在 values.yaml 中使用默认值。
如果您需要更大的灵活性,您只需要 tpl
。 stable/keycloak chart lets the user of the chart create their own configmap and point it into the keycloak deployment via tpl。但我认为您的情况可能最接近 mysql 的情况。
编辑:tpl 函数也可用于获取用 Files.Get 加载的文件的内容,并有效地使该内容成为模板的一部分 - 如果您对此感兴趣,请参阅 How do I load multiple templated config files into a helm chart?