首页 > 解决方案 > 将 conf 文件嵌入 helm chart

问题描述

我是新掌舵人。我正在构建一个带有大量 conf 文件的 splunk helm 图表。我目前在 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 有总统顺序 >> 因此可能有许多 index.conf 文件在不同位置使用。有没有人对如何最好地实施这个有任何想法?!??!

干杯。

标签: templateskubernetessplunkconfigmapkubernetes-helm

解决方案


如果文件的内容是静态的,那么您可以在图表中创建与模板目录相同级别的文件目录(不在其中)并像这样引用它们:

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 控制内容,那么这会发生故障。如果您想单独公开每个值,那么helm 文档中有一个使用 range 的示例但我认为stable/mysql 图表的作用很合适,或者你的情况。它有一个将值作为字符串的 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 图表允许图表用户创建自己的配置映射,并通过 tpl将其指向 keycloak 部署。但我认为你的情况可能最接近 mysql 的情况。

编辑:tpl 函数还可用于获取使用 Files.Get 加载的文件的内容,并有效地使该内容成为模板的一部分 - 请参阅如何将多个模板化配置文件加载到 helm 图表中?如果你对此感兴趣


推荐阅读